From 0d235fe94125261474a2887aac1af26a9edffa34 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Sun, 21 Jul 2024 21:38:45 +0200
Subject: [PATCH 001/273] materialItem: validate that quantity is greater than
 0

closes #5077
---
 api/src/Entity/MaterialItem.php               |  1 +
 .../MaterialItems/CreateMaterialItemTest.php  | 16 ++++++++++
 .../MaterialItems/UpdateMaterialItemTest.php  | 17 ++++++++++
 ...est__testOpenApiSpecMatchesSnapshot__1.yml |  6 ++++
 .../material/DialogMaterialItemForm.vue       |  1 +
 .../material/MaterialCreateItem.vue           |  1 +
 .../src/components/material/MaterialTable.vue |  1 +
 frontend/src/locales/de.json                  |  1 +
 frontend/src/locales/en.json                  |  1 +
 frontend/src/locales/fr.json                  |  1 +
 frontend/src/locales/it.json                  |  1 +
 frontend/src/plugins/veeValidate.js           |  3 ++
 .../veeValidate/__tests__/greaterThan.spec.js | 31 +++++++++++++++++++
 .../src/plugins/veeValidate/greaterThan.js    | 17 ++++++++++
 14 files changed, 98 insertions(+)
 create mode 100644 frontend/src/plugins/veeValidate/__tests__/greaterThan.spec.js
 create mode 100644 frontend/src/plugins/veeValidate/greaterThan.js

diff --git a/api/src/Entity/MaterialItem.php b/api/src/Entity/MaterialItem.php
index b51237001f..b076318d5a 100644
--- a/api/src/Entity/MaterialItem.php
+++ b/api/src/Entity/MaterialItem.php
@@ -110,6 +110,7 @@ class MaterialItem extends BaseEntity implements BelongsToCampInterface, CopyFro
      * The number of items or the amount in the unit of items that are required.
      */
     #[ApiProperty(example: 1.5)]
+    #[Assert\GreaterThan(0)]
     #[Groups(['read', 'write'])]
     #[ORM\Column(type: 'float', nullable: true)]
     public ?float $quantity = null;
diff --git a/api/tests/Api/MaterialItems/CreateMaterialItemTest.php b/api/tests/Api/MaterialItems/CreateMaterialItemTest.php
index 762b57ab11..8224ab0176 100644
--- a/api/tests/Api/MaterialItems/CreateMaterialItemTest.php
+++ b/api/tests/Api/MaterialItems/CreateMaterialItemTest.php
@@ -7,6 +7,7 @@
 use App\Entity\MaterialItem;
 use App\Tests\Api\ECampApiTestCase;
 use App\Tests\Constraints\CompatibleHalResponse;
+use PHPUnit\Framework\Attributes\TestWith;
 use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
 use Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface;
 use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
@@ -346,6 +347,21 @@ public function testCreateMaterialItemValidatesInvalidQuantity() {
         ]);
     }
 
+    #[TestWith([0])]
+    #[TestWith([-0])]
+    #[TestWith([-0.1])]
+    #[TestWith([-1])]
+    public function testCreateMaterialItemRejectsNegativeQuantity(float $quantity) {
+        static::createClientWithCredentials()->request('POST', '/material_items', ['json' => $this->getExampleWritePayload([
+            'quantity' => $quantity,
+        ])]);
+
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'detail' => 'quantity: This value should be greater than 0.',
+        ]);
+    }
+
     public function testCreateMaterialItemAllowsMissingUnit() {
         static::createClientWithCredentials()->request('POST', '/material_items', ['json' => $this->getExampleWritePayload([], ['unit'])]);
 
diff --git a/api/tests/Api/MaterialItems/UpdateMaterialItemTest.php b/api/tests/Api/MaterialItems/UpdateMaterialItemTest.php
index c6a9d774f6..aaab79376f 100644
--- a/api/tests/Api/MaterialItems/UpdateMaterialItemTest.php
+++ b/api/tests/Api/MaterialItems/UpdateMaterialItemTest.php
@@ -3,6 +3,7 @@
 namespace App\Tests\Api\MaterialItems;
 
 use App\Tests\Api\ECampApiTestCase;
+use PHPUnit\Framework\Attributes\TestWith;
 
 /**
  * @internal
@@ -359,6 +360,22 @@ public function testPatchMaterialItemValidatesInvalidQuantity() {
         ]);
     }
 
+    #[TestWith([0])]
+    #[TestWith([-0])]
+    #[TestWith([-0.1])]
+    #[TestWith([-1])]
+    public function testPatchMaterialItemRejectsNegativeQuantity(float $quantity) {
+        $materialItem = static::getFixture('materialItem1');
+        static::createClientWithCredentials()->request('PATCH', '/material_items/'.$materialItem->getId(), ['json' => [
+            'quantity' => $quantity,
+        ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
+
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'detail' => 'quantity: This value should be greater than 0.',
+        ]);
+    }
+
     public function testPatchMaterialItemAcceptsLargeNumberForQuantity() {
         $materialItem = static::getFixture('materialItem1');
         static::createClientWithCredentials()->request('PATCH', '/material_items/'.$materialItem->getId(), ['json' => [
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
index de1445fbea..f1c4cdbe79 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
@@ -12079,6 +12079,7 @@ components:
         quantity:
           description: 'The number of items or the amount in the unit of items that are required.'
           example: 1.5
+          exclusiveMinimum: 0
           type:
             - 'null'
             - number
@@ -12157,6 +12158,7 @@ components:
                 quantity:
                   description: 'The number of items or the amount in the unit of items that are required.'
                   example: 1.5
+                  exclusiveMinimum: 0
                   type: ['null', number]
                 unit:
                   description: 'An optional unit for measuring the amount of items required.'
@@ -12248,6 +12250,7 @@ components:
         quantity:
           description: 'The number of items or the amount in the unit of items that are required.'
           example: 1.5
+          exclusiveMinimum: 0
           type:
             - 'null'
             - number
@@ -12304,6 +12307,7 @@ components:
         quantity:
           description: 'The number of items or the amount in the unit of items that are required.'
           example: 1.5
+          exclusiveMinimum: 0
           type:
             - 'null'
             - number
@@ -12380,6 +12384,7 @@ components:
         quantity:
           description: 'The number of items or the amount in the unit of items that are required.'
           example: 1.5
+          exclusiveMinimum: 0
           type:
             - 'null'
             - number
@@ -12427,6 +12432,7 @@ components:
         quantity:
           description: 'The number of items or the amount in the unit of items that are required.'
           example: 1.5
+          exclusiveMinimum: 0
           type:
             - 'null'
             - number
diff --git a/frontend/src/components/material/DialogMaterialItemForm.vue b/frontend/src/components/material/DialogMaterialItemForm.vue
index 2c398feedb..3a52631509 100644
--- a/frontend/src/components/material/DialogMaterialItemForm.vue
+++ b/frontend/src/components/material/DialogMaterialItemForm.vue
@@ -3,6 +3,7 @@
     <e-number-field
       v-model="localMaterialItem.quantity"
       path="quantity"
+      vee-rules="greaterThan:0"
       inputmode="decimal"
       autofocus
     />
diff --git a/frontend/src/components/material/MaterialCreateItem.vue b/frontend/src/components/material/MaterialCreateItem.vue
index 85c2af6e79..128bcc15a6 100644
--- a/frontend/src/components/material/MaterialCreateItem.vue
+++ b/frontend/src/components/material/MaterialCreateItem.vue
@@ -11,6 +11,7 @@
         ref="quantity"
         v-model="materialItem.quantity"
         dense
+        vee-rules="greaterThan:0"
         inputmode="decimal"
         path="quantity"
       />
diff --git a/frontend/src/components/material/MaterialTable.vue b/frontend/src/components/material/MaterialTable.vue
index 6891f9e307..632ab8ed32 100644
--- a/frontend/src/components/material/MaterialTable.vue
+++ b/frontend/src/components/material/MaterialTable.vue
@@ -33,6 +33,7 @@
         :disabled="layoutMode || disabled"
         dense
         :uri="item.uri"
+        vee-rules="greaterThan:0"
         path="quantity"
         inputmode="decimal"
       />
diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json
index 15e660cce8..4a33fba56d 100644
--- a/frontend/src/locales/de.json
+++ b/frontend/src/locales/de.json
@@ -512,6 +512,7 @@
       "copied": "{source} kopiert"
     },
     "validation": {
+      "greaterThan": "{_field_} muss grösser sein als {min}",
       "greaterThanOrEqual_date": "{_field_} darf nicht vor {min} liegen",
       "greaterThan_time": "{_field_} muss später als {min} sein",
       "lessThanOrEqual_date": "{_field_} darf nicht nach {max} liegen",
diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json
index 01ac2616c3..21d2cf0f4f 100644
--- a/frontend/src/locales/en.json
+++ b/frontend/src/locales/en.json
@@ -512,6 +512,7 @@
       "copied": "{source} copied"
     },
     "validation": {
+      "greaterThan": "{_field_} must be greater than {min}",
       "greaterThanOrEqual_date": "{_field_} may not be earlier than {min}",
       "greaterThan_time": "{_field_} must be later than {min}",
       "lessThanOrEqual_date": "{_field_} may not be later than {max}",
diff --git a/frontend/src/locales/fr.json b/frontend/src/locales/fr.json
index d9fa2a8769..996d2aa0be 100644
--- a/frontend/src/locales/fr.json
+++ b/frontend/src/locales/fr.json
@@ -492,6 +492,7 @@
       "copied": "{source} copié"
     },
     "validation": {
+      "greaterThan": "{_field_} doit être superieur à {min}",
       "greaterThanOrEqual_date": "{_field_} ne peut pas être antérieure à {min}",
       "greaterThan_time": "{_field_} doit être postérieure à {min}",
       "lessThanOrEqual_date": "{_field_} ne peut pas être postérieure à {max}",
diff --git a/frontend/src/locales/it.json b/frontend/src/locales/it.json
index 9f5e5ee001..db1a87d3a6 100644
--- a/frontend/src/locales/it.json
+++ b/frontend/src/locales/it.json
@@ -472,6 +472,7 @@
       "short": "Errore del server"
     },
     "validation": {
+      "greaterThan": "{_field_} deve essere maggiore di {min}",
       "greaterThanOrEqual_date": "{_field_} non può essere prima che {min}",
       "greaterThan_time": "{_camp_} deve essere posteriore a {min}",
       "lessThanOrEqual_date": "{_camp_} non può essere successivo a {max}",
diff --git a/frontend/src/plugins/veeValidate.js b/frontend/src/plugins/veeValidate.js
index 79748be7c2..ce79aa52aa 100644
--- a/frontend/src/plugins/veeValidate.js
+++ b/frontend/src/plugins/veeValidate.js
@@ -1,6 +1,7 @@
 import { extend, configure, setInteractionMode } from 'vee-validate'
 import * as rules from 'vee-validate/dist/rules'
 import i18n from '@/plugins/i18n'
+import greaterThan from '@/plugins/veeValidate/greaterThan'
 import greaterThan_time from './veeValidate/greaterThan_time.js'
 import greaterThanOrEqual_date from './veeValidate/greaterThanOrEqual_date.js'
 import lessThanOrEqual_date from './veeValidate/lessThanOrEqual_date.js'
@@ -30,6 +31,8 @@ class VeeValidatePlugin {
      * define custom rules
      */
 
+    extend('greaterThan', greaterThan(i18n))
+
     extend('greaterThan_time', greaterThan_time(Vue.dayjs, i18n))
 
     // check if date (value) is equal or larger than another date (min)
diff --git a/frontend/src/plugins/veeValidate/__tests__/greaterThan.spec.js b/frontend/src/plugins/veeValidate/__tests__/greaterThan.spec.js
new file mode 100644
index 0000000000..33294a3326
--- /dev/null
+++ b/frontend/src/plugins/veeValidate/__tests__/greaterThan.spec.js
@@ -0,0 +1,31 @@
+import greaterThan from '@/plugins/veeValidate/greaterThan'
+
+const mockI18n = {
+  $tc: (key) => key,
+}
+
+describe('greaterThan validation', () => {
+  it.each([
+    [[1, { min: 0 }], true],
+    [['1', { min: 0 }], true],
+    [[0, { min: 0 }], false],
+    [[0.0001, { min: 0 }], true],
+    [['0.0001', { min: 0 }], true],
+    [[-0.0001, { min: 0 }], false],
+    [['-0.0001', { min: 0 }], false],
+    [[-0, { min: 0 }], false],
+    [[-1, { min: 0 }], false],
+    [[1e-10, { min: 0 }], true],
+    [[-1e-10, { min: 0 }], false],
+    [['not a number', { min: 0 }], false],
+  ])('validates %p as %p', (input, expected) => {
+    // given
+    const rule = greaterThan(mockI18n)
+
+    // when
+    const result = rule.validate(...input)
+
+    // then
+    expect(result).toBe(expected)
+  })
+})
diff --git a/frontend/src/plugins/veeValidate/greaterThan.js b/frontend/src/plugins/veeValidate/greaterThan.js
new file mode 100644
index 0000000000..854cf95ebc
--- /dev/null
+++ b/frontend/src/plugins/veeValidate/greaterThan.js
@@ -0,0 +1,17 @@
+export default (i18n) => ({
+  params: ['min'],
+  /**
+   *
+   * @param {string} value value of a float number
+   * @param number min   Comparison value in string format 'HH:mm'
+   * @returns {boolean}       validation result
+   */
+  validate: (value, { min }) => {
+    return parseFloat(value) > min
+  },
+  message: (field, { min }) => {
+    return i18n.tc('global.validation.greaterThan', 0, {
+      min: min,
+    })
+  },
+})

From 8b4d5d9fbcbf15903d5c59d33bdb88e5945babdf Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Thu, 1 Aug 2024 19:48:55 +0200
Subject: [PATCH 002/273] refactor/frontend: extract parseTime from
 ETimePicker.vue

---
 .../helpers/dayjs/__tests__/parseTime.spec.js | 41 +++++++++++++++++++
 common/helpers/dayjs/parseTime.js             | 12 ++++++
 .../src/components/form/base/ETimePicker.vue  | 10 ++---
 3 files changed, 56 insertions(+), 7 deletions(-)
 create mode 100644 common/helpers/dayjs/__tests__/parseTime.spec.js
 create mode 100644 common/helpers/dayjs/parseTime.js

diff --git a/common/helpers/dayjs/__tests__/parseTime.spec.js b/common/helpers/dayjs/__tests__/parseTime.spec.js
new file mode 100644
index 0000000000..9fc72ebeda
--- /dev/null
+++ b/common/helpers/dayjs/__tests__/parseTime.spec.js
@@ -0,0 +1,41 @@
+import { default as dayjs, dayjsLocaleMap } from '../../dayjs'
+import parseTime from '../parseTime'
+
+describe('parseTime', () => {
+  describe.each(Object.keys(dayjsLocaleMap))('`%s` locale', (locale) => {
+    beforeEach(() => {
+      dayjs.locale(locale)
+    })
+
+    it.each([
+      ['12:00', '12:00'],
+      ['23:59', '23:59'],
+      ['01:01', '01:01'],
+      ['09:59', '09:59'],
+      ['20:00', '20:00'],
+      ['10:11', '10:11'],
+      ['010:11', '10:11'],
+      ['00010:11', '10:11'],
+      ['18:30', '18:30'],
+      ['001:11', '01:11'],
+      ['000001:11', '01:11'],
+    ])(`parses %s to %s`, (input, output) => {
+      if (locale === 'en') {
+        const parts = input.split(':')
+        if (parts.length === 2) {
+          const hour = parseInt(parts[0])
+          if (hour >= 12) {
+            const newHourNumber = hour > 12 ? hour - 12 : hour
+            input = `${newHourNumber}:${parts[1]} PM`
+          } else {
+            input = `${hour}:${parts[1]} AM`
+          }
+        }
+      }
+
+      const { isValid, parsedDateTime } = parseTime(input)
+      expect(parsedDateTime.format('HH:mm')).toEqual(output)
+      expect(isValid).toEqual(true)
+    })
+  })
+})
diff --git a/common/helpers/dayjs/parseTime.js b/common/helpers/dayjs/parseTime.js
new file mode 100644
index 0000000000..a57c9dd666
--- /dev/null
+++ b/common/helpers/dayjs/parseTime.js
@@ -0,0 +1,12 @@
+import dayjs from '../dayjs'
+
+export default (val) => {
+  let valIgnoringLeadingZero = val.replace(/^0*?([\d]{1,2}):/, '$1:')
+  const parsedDateTime = dayjs.utc(valIgnoringLeadingZero, 'LT')
+  const formatted = parsedDateTime.format('LT')
+  if (!formatted.startsWith('0') && valIgnoringLeadingZero.match(/^0\d/)) {
+    valIgnoringLeadingZero = valIgnoringLeadingZero.slice(1)
+  }
+  const isValid = parsedDateTime.isValid() && formatted === valIgnoringLeadingZero
+  return { parsedDateTime, isValid }
+}
diff --git a/frontend/src/components/form/base/ETimePicker.vue b/frontend/src/components/form/base/ETimePicker.vue
index b2e30d2ad0..2f240d1f31 100644
--- a/frontend/src/components/form/base/ETimePicker.vue
+++ b/frontend/src/components/form/base/ETimePicker.vue
@@ -45,6 +45,7 @@ Allows 15min steps only
 import BasePicker from './BasePicker.vue'
 import { HTML5_FMT } from '@/common/helpers/dateFormat.js'
 import { formComponentMixin } from '@/mixins/formComponentMixin.js'
+import parseTime from '@/common/helpers/dayjs/parseTime.js'
 
 export default {
   name: 'ETimePicker',
@@ -118,13 +119,8 @@ export default {
      */
     parse(val) {
       if (val) {
-        let valIgnoringLeadingZero = val.replace(/^0*?([\d]{1,2}):/, '$1:')
-        const parsedDateTime = this.$date.utc(valIgnoringLeadingZero, 'LT')
-        const formatted = parsedDateTime.format('LT')
-        if (!formatted.startsWith('0') && valIgnoringLeadingZero.match(/^0\d/)) {
-          valIgnoringLeadingZero = valIgnoringLeadingZero.slice(1)
-        }
-        if (parsedDateTime.isValid() && formatted === valIgnoringLeadingZero) {
+        const { parsedDateTime, isValid } = parseTime(val)
+        if (isValid) {
           const newValue = this.setTimeOnValue(parsedDateTime)
           return Promise.resolve(newValue)
         } else {

From 66d1f61e3e10ddf18872e64b0649f23da418ca19 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Fri, 2 Aug 2024 10:06:15 +0200
Subject: [PATCH 003/273] frontend: add fuzzy matching like the swiss federal
 railways (sbb.ch) to parseTime

Inspired by
https://github.com/sbb-design-systems/sbb-angular/blob/24d4a804a55fa671cdf441a4556741ecfa2c638c/src/angular/time-input/time-input.ts
Tests where taken from:
https://github.com/sbb-design-systems/sbb-angular/blob/24d4a804a55fa671cdf441a4556741ecfa2c638c/src/angular/time-input/time-input.spec.ts#L38

Issue: #5129
---
 .../helpers/dayjs/__tests__/parseTime.spec.js | 14 ++++++++
 common/helpers/dayjs/parseTime.js             | 35 ++++++++++++++++++-
 .../form/base/__tests__/ETimePicker.spec.js   | 34 ++++++++----------
 3 files changed, 63 insertions(+), 20 deletions(-)

diff --git a/common/helpers/dayjs/__tests__/parseTime.spec.js b/common/helpers/dayjs/__tests__/parseTime.spec.js
index 9fc72ebeda..d42d2cdb5e 100644
--- a/common/helpers/dayjs/__tests__/parseTime.spec.js
+++ b/common/helpers/dayjs/__tests__/parseTime.spec.js
@@ -19,6 +19,20 @@ describe('parseTime', () => {
       ['18:30', '18:30'],
       ['001:11', '01:11'],
       ['000001:11', '01:11'],
+      ['16:30', '16:30'],
+      ['1', '01:00'],
+      ['12', '12:00'],
+      ['123', '01:23'],
+      ['1234', '12:34'],
+      ['13567', '13:56'],
+      ['3.56', '03:56'],
+      ['23,4', '23:04'],
+      ['1,30', '01:30'],
+      ['1:2', '01:02'],
+      ['1.2', '01:02'],
+      ['1,2', '01:02'],
+      ['1-2', '01:02'],
+      ['1;2', '01:02'],
     ])(`parses %s to %s`, (input, output) => {
       if (locale === 'en') {
         const parts = input.split(':')
diff --git a/common/helpers/dayjs/parseTime.js b/common/helpers/dayjs/parseTime.js
index a57c9dd666..69ea2980ca 100644
--- a/common/helpers/dayjs/parseTime.js
+++ b/common/helpers/dayjs/parseTime.js
@@ -1,4 +1,23 @@
 import dayjs from '../dayjs'
+import { HTML5_FMT } from '../dateFormat'
+
+const REGEX_WITH_COLON = /([0-9]{1,2})[.:,\-;_hH]?([0-9]{1,2})?/
+const REGEX_WITHOUT_COLON = /([0-9]{1,2})([0-9]{2})/
+
+function matchDigitGroups(input) {
+  if (input.match(/^\d{1,2}$/)) {
+    return [input, '0']
+  }
+  const matchWithoutColon = input.match(REGEX_WITHOUT_COLON)
+  if (matchWithoutColon) {
+    return matchWithoutColon.slice(1)
+  }
+  const matchWithColon = input.match(REGEX_WITH_COLON)
+  if (matchWithColon) {
+    return matchWithColon.slice(1)
+  }
+  return []
+}
 
 export default (val) => {
   let valIgnoringLeadingZero = val.replace(/^0*?([\d]{1,2}):/, '$1:')
@@ -8,5 +27,19 @@ export default (val) => {
     valIgnoringLeadingZero = valIgnoringLeadingZero.slice(1)
   }
   const isValid = parsedDateTime.isValid() && formatted === valIgnoringLeadingZero
-  return { parsedDateTime, isValid }
+
+  if (isValid) {
+    return { parsedDateTime, isValid }
+  }
+
+  const digitGroups = matchDigitGroups(valIgnoringLeadingZero)
+  if (!digitGroups || digitGroups.length < 2) {
+    return { parsedDateTime, isValid }
+  }
+
+  const fuzzyMatchedTime = dayjs.utc(
+    `${digitGroups[0]}:${digitGroups[1]}`,
+    HTML5_FMT.TIME
+  )
+  return { parsedDateTime: fuzzyMatchedTime, isValid: fuzzyMatchedTime.isValid() }
 }
diff --git a/frontend/src/components/form/base/__tests__/ETimePicker.spec.js b/frontend/src/components/form/base/__tests__/ETimePicker.spec.js
index a33decab01..28da96f54e 100644
--- a/frontend/src/components/form/base/__tests__/ETimePicker.spec.js
+++ b/frontend/src/components/form/base/__tests__/ETimePicker.spec.js
@@ -17,7 +17,6 @@ describe('An ETimePicker', () => {
       firstHour: '0',
       labelText: 'Dialog öffnen, um eine Zeit für test zu wählen',
       closeButton: 'Schliessen',
-      timeInWrongLocale: '9:52 AM',
       validationMessage: 'Ungültiges Format, bitte gib die Zeit im Format HH:MM ein',
     },
     en: {
@@ -27,7 +26,6 @@ describe('An ETimePicker', () => {
       firstHour: '12',
       labelText: 'Open dialog to select a time for test',
       closeButton: 'Close',
-      timeInWrongLocale: '09:52',
       validationMessage:
         'Invalid format, please enter the time in the format HH:MM AM/PM',
     },
@@ -358,25 +356,23 @@ describe('An ETimePicker', () => {
     })
 
     describe('validates the input', async () => {
-      it.each([
-        data.timeInWrongLocale,
-        'a' + data.time1,
-        data.time2 + 'a',
-        '0000:a' + data.time3,
-      ])('%s', async (textInput) => {
-        // given
-        render(ETimePicker, {
-          props: { value: TIME1_ISO, label: 'test' },
-        })
-        const inputField = await screen.findByDisplayValue(data.time1)
+      it.each(['not a time', data.time1.replace(':', '/'), '0000:a' + data.time3])(
+        '%s',
+        async (textInput) => {
+          // given
+          render(ETimePicker, {
+            props: { value: TIME1_ISO, label: 'test' },
+          })
+          const inputField = await screen.findByDisplayValue(data.time1)
 
-        // when
-        await user.clear(inputField)
-        await user.keyboard(textInput)
+          // when
+          await user.clear(inputField)
+          await user.keyboard(textInput)
 
-        // then
-        await screen.findByText(data.validationMessage)
-      })
+          // then
+          await screen.findByText(data.validationMessage)
+        }
+      )
     })
 
     it('works with invalid initialization', async () => {

From d940cf349445bc5e016ef77571e12788185db39d Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Fri, 2 Aug 2024 10:09:58 +0200
Subject: [PATCH 004/273] frontend: remove special handling of en locale from
 test in parseTime

Now with the fuzzy matching, we can remove this.
And also test the 00:00 case, because 00:00 becomes 12:00 AM
in the english locale.

Issue: #5129
---
 common/helpers/dayjs/__tests__/parseTime.spec.js | 14 +-------------
 1 file changed, 1 insertion(+), 13 deletions(-)

diff --git a/common/helpers/dayjs/__tests__/parseTime.spec.js b/common/helpers/dayjs/__tests__/parseTime.spec.js
index d42d2cdb5e..0581735645 100644
--- a/common/helpers/dayjs/__tests__/parseTime.spec.js
+++ b/common/helpers/dayjs/__tests__/parseTime.spec.js
@@ -8,6 +8,7 @@ describe('parseTime', () => {
     })
 
     it.each([
+      ['00:00', '00:00'],
       ['12:00', '12:00'],
       ['23:59', '23:59'],
       ['01:01', '01:01'],
@@ -34,19 +35,6 @@ describe('parseTime', () => {
       ['1-2', '01:02'],
       ['1;2', '01:02'],
     ])(`parses %s to %s`, (input, output) => {
-      if (locale === 'en') {
-        const parts = input.split(':')
-        if (parts.length === 2) {
-          const hour = parseInt(parts[0])
-          if (hour >= 12) {
-            const newHourNumber = hour > 12 ? hour - 12 : hour
-            input = `${newHourNumber}:${parts[1]} PM`
-          } else {
-            input = `${hour}:${parts[1]} AM`
-          }
-        }
-      }
-
       const { isValid, parsedDateTime } = parseTime(input)
       expect(parsedDateTime.format('HH:mm')).toEqual(output)
       expect(isValid).toEqual(true)

From e273eb520d9cfc9f8422b139ec2b6d7f945fe446 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Fri, 2 Aug 2024 11:26:52 +0200
Subject: [PATCH 005/273] frontend: add more tests to the fuzzy time parsing in
 parseTime.js

There are some special cases we need to think about.
Thus, the implementation changes too.

The case for en seems to be complex, for
people with the locale english, the leading
zero case is not covered that good anymore.
But for everyone else it is better.

Issue: #5129
---
 .../helpers/dayjs/__tests__/parseTime.spec.js | 76 ++++++++++++++++---
 common/helpers/dayjs/parseTime.js             | 17 +++--
 .../form/base/__tests__/ETimePicker.spec.js   | 27 +++----
 3 files changed, 90 insertions(+), 30 deletions(-)

diff --git a/common/helpers/dayjs/__tests__/parseTime.spec.js b/common/helpers/dayjs/__tests__/parseTime.spec.js
index 0581735645..a80dd2c66b 100644
--- a/common/helpers/dayjs/__tests__/parseTime.spec.js
+++ b/common/helpers/dayjs/__tests__/parseTime.spec.js
@@ -1,5 +1,7 @@
 import { default as dayjs, dayjsLocaleMap } from '../../dayjs'
 import parseTime from '../parseTime'
+import { padStart, range } from 'lodash'
+import { HTML5_FMT } from '../../dateFormat'
 
 describe('parseTime', () => {
   describe.each(Object.keys(dayjsLocaleMap))('`%s` locale', (locale) => {
@@ -7,6 +9,11 @@ describe('parseTime', () => {
       dayjs.locale(locale)
     })
 
+    const numbersFrom1to23 = range(1, 24).map((number) => [
+      `${number}`,
+      `${padStart(number, 2, '0')}:00`,
+    ])
+
     it.each([
       ['00:00', '00:00'],
       ['12:00', '12:00'],
@@ -15,17 +22,19 @@ describe('parseTime', () => {
       ['09:59', '09:59'],
       ['20:00', '20:00'],
       ['10:11', '10:11'],
-      ['010:11', '10:11'],
-      ['00010:11', '10:11'],
+      ['010:11', '10:11', { en: '00:10' }],
+      ['00010:11', '10:11', { en: '00:01' }],
       ['18:30', '18:30'],
-      ['001:11', '01:11'],
-      ['000001:11', '01:11'],
+      ['001:11', '01:11', { en: '00:01' }],
+      ['000001:11', '01:11', { en: '00:00' }],
       ['16:30', '16:30'],
-      ['1', '01:00'],
-      ['12', '12:00'],
+      ...numbersFrom1to23,
+      [0, '00:00'],
+      [-0, '00:00'],
       ['123', '01:23'],
       ['1234', '12:34'],
       ['13567', '13:56'],
+      ['407', '04:07'],
       ['3.56', '03:56'],
       ['23,4', '23:04'],
       ['1,30', '01:30'],
@@ -34,10 +43,57 @@ describe('parseTime', () => {
       ['1,2', '01:02'],
       ['1-2', '01:02'],
       ['1;2', '01:02'],
-    ])(`parses %s to %s`, (input, output) => {
-      const { isValid, parsedDateTime } = parseTime(input)
-      expect(parsedDateTime.format('HH:mm')).toEqual(output)
-      expect(isValid).toEqual(true)
+      ['01', '01:00'],
+      ['18', '18:00'],
+      ['23', '23:00'],
+      // not specified like this, but the current behaviour
+      ['010', '00:10'],
+      ['023', '00:23'],
+      ['145', '01:45'],
+      ['159', '01:59'],
+      ['200', '02:00'],
+      ['214', '02:14'],
+      ['313', '03:13'],
+      ['659', '06:59'],
+    ])(
+      `parses %s to %s (but special case for %s)`,
+      (input, output, specialCaseForLocale = {}) => {
+        const { isValid, parsedDateTime } = parseTime(input)
+
+        const expectedOutput =
+          locale in specialCaseForLocale ? specialCaseForLocale[locale] : output
+
+        expect(parsedDateTime.format('HH:mm')).toEqual(expectedOutput)
+        // the resulting dayjs object should not flow over to the next day
+        expect(parsedDateTime.format(HTML5_FMT.DATE)).toEqual(
+          dayjs().format(HTML5_FMT.DATE)
+        )
+        expect(isValid).toEqual(true)
+      }
+    )
+
+    it.each([
+      [null],
+      [undefined],
+      [''],
+      [' '],
+      ['\t'],
+      [[]],
+      [{}],
+      ['invalid time'],
+      ['a very long time that the cases are in multiple lines'],
+      ['24'],
+      ['99'],
+      ['2525'],
+      ['160'],
+      ['189'],
+      ['191'],
+      ['260'],
+      ['269'],
+      ['999'],
+    ])(`rejects %s`, (input) => {
+      const { isValid } = parseTime(input)
+      expect(isValid).toEqual(false)
     })
   })
 })
diff --git a/common/helpers/dayjs/parseTime.js b/common/helpers/dayjs/parseTime.js
index 69ea2980ca..416e2f8dd0 100644
--- a/common/helpers/dayjs/parseTime.js
+++ b/common/helpers/dayjs/parseTime.js
@@ -20,7 +20,8 @@ function matchDigitGroups(input) {
 }
 
 export default (val) => {
-  let valIgnoringLeadingZero = val.replace(/^0*?([\d]{1,2}):/, '$1:')
+  const stringVal = `${val}`
+  let valIgnoringLeadingZero = stringVal.replace(/^0*?([\d]{1,2}):/, '$1:')
   const parsedDateTime = dayjs.utc(valIgnoringLeadingZero, 'LT')
   const formatted = parsedDateTime.format('LT')
   if (!formatted.startsWith('0') && valIgnoringLeadingZero.match(/^0\d/)) {
@@ -32,14 +33,20 @@ export default (val) => {
     return { parsedDateTime, isValid }
   }
 
-  const digitGroups = matchDigitGroups(valIgnoringLeadingZero)
+  const digitGroups = matchDigitGroups(stringVal)
   if (!digitGroups || digitGroups.length < 2) {
     return { parsedDateTime, isValid }
   }
 
-  const fuzzyMatchedTime = dayjs.utc(
-    `${digitGroups[0]}:${digitGroups[1]}`,
+  const hours = digitGroups[0]
+  const minutes = digitGroups[1]
+  const fuzzyMatchedTime = dayjs.utc(`${hours}:${minutes}`, HTML5_FMT.TIME)
+  const fuzzyMatchedTimeToday = dayjs.utc(
+    fuzzyMatchedTime.format(HTML5_FMT.TIME),
     HTML5_FMT.TIME
   )
-  return { parsedDateTime: fuzzyMatchedTime, isValid: fuzzyMatchedTime.isValid() }
+  if (hours > 23 || minutes > 59) {
+    return { parsedDateTime, isValid: false }
+  }
+  return { parsedDateTime: fuzzyMatchedTimeToday, isValid: fuzzyMatchedTime.isValid() }
 }
diff --git a/frontend/src/components/form/base/__tests__/ETimePicker.spec.js b/frontend/src/components/form/base/__tests__/ETimePicker.spec.js
index 28da96f54e..36db6643bb 100644
--- a/frontend/src/components/form/base/__tests__/ETimePicker.spec.js
+++ b/frontend/src/components/form/base/__tests__/ETimePicker.spec.js
@@ -356,23 +356,20 @@ describe('An ETimePicker', () => {
     })
 
     describe('validates the input', async () => {
-      it.each(['not a time', data.time1.replace(':', '/'), '0000:a' + data.time3])(
-        '%s',
-        async (textInput) => {
-          // given
-          render(ETimePicker, {
-            props: { value: TIME1_ISO, label: 'test' },
-          })
-          const inputField = await screen.findByDisplayValue(data.time1)
+      it.each(['not a time', data.time1.replace(':', '/')])('%s', async (textInput) => {
+        // given
+        render(ETimePicker, {
+          props: { value: TIME1_ISO, label: 'test' },
+        })
+        const inputField = await screen.findByDisplayValue(data.time1)
 
-          // when
-          await user.clear(inputField)
-          await user.keyboard(textInput)
+        // when
+        await user.clear(inputField)
+        await user.keyboard(textInput)
 
-          // then
-          await screen.findByText(data.validationMessage)
-        }
-      )
+        // then
+        await screen.findByText(data.validationMessage)
+      })
     })
 
     it('works with invalid initialization', async () => {

From fa20ec45bac241d00bdaca775ab8dcd8f88a77da Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Fri, 2 Aug 2024 12:14:29 +0200
Subject: [PATCH 006/273] frontend: remove parsing tests in ETimePicker.spec.js

They are already covered in parseTime.spec.js
---
 .../form/base/__tests__/ETimePicker.spec.js   | 43 -------------------
 1 file changed, 43 deletions(-)

diff --git a/frontend/src/components/form/base/__tests__/ETimePicker.spec.js b/frontend/src/components/form/base/__tests__/ETimePicker.spec.js
index 36db6643bb..4c0eee8378 100644
--- a/frontend/src/components/form/base/__tests__/ETimePicker.spec.js
+++ b/frontend/src/components/form/base/__tests__/ETimePicker.spec.js
@@ -237,49 +237,6 @@ describe('An ETimePicker', () => {
           from: timeConfig1,
           to: timeConfig3,
         },
-        //with leading zero
-        {
-          from: timeConfig1,
-          to: {
-            ...timeConfig2,
-            textInput: '0' + timeConfig2.localizedTime,
-          },
-        },
-        {
-          from: timeConfig1,
-          to: {
-            ...timeConfig2,
-            textInput: '0000' + timeConfig2.localizedTime,
-          },
-        },
-        {
-          from: timeConfig2,
-          to: {
-            ...timeConfig1,
-            textInput: '0' + timeConfig1.localizedTime,
-          },
-        },
-        {
-          from: timeConfig2,
-          to: {
-            ...timeConfig1,
-            textInput: '00000' + timeConfig1.localizedTime,
-          },
-        },
-        {
-          from: timeConfig1,
-          to: {
-            ...timeConfig3,
-            textInput: '0' + timeConfig3.localizedTime,
-          },
-        },
-        {
-          from: timeConfig1,
-          to: {
-            ...timeConfig3,
-            textInput: '00000' + timeConfig3.localizedTime,
-          },
-        },
       ])(
         `from $from.localizedTime to $to.textInput`,
         async ({

From 0f552ec40a28e47179adbfee07ed6f5618b6455b Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Fri, 2 Aug 2024 15:08:47 +0200
Subject: [PATCH 007/273] e2e: dump current eslint config

With node_modules/.bin/eslint --print-config specs/login.cy.js > eslint-config-js.json
That we are sure that the config did not change during the migration.

Issue: #5282
---
 e2e/eslint-config-js.json | 259 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 259 insertions(+)
 create mode 100644 e2e/eslint-config-js.json

diff --git a/e2e/eslint-config-js.json b/e2e/eslint-config-js.json
new file mode 100644
index 0000000000..5232415e09
--- /dev/null
+++ b/e2e/eslint-config-js.json
@@ -0,0 +1,259 @@
+{
+  "env": {
+    "node": true,
+    "mocha": true,
+    "cypress/globals": true
+  },
+  "globals": {},
+  "parser": null,
+  "parserOptions": {},
+  "plugins": ["cypress", "prettier"],
+  "rules": {
+    "prefer-const": ["error"],
+    "prettier/prettier": ["error"],
+    "arrow-body-style": ["off"],
+    "prefer-arrow-callback": ["off"],
+    "curly": [0],
+    "no-unexpected-multiline": [0],
+    "@typescript-eslint/lines-around-comment": [0],
+    "@typescript-eslint/quotes": [0],
+    "babel/quotes": [0],
+    "unicorn/template-indent": [0],
+    "vue/html-self-closing": [0],
+    "vue/max-len": [0],
+    "@babel/object-curly-spacing": ["off"],
+    "@babel/semi": ["off"],
+    "@typescript-eslint/block-spacing": ["off"],
+    "@typescript-eslint/brace-style": ["off"],
+    "@typescript-eslint/comma-dangle": ["off"],
+    "@typescript-eslint/comma-spacing": ["off"],
+    "@typescript-eslint/func-call-spacing": ["off"],
+    "@typescript-eslint/indent": ["off"],
+    "@typescript-eslint/key-spacing": ["off"],
+    "@typescript-eslint/keyword-spacing": ["off"],
+    "@typescript-eslint/member-delimiter-style": ["off"],
+    "@typescript-eslint/no-extra-parens": ["off"],
+    "@typescript-eslint/no-extra-semi": ["off"],
+    "@typescript-eslint/object-curly-spacing": ["off"],
+    "@typescript-eslint/semi": ["off"],
+    "@typescript-eslint/space-before-blocks": ["off"],
+    "@typescript-eslint/space-before-function-paren": ["off"],
+    "@typescript-eslint/space-infix-ops": ["off"],
+    "@typescript-eslint/type-annotation-spacing": ["off"],
+    "babel/object-curly-spacing": ["off"],
+    "babel/semi": ["off"],
+    "flowtype/boolean-style": ["off"],
+    "flowtype/delimiter-dangle": ["off"],
+    "flowtype/generic-spacing": ["off"],
+    "flowtype/object-type-curly-spacing": ["off"],
+    "flowtype/object-type-delimiter": ["off"],
+    "flowtype/quotes": ["off"],
+    "flowtype/semi": ["off"],
+    "flowtype/space-after-type-colon": ["off"],
+    "flowtype/space-before-generic-bracket": ["off"],
+    "flowtype/space-before-type-colon": ["off"],
+    "flowtype/union-intersection-spacing": ["off"],
+    "react/jsx-child-element-spacing": ["off"],
+    "react/jsx-closing-bracket-location": ["off"],
+    "react/jsx-closing-tag-location": ["off"],
+    "react/jsx-curly-newline": ["off"],
+    "react/jsx-curly-spacing": ["off"],
+    "react/jsx-equals-spacing": ["off"],
+    "react/jsx-first-prop-new-line": ["off"],
+    "react/jsx-indent": ["off"],
+    "react/jsx-indent-props": ["off"],
+    "react/jsx-max-props-per-line": ["off"],
+    "react/jsx-newline": ["off"],
+    "react/jsx-one-expression-per-line": ["off"],
+    "react/jsx-props-no-multi-spaces": ["off"],
+    "react/jsx-tag-spacing": ["off"],
+    "react/jsx-wrap-multilines": ["off"],
+    "standard/array-bracket-even-spacing": ["off"],
+    "standard/computed-property-even-spacing": ["off"],
+    "standard/object-curly-even-spacing": ["off"],
+    "unicorn/empty-brace-spaces": ["off"],
+    "unicorn/no-nested-ternary": ["off"],
+    "unicorn/number-literal-case": ["off"],
+    "vue/array-bracket-newline": ["off"],
+    "vue/array-bracket-spacing": ["off"],
+    "vue/array-element-newline": ["off"],
+    "vue/arrow-spacing": ["off"],
+    "vue/block-spacing": ["off"],
+    "vue/block-tag-newline": ["off"],
+    "vue/brace-style": ["off"],
+    "vue/comma-dangle": ["off"],
+    "vue/comma-spacing": ["off"],
+    "vue/comma-style": ["off"],
+    "vue/dot-location": ["off"],
+    "vue/func-call-spacing": ["off"],
+    "vue/html-closing-bracket-newline": ["off"],
+    "vue/html-closing-bracket-spacing": ["off"],
+    "vue/html-end-tags": ["off"],
+    "vue/html-indent": ["off"],
+    "vue/html-quotes": ["off"],
+    "vue/key-spacing": ["off"],
+    "vue/keyword-spacing": ["off"],
+    "vue/max-attributes-per-line": ["off"],
+    "vue/multiline-html-element-content-newline": ["off"],
+    "vue/multiline-ternary": ["off"],
+    "vue/mustache-interpolation-spacing": ["off"],
+    "vue/no-extra-parens": ["off"],
+    "vue/no-multi-spaces": ["off"],
+    "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
+    "vue/object-curly-newline": ["off"],
+    "vue/object-curly-spacing": ["off"],
+    "vue/object-property-newline": ["off"],
+    "vue/operator-linebreak": ["off"],
+    "vue/quote-props": ["off"],
+    "vue/script-indent": ["off"],
+    "vue/singleline-html-element-content-newline": ["off"],
+    "vue/space-in-parens": ["off"],
+    "vue/space-infix-ops": ["off"],
+    "vue/space-unary-ops": ["off"],
+    "vue/template-curly-spacing": ["off"],
+    "space-unary-word-ops": ["off"],
+    "generator-star": ["off"],
+    "no-comma-dangle": ["off"],
+    "no-reserved-keys": ["off"],
+    "no-space-before-semi": ["off"],
+    "no-wrap-func": ["off"],
+    "space-after-function-name": ["off"],
+    "space-before-function-parentheses": ["off"],
+    "space-in-brackets": ["off"],
+    "no-arrow-condition": ["off"],
+    "space-after-keywords": ["off"],
+    "space-before-keywords": ["off"],
+    "space-return-throw-case": ["off"],
+    "no-spaced-func": ["off"],
+    "indent-legacy": ["off"],
+    "array-bracket-newline": ["off"],
+    "array-bracket-spacing": ["off"],
+    "array-element-newline": ["off"],
+    "arrow-parens": ["off"],
+    "arrow-spacing": ["off"],
+    "block-spacing": ["off"],
+    "brace-style": ["off"],
+    "comma-dangle": ["off"],
+    "comma-spacing": ["off"],
+    "comma-style": ["off"],
+    "computed-property-spacing": ["off"],
+    "dot-location": ["off"],
+    "eol-last": ["off"],
+    "func-call-spacing": ["off"],
+    "function-call-argument-newline": ["off"],
+    "function-paren-newline": ["off"],
+    "generator-star-spacing": ["off"],
+    "implicit-arrow-linebreak": ["off"],
+    "indent": ["off"],
+    "jsx-quotes": ["off"],
+    "key-spacing": ["off"],
+    "keyword-spacing": ["off"],
+    "linebreak-style": ["off"],
+    "lines-around-comment": [0],
+    "max-len": [0],
+    "max-statements-per-line": ["off"],
+    "multiline-ternary": ["off"],
+    "new-parens": ["off"],
+    "newline-per-chained-call": ["off"],
+    "no-confusing-arrow": [0],
+    "no-extra-parens": ["off"],
+    "no-extra-semi": ["off"],
+    "no-floating-decimal": ["off"],
+    "no-mixed-operators": [0],
+    "no-mixed-spaces-and-tabs": ["off"],
+    "no-multi-spaces": ["off"],
+    "no-multiple-empty-lines": ["off"],
+    "no-tabs": [0],
+    "no-trailing-spaces": ["off"],
+    "no-whitespace-before-property": ["off"],
+    "nonblock-statement-body-position": ["off"],
+    "object-curly-newline": ["off"],
+    "object-curly-spacing": ["off"],
+    "object-property-newline": ["off"],
+    "one-var-declaration-per-line": ["off"],
+    "operator-linebreak": ["off"],
+    "padded-blocks": ["off"],
+    "quote-props": ["off"],
+    "quotes": [0],
+    "rest-spread-spacing": ["off"],
+    "semi": ["off"],
+    "semi-spacing": ["off"],
+    "semi-style": ["off"],
+    "space-before-blocks": ["off"],
+    "space-before-function-paren": ["off"],
+    "space-in-parens": ["off"],
+    "space-infix-ops": ["off"],
+    "space-unary-ops": ["off"],
+    "switch-colon-spacing": ["off"],
+    "template-curly-spacing": ["off"],
+    "template-tag-spacing": ["off"],
+    "wrap-iife": ["off"],
+    "wrap-regex": ["off"],
+    "yield-star-spacing": ["off"],
+    "react/jsx-space-before-closing": ["off"],
+    "cypress/no-assigning-return-values": ["error"],
+    "cypress/no-unnecessary-waiting": ["error"],
+    "cypress/no-async-tests": ["error"],
+    "cypress/unsafe-to-chain-command": ["error"],
+    "constructor-super": ["error"],
+    "for-direction": ["error"],
+    "getter-return": ["error"],
+    "no-async-promise-executor": ["error"],
+    "no-case-declarations": ["error"],
+    "no-class-assign": ["error"],
+    "no-compare-neg-zero": ["error"],
+    "no-cond-assign": ["error"],
+    "no-const-assign": ["error"],
+    "no-constant-condition": ["error"],
+    "no-control-regex": ["error"],
+    "no-debugger": ["error"],
+    "no-delete-var": ["error"],
+    "no-dupe-args": ["error"],
+    "no-dupe-class-members": ["error"],
+    "no-dupe-else-if": ["error"],
+    "no-dupe-keys": ["error"],
+    "no-duplicate-case": ["error"],
+    "no-empty": ["error"],
+    "no-empty-character-class": ["error"],
+    "no-empty-pattern": ["error"],
+    "no-ex-assign": ["error"],
+    "no-extra-boolean-cast": ["error"],
+    "no-fallthrough": ["error"],
+    "no-func-assign": ["error"],
+    "no-global-assign": ["error"],
+    "no-import-assign": ["error"],
+    "no-inner-declarations": ["error"],
+    "no-invalid-regexp": ["error"],
+    "no-irregular-whitespace": ["error"],
+    "no-loss-of-precision": ["error"],
+    "no-misleading-character-class": ["error"],
+    "no-new-symbol": ["error"],
+    "no-nonoctal-decimal-escape": ["error"],
+    "no-obj-calls": ["error"],
+    "no-octal": ["error"],
+    "no-prototype-builtins": ["error"],
+    "no-redeclare": ["error"],
+    "no-regex-spaces": ["error"],
+    "no-self-assign": ["error"],
+    "no-setter-return": ["error"],
+    "no-shadow-restricted-names": ["error"],
+    "no-sparse-arrays": ["error"],
+    "no-this-before-super": ["error"],
+    "no-undef": ["error"],
+    "no-unreachable": ["error"],
+    "no-unsafe-finally": ["error"],
+    "no-unsafe-negation": ["error"],
+    "no-unsafe-optional-chaining": ["error"],
+    "no-unused-labels": ["error"],
+    "no-unused-vars": ["error"],
+    "no-useless-backreference": ["error"],
+    "no-useless-catch": ["error"],
+    "no-useless-escape": ["error"],
+    "no-with": ["error"],
+    "require-yield": ["error"],
+    "use-isnan": ["error"],
+    "valid-typeof": ["error"]
+  },
+  "settings": {},
+  "ignorePatterns": []
+}

From ec9d57f5fce36ff042886344305119bedf66fba5 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Fri, 2 Aug 2024 15:10:55 +0200
Subject: [PATCH 008/273] e2e: move eslint config to .eslintrc.json

The config migrator needs the configuration to
be in a separate file.
https://eslint.org/blog/2024/05/eslint-configuration-migrator/

Issue: #5282
---
 e2e/.eslintrc.json | 16 ++++++++++++++++
 e2e/package.json   | 16 ----------------
 2 files changed, 16 insertions(+), 16 deletions(-)
 create mode 100644 e2e/.eslintrc.json

diff --git a/e2e/.eslintrc.json b/e2e/.eslintrc.json
new file mode 100644
index 0000000000..079e0c3f02
--- /dev/null
+++ b/e2e/.eslintrc.json
@@ -0,0 +1,16 @@
+{
+  "root": true,
+  "env": {
+    "node": true,
+    "mocha": true
+  },
+  "extends": [
+    "eslint:recommended",
+    "plugin:cypress/recommended",
+    "plugin:prettier/recommended"
+  ],
+  "rules": {
+    "prefer-const": "error",
+    "prettier/prettier": "error"
+  }
+}
diff --git a/e2e/package.json b/e2e/package.json
index f8c8dbc7d3..02e6d278a4 100644
--- a/e2e/package.json
+++ b/e2e/package.json
@@ -18,21 +18,5 @@
     "eslint-plugin-cypress": "3.4.0",
     "eslint-plugin-prettier": "5.2.1",
     "prettier": "3.3.3"
-  },
-  "eslintConfig": {
-    "root": true,
-    "env": {
-      "node": true,
-      "mocha": true
-    },
-    "extends": [
-      "eslint:recommended",
-      "plugin:cypress/recommended",
-      "plugin:prettier/recommended"
-    ],
-    "rules": {
-      "prefer-const": "error",
-      "prettier/prettier": "error"
-    }
   }
 }

From 046b239d6edbf7aaceababc079fbee1048de16ba Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Fri, 2 Aug 2024 15:39:25 +0200
Subject: [PATCH 009/273] e2e: migrate to flat config

Using npx @eslint/migrate-config .eslintrc.json
Then add the additional packages needed
(@eslint/compat, globals, @eslint/eslintrc, @eslint/js)
Add paths from the .gitignore file to the ignored patterns.
Remove the options from the call to eslint which are not
supported anymore in the package.json.

The resulting schema of the command
node_modules/.bin/eslint --print-config specs/login.cy.js > eslint-config-js.json
is different.
But diffing only the rules seemed to look the same.

Issue: #5282
---
 e2e/.eslintrc.json        |   16 -
 e2e/eslint-config-js.json | 1283 ++++++++++++++++++++++++++++++-------
 e2e/eslint.config.mjs     |   39 ++
 e2e/package-lock.json     |  216 +++++--
 e2e/package.json          |   12 +-
 5 files changed, 1263 insertions(+), 303 deletions(-)
 delete mode 100644 e2e/.eslintrc.json
 create mode 100644 e2e/eslint.config.mjs

diff --git a/e2e/.eslintrc.json b/e2e/.eslintrc.json
deleted file mode 100644
index 079e0c3f02..0000000000
--- a/e2e/.eslintrc.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-  "root": true,
-  "env": {
-    "node": true,
-    "mocha": true
-  },
-  "extends": [
-    "eslint:recommended",
-    "plugin:cypress/recommended",
-    "plugin:prettier/recommended"
-  ],
-  "rules": {
-    "prefer-const": "error",
-    "prettier/prettier": "error"
-  }
-}
diff --git a/e2e/eslint-config-js.json b/e2e/eslint-config-js.json
index 5232415e09..5bef341e13 100644
--- a/e2e/eslint-config-js.json
+++ b/e2e/eslint-config-js.json
@@ -1,259 +1,1058 @@
 {
-  "env": {
-    "node": true,
-    "mocha": true,
-    "cypress/globals": true
+  "languageOptions": {
+    "ecmaVersion": 2019,
+    "sourceType": "module",
+    "globals": {
+      "cy": false,
+      "Cypress": false,
+      "expect": false,
+      "assert": false,
+      "chai": false,
+      "AbortController": false,
+      "AbortSignal": false,
+      "addEventListener": false,
+      "alert": false,
+      "AnalyserNode": false,
+      "Animation": false,
+      "AnimationEffectReadOnly": false,
+      "AnimationEffectTiming": false,
+      "AnimationEffectTimingReadOnly": false,
+      "AnimationEvent": false,
+      "AnimationPlaybackEvent": false,
+      "AnimationTimeline": false,
+      "applicationCache": false,
+      "ApplicationCache": false,
+      "ApplicationCacheErrorEvent": false,
+      "atob": false,
+      "Attr": false,
+      "Audio": false,
+      "AudioBuffer": false,
+      "AudioBufferSourceNode": false,
+      "AudioContext": false,
+      "AudioDestinationNode": false,
+      "AudioListener": false,
+      "AudioNode": false,
+      "AudioParam": false,
+      "AudioProcessingEvent": false,
+      "AudioScheduledSourceNode": false,
+      "AudioWorkletGlobalScope": false,
+      "AudioWorkletNode": false,
+      "AudioWorkletProcessor": false,
+      "BarProp": false,
+      "BaseAudioContext": false,
+      "BatteryManager": false,
+      "BeforeUnloadEvent": false,
+      "BiquadFilterNode": false,
+      "Blob": false,
+      "BlobEvent": false,
+      "blur": false,
+      "BroadcastChannel": false,
+      "btoa": false,
+      "BudgetService": false,
+      "ByteLengthQueuingStrategy": false,
+      "Cache": false,
+      "caches": false,
+      "CacheStorage": false,
+      "cancelAnimationFrame": false,
+      "cancelIdleCallback": false,
+      "CanvasCaptureMediaStreamTrack": false,
+      "CanvasGradient": false,
+      "CanvasPattern": false,
+      "CanvasRenderingContext2D": false,
+      "ChannelMergerNode": false,
+      "ChannelSplitterNode": false,
+      "CharacterData": false,
+      "clearInterval": false,
+      "clearTimeout": false,
+      "clientInformation": false,
+      "ClipboardEvent": false,
+      "ClipboardItem": false,
+      "close": false,
+      "closed": false,
+      "CloseEvent": false,
+      "Comment": false,
+      "CompositionEvent": false,
+      "CompressionStream": false,
+      "confirm": false,
+      "console": false,
+      "ConstantSourceNode": false,
+      "ConvolverNode": false,
+      "CountQueuingStrategy": false,
+      "createImageBitmap": false,
+      "Credential": false,
+      "CredentialsContainer": false,
+      "crypto": false,
+      "Crypto": false,
+      "CryptoKey": false,
+      "CSS": false,
+      "CSSConditionRule": false,
+      "CSSFontFaceRule": false,
+      "CSSGroupingRule": false,
+      "CSSImportRule": false,
+      "CSSKeyframeRule": false,
+      "CSSKeyframesRule": false,
+      "CSSMatrixComponent": false,
+      "CSSMediaRule": false,
+      "CSSNamespaceRule": false,
+      "CSSPageRule": false,
+      "CSSPerspective": false,
+      "CSSRotate": false,
+      "CSSRule": false,
+      "CSSRuleList": false,
+      "CSSScale": false,
+      "CSSSkew": false,
+      "CSSSkewX": false,
+      "CSSSkewY": false,
+      "CSSStyleDeclaration": false,
+      "CSSStyleRule": false,
+      "CSSStyleSheet": false,
+      "CSSSupportsRule": false,
+      "CSSTransformValue": false,
+      "CSSTranslate": false,
+      "CustomElementRegistry": false,
+      "customElements": false,
+      "CustomEvent": false,
+      "DataTransfer": false,
+      "DataTransferItem": false,
+      "DataTransferItemList": false,
+      "DecompressionStream": false,
+      "defaultstatus": false,
+      "defaultStatus": false,
+      "DelayNode": false,
+      "DeviceMotionEvent": false,
+      "DeviceOrientationEvent": false,
+      "devicePixelRatio": false,
+      "dispatchEvent": false,
+      "document": false,
+      "Document": false,
+      "DocumentFragment": false,
+      "DocumentType": false,
+      "DOMError": false,
+      "DOMException": false,
+      "DOMImplementation": false,
+      "DOMMatrix": false,
+      "DOMMatrixReadOnly": false,
+      "DOMParser": false,
+      "DOMPoint": false,
+      "DOMPointReadOnly": false,
+      "DOMQuad": false,
+      "DOMRect": false,
+      "DOMRectList": false,
+      "DOMRectReadOnly": false,
+      "DOMStringList": false,
+      "DOMStringMap": false,
+      "DOMTokenList": false,
+      "DragEvent": false,
+      "DynamicsCompressorNode": false,
+      "Element": false,
+      "ErrorEvent": false,
+      "event": false,
+      "Event": false,
+      "EventSource": false,
+      "EventTarget": false,
+      "external": false,
+      "fetch": false,
+      "File": false,
+      "FileList": false,
+      "FileReader": false,
+      "find": false,
+      "focus": false,
+      "FocusEvent": false,
+      "FontFace": false,
+      "FontFaceSetLoadEvent": false,
+      "FormData": false,
+      "FormDataEvent": false,
+      "frameElement": false,
+      "frames": false,
+      "GainNode": false,
+      "Gamepad": false,
+      "GamepadButton": false,
+      "GamepadEvent": false,
+      "getComputedStyle": false,
+      "getSelection": false,
+      "HashChangeEvent": false,
+      "Headers": false,
+      "history": false,
+      "History": false,
+      "HTMLAllCollection": false,
+      "HTMLAnchorElement": false,
+      "HTMLAreaElement": false,
+      "HTMLAudioElement": false,
+      "HTMLBaseElement": false,
+      "HTMLBodyElement": false,
+      "HTMLBRElement": false,
+      "HTMLButtonElement": false,
+      "HTMLCanvasElement": false,
+      "HTMLCollection": false,
+      "HTMLContentElement": false,
+      "HTMLDataElement": false,
+      "HTMLDataListElement": false,
+      "HTMLDetailsElement": false,
+      "HTMLDialogElement": false,
+      "HTMLDirectoryElement": false,
+      "HTMLDivElement": false,
+      "HTMLDListElement": false,
+      "HTMLDocument": false,
+      "HTMLElement": false,
+      "HTMLEmbedElement": false,
+      "HTMLFieldSetElement": false,
+      "HTMLFontElement": false,
+      "HTMLFormControlsCollection": false,
+      "HTMLFormElement": false,
+      "HTMLFrameElement": false,
+      "HTMLFrameSetElement": false,
+      "HTMLHeadElement": false,
+      "HTMLHeadingElement": false,
+      "HTMLHRElement": false,
+      "HTMLHtmlElement": false,
+      "HTMLIFrameElement": false,
+      "HTMLImageElement": false,
+      "HTMLInputElement": false,
+      "HTMLLabelElement": false,
+      "HTMLLegendElement": false,
+      "HTMLLIElement": false,
+      "HTMLLinkElement": false,
+      "HTMLMapElement": false,
+      "HTMLMarqueeElement": false,
+      "HTMLMediaElement": false,
+      "HTMLMenuElement": false,
+      "HTMLMetaElement": false,
+      "HTMLMeterElement": false,
+      "HTMLModElement": false,
+      "HTMLObjectElement": false,
+      "HTMLOListElement": false,
+      "HTMLOptGroupElement": false,
+      "HTMLOptionElement": false,
+      "HTMLOptionsCollection": false,
+      "HTMLOutputElement": false,
+      "HTMLParagraphElement": false,
+      "HTMLParamElement": false,
+      "HTMLPictureElement": false,
+      "HTMLPreElement": false,
+      "HTMLProgressElement": false,
+      "HTMLQuoteElement": false,
+      "HTMLScriptElement": false,
+      "HTMLSelectElement": false,
+      "HTMLShadowElement": false,
+      "HTMLSlotElement": false,
+      "HTMLSourceElement": false,
+      "HTMLSpanElement": false,
+      "HTMLStyleElement": false,
+      "HTMLTableCaptionElement": false,
+      "HTMLTableCellElement": false,
+      "HTMLTableColElement": false,
+      "HTMLTableElement": false,
+      "HTMLTableRowElement": false,
+      "HTMLTableSectionElement": false,
+      "HTMLTemplateElement": false,
+      "HTMLTextAreaElement": false,
+      "HTMLTimeElement": false,
+      "HTMLTitleElement": false,
+      "HTMLTrackElement": false,
+      "HTMLUListElement": false,
+      "HTMLUnknownElement": false,
+      "HTMLVideoElement": false,
+      "IDBCursor": false,
+      "IDBCursorWithValue": false,
+      "IDBDatabase": false,
+      "IDBFactory": false,
+      "IDBIndex": false,
+      "IDBKeyRange": false,
+      "IDBObjectStore": false,
+      "IDBOpenDBRequest": false,
+      "IDBRequest": false,
+      "IDBTransaction": false,
+      "IDBVersionChangeEvent": false,
+      "IdleDeadline": false,
+      "IIRFilterNode": false,
+      "Image": false,
+      "ImageBitmap": false,
+      "ImageBitmapRenderingContext": false,
+      "ImageCapture": false,
+      "ImageData": false,
+      "indexedDB": false,
+      "innerHeight": false,
+      "innerWidth": false,
+      "InputEvent": false,
+      "IntersectionObserver": false,
+      "IntersectionObserverEntry": false,
+      "Intl": false,
+      "isSecureContext": false,
+      "KeyboardEvent": false,
+      "KeyframeEffect": false,
+      "KeyframeEffectReadOnly": false,
+      "length": false,
+      "localStorage": false,
+      "location": true,
+      "Location": false,
+      "locationbar": false,
+      "matchMedia": false,
+      "MediaDeviceInfo": false,
+      "MediaDevices": false,
+      "MediaElementAudioSourceNode": false,
+      "MediaEncryptedEvent": false,
+      "MediaError": false,
+      "MediaKeyMessageEvent": false,
+      "MediaKeySession": false,
+      "MediaKeyStatusMap": false,
+      "MediaKeySystemAccess": false,
+      "MediaList": false,
+      "MediaMetadata": false,
+      "MediaQueryList": false,
+      "MediaQueryListEvent": false,
+      "MediaRecorder": false,
+      "MediaSettingsRange": false,
+      "MediaSource": false,
+      "MediaStream": false,
+      "MediaStreamAudioDestinationNode": false,
+      "MediaStreamAudioSourceNode": false,
+      "MediaStreamConstraints": false,
+      "MediaStreamEvent": false,
+      "MediaStreamTrack": false,
+      "MediaStreamTrackEvent": false,
+      "menubar": false,
+      "MessageChannel": false,
+      "MessageEvent": false,
+      "MessagePort": false,
+      "MIDIAccess": false,
+      "MIDIConnectionEvent": false,
+      "MIDIInput": false,
+      "MIDIInputMap": false,
+      "MIDIMessageEvent": false,
+      "MIDIOutput": false,
+      "MIDIOutputMap": false,
+      "MIDIPort": false,
+      "MimeType": false,
+      "MimeTypeArray": false,
+      "MouseEvent": false,
+      "moveBy": false,
+      "moveTo": false,
+      "MutationEvent": false,
+      "MutationObserver": false,
+      "MutationRecord": false,
+      "name": false,
+      "NamedNodeMap": false,
+      "NavigationPreloadManager": false,
+      "navigator": false,
+      "Navigator": false,
+      "NavigatorUAData": false,
+      "NetworkInformation": false,
+      "Node": false,
+      "NodeFilter": false,
+      "NodeIterator": false,
+      "NodeList": false,
+      "Notification": false,
+      "OfflineAudioCompletionEvent": false,
+      "OfflineAudioContext": false,
+      "offscreenBuffering": false,
+      "OffscreenCanvas": true,
+      "OffscreenCanvasRenderingContext2D": false,
+      "onabort": true,
+      "onafterprint": true,
+      "onanimationend": true,
+      "onanimationiteration": true,
+      "onanimationstart": true,
+      "onappinstalled": true,
+      "onauxclick": true,
+      "onbeforeinstallprompt": true,
+      "onbeforeprint": true,
+      "onbeforeunload": true,
+      "onblur": true,
+      "oncancel": true,
+      "oncanplay": true,
+      "oncanplaythrough": true,
+      "onchange": true,
+      "onclick": true,
+      "onclose": true,
+      "oncontextmenu": true,
+      "oncuechange": true,
+      "ondblclick": true,
+      "ondevicemotion": true,
+      "ondeviceorientation": true,
+      "ondeviceorientationabsolute": true,
+      "ondrag": true,
+      "ondragend": true,
+      "ondragenter": true,
+      "ondragleave": true,
+      "ondragover": true,
+      "ondragstart": true,
+      "ondrop": true,
+      "ondurationchange": true,
+      "onemptied": true,
+      "onended": true,
+      "onerror": true,
+      "onfocus": true,
+      "ongotpointercapture": true,
+      "onhashchange": true,
+      "oninput": true,
+      "oninvalid": true,
+      "onkeydown": true,
+      "onkeypress": true,
+      "onkeyup": true,
+      "onlanguagechange": true,
+      "onload": true,
+      "onloadeddata": true,
+      "onloadedmetadata": true,
+      "onloadstart": true,
+      "onlostpointercapture": true,
+      "onmessage": true,
+      "onmessageerror": true,
+      "onmousedown": true,
+      "onmouseenter": true,
+      "onmouseleave": true,
+      "onmousemove": true,
+      "onmouseout": true,
+      "onmouseover": true,
+      "onmouseup": true,
+      "onmousewheel": true,
+      "onoffline": true,
+      "ononline": true,
+      "onpagehide": true,
+      "onpageshow": true,
+      "onpause": true,
+      "onplay": true,
+      "onplaying": true,
+      "onpointercancel": true,
+      "onpointerdown": true,
+      "onpointerenter": true,
+      "onpointerleave": true,
+      "onpointermove": true,
+      "onpointerout": true,
+      "onpointerover": true,
+      "onpointerup": true,
+      "onpopstate": true,
+      "onprogress": true,
+      "onratechange": true,
+      "onrejectionhandled": true,
+      "onreset": true,
+      "onresize": true,
+      "onscroll": true,
+      "onsearch": true,
+      "onseeked": true,
+      "onseeking": true,
+      "onselect": true,
+      "onstalled": true,
+      "onstorage": true,
+      "onsubmit": true,
+      "onsuspend": true,
+      "ontimeupdate": true,
+      "ontoggle": true,
+      "ontransitionend": true,
+      "onunhandledrejection": true,
+      "onunload": true,
+      "onvolumechange": true,
+      "onwaiting": true,
+      "onwheel": true,
+      "open": false,
+      "openDatabase": false,
+      "opener": false,
+      "Option": false,
+      "origin": false,
+      "OscillatorNode": false,
+      "outerHeight": false,
+      "outerWidth": false,
+      "OverconstrainedError": false,
+      "PageTransitionEvent": false,
+      "pageXOffset": false,
+      "pageYOffset": false,
+      "PannerNode": false,
+      "parent": false,
+      "Path2D": false,
+      "PaymentAddress": false,
+      "PaymentRequest": false,
+      "PaymentRequestUpdateEvent": false,
+      "PaymentResponse": false,
+      "performance": false,
+      "Performance": false,
+      "PerformanceEntry": false,
+      "PerformanceLongTaskTiming": false,
+      "PerformanceMark": false,
+      "PerformanceMeasure": false,
+      "PerformanceNavigation": false,
+      "PerformanceNavigationTiming": false,
+      "PerformanceObserver": false,
+      "PerformanceObserverEntryList": false,
+      "PerformancePaintTiming": false,
+      "PerformanceResourceTiming": false,
+      "PerformanceTiming": false,
+      "PeriodicWave": false,
+      "Permissions": false,
+      "PermissionStatus": false,
+      "personalbar": false,
+      "PhotoCapabilities": false,
+      "Plugin": false,
+      "PluginArray": false,
+      "PointerEvent": false,
+      "PopStateEvent": false,
+      "postMessage": false,
+      "Presentation": false,
+      "PresentationAvailability": false,
+      "PresentationConnection": false,
+      "PresentationConnectionAvailableEvent": false,
+      "PresentationConnectionCloseEvent": false,
+      "PresentationConnectionList": false,
+      "PresentationReceiver": false,
+      "PresentationRequest": false,
+      "print": false,
+      "ProcessingInstruction": false,
+      "ProgressEvent": false,
+      "PromiseRejectionEvent": false,
+      "prompt": false,
+      "PushManager": false,
+      "PushSubscription": false,
+      "PushSubscriptionOptions": false,
+      "queueMicrotask": false,
+      "RadioNodeList": false,
+      "Range": false,
+      "ReadableByteStreamController": false,
+      "ReadableStream": false,
+      "ReadableStreamBYOBReader": false,
+      "ReadableStreamBYOBRequest": false,
+      "ReadableStreamDefaultController": false,
+      "ReadableStreamDefaultReader": false,
+      "registerProcessor": false,
+      "RemotePlayback": false,
+      "removeEventListener": false,
+      "reportError": false,
+      "Request": false,
+      "requestAnimationFrame": false,
+      "requestIdleCallback": false,
+      "resizeBy": false,
+      "ResizeObserver": false,
+      "ResizeObserverEntry": false,
+      "resizeTo": false,
+      "Response": false,
+      "RTCCertificate": false,
+      "RTCDataChannel": false,
+      "RTCDataChannelEvent": false,
+      "RTCDtlsTransport": false,
+      "RTCIceCandidate": false,
+      "RTCIceGatherer": false,
+      "RTCIceTransport": false,
+      "RTCPeerConnection": false,
+      "RTCPeerConnectionIceEvent": false,
+      "RTCRtpContributingSource": false,
+      "RTCRtpReceiver": false,
+      "RTCRtpSender": false,
+      "RTCSctpTransport": false,
+      "RTCSessionDescription": false,
+      "RTCStatsReport": false,
+      "RTCTrackEvent": false,
+      "screen": false,
+      "Screen": false,
+      "screenLeft": false,
+      "ScreenOrientation": false,
+      "screenTop": false,
+      "screenX": false,
+      "screenY": false,
+      "ScriptProcessorNode": false,
+      "scroll": false,
+      "scrollbars": false,
+      "scrollBy": false,
+      "scrollTo": false,
+      "scrollX": false,
+      "scrollY": false,
+      "SecurityPolicyViolationEvent": false,
+      "Selection": false,
+      "self": false,
+      "ServiceWorker": false,
+      "ServiceWorkerContainer": false,
+      "ServiceWorkerRegistration": false,
+      "sessionStorage": false,
+      "setInterval": false,
+      "setTimeout": false,
+      "ShadowRoot": false,
+      "SharedWorker": false,
+      "SourceBuffer": false,
+      "SourceBufferList": false,
+      "speechSynthesis": false,
+      "SpeechSynthesisEvent": false,
+      "SpeechSynthesisUtterance": false,
+      "StaticRange": false,
+      "status": false,
+      "statusbar": false,
+      "StereoPannerNode": false,
+      "stop": false,
+      "Storage": false,
+      "StorageEvent": false,
+      "StorageManager": false,
+      "structuredClone": false,
+      "styleMedia": false,
+      "StyleSheet": false,
+      "StyleSheetList": false,
+      "SubmitEvent": false,
+      "SubtleCrypto": false,
+      "SVGAElement": false,
+      "SVGAngle": false,
+      "SVGAnimatedAngle": false,
+      "SVGAnimatedBoolean": false,
+      "SVGAnimatedEnumeration": false,
+      "SVGAnimatedInteger": false,
+      "SVGAnimatedLength": false,
+      "SVGAnimatedLengthList": false,
+      "SVGAnimatedNumber": false,
+      "SVGAnimatedNumberList": false,
+      "SVGAnimatedPreserveAspectRatio": false,
+      "SVGAnimatedRect": false,
+      "SVGAnimatedString": false,
+      "SVGAnimatedTransformList": false,
+      "SVGAnimateElement": false,
+      "SVGAnimateMotionElement": false,
+      "SVGAnimateTransformElement": false,
+      "SVGAnimationElement": false,
+      "SVGCircleElement": false,
+      "SVGClipPathElement": false,
+      "SVGComponentTransferFunctionElement": false,
+      "SVGDefsElement": false,
+      "SVGDescElement": false,
+      "SVGDiscardElement": false,
+      "SVGElement": false,
+      "SVGEllipseElement": false,
+      "SVGFEBlendElement": false,
+      "SVGFEColorMatrixElement": false,
+      "SVGFEComponentTransferElement": false,
+      "SVGFECompositeElement": false,
+      "SVGFEConvolveMatrixElement": false,
+      "SVGFEDiffuseLightingElement": false,
+      "SVGFEDisplacementMapElement": false,
+      "SVGFEDistantLightElement": false,
+      "SVGFEDropShadowElement": false,
+      "SVGFEFloodElement": false,
+      "SVGFEFuncAElement": false,
+      "SVGFEFuncBElement": false,
+      "SVGFEFuncGElement": false,
+      "SVGFEFuncRElement": false,
+      "SVGFEGaussianBlurElement": false,
+      "SVGFEImageElement": false,
+      "SVGFEMergeElement": false,
+      "SVGFEMergeNodeElement": false,
+      "SVGFEMorphologyElement": false,
+      "SVGFEOffsetElement": false,
+      "SVGFEPointLightElement": false,
+      "SVGFESpecularLightingElement": false,
+      "SVGFESpotLightElement": false,
+      "SVGFETileElement": false,
+      "SVGFETurbulenceElement": false,
+      "SVGFilterElement": false,
+      "SVGForeignObjectElement": false,
+      "SVGGElement": false,
+      "SVGGeometryElement": false,
+      "SVGGradientElement": false,
+      "SVGGraphicsElement": false,
+      "SVGImageElement": false,
+      "SVGLength": false,
+      "SVGLengthList": false,
+      "SVGLinearGradientElement": false,
+      "SVGLineElement": false,
+      "SVGMarkerElement": false,
+      "SVGMaskElement": false,
+      "SVGMatrix": false,
+      "SVGMetadataElement": false,
+      "SVGMPathElement": false,
+      "SVGNumber": false,
+      "SVGNumberList": false,
+      "SVGPathElement": false,
+      "SVGPatternElement": false,
+      "SVGPoint": false,
+      "SVGPointList": false,
+      "SVGPolygonElement": false,
+      "SVGPolylineElement": false,
+      "SVGPreserveAspectRatio": false,
+      "SVGRadialGradientElement": false,
+      "SVGRect": false,
+      "SVGRectElement": false,
+      "SVGScriptElement": false,
+      "SVGSetElement": false,
+      "SVGStopElement": false,
+      "SVGStringList": false,
+      "SVGStyleElement": false,
+      "SVGSVGElement": false,
+      "SVGSwitchElement": false,
+      "SVGSymbolElement": false,
+      "SVGTextContentElement": false,
+      "SVGTextElement": false,
+      "SVGTextPathElement": false,
+      "SVGTextPositioningElement": false,
+      "SVGTitleElement": false,
+      "SVGTransform": false,
+      "SVGTransformList": false,
+      "SVGTSpanElement": false,
+      "SVGUnitTypes": false,
+      "SVGUseElement": false,
+      "SVGViewElement": false,
+      "TaskAttributionTiming": false,
+      "Text": false,
+      "TextDecoder": false,
+      "TextDecoderStream": false,
+      "TextEncoder": false,
+      "TextEncoderStream": false,
+      "TextEvent": false,
+      "TextMetrics": false,
+      "TextTrack": false,
+      "TextTrackCue": false,
+      "TextTrackCueList": false,
+      "TextTrackList": false,
+      "TimeRanges": false,
+      "ToggleEvent": false,
+      "toolbar": false,
+      "top": false,
+      "Touch": false,
+      "TouchEvent": false,
+      "TouchList": false,
+      "TrackEvent": false,
+      "TransformStream": false,
+      "TransformStreamDefaultController": false,
+      "TransitionEvent": false,
+      "TreeWalker": false,
+      "UIEvent": false,
+      "URL": false,
+      "URLSearchParams": false,
+      "ValidityState": false,
+      "visualViewport": false,
+      "VisualViewport": false,
+      "VTTCue": false,
+      "WaveShaperNode": false,
+      "WebAssembly": false,
+      "WebGL2RenderingContext": false,
+      "WebGLActiveInfo": false,
+      "WebGLBuffer": false,
+      "WebGLContextEvent": false,
+      "WebGLFramebuffer": false,
+      "WebGLProgram": false,
+      "WebGLQuery": false,
+      "WebGLRenderbuffer": false,
+      "WebGLRenderingContext": false,
+      "WebGLSampler": false,
+      "WebGLShader": false,
+      "WebGLShaderPrecisionFormat": false,
+      "WebGLSync": false,
+      "WebGLTexture": false,
+      "WebGLTransformFeedback": false,
+      "WebGLUniformLocation": false,
+      "WebGLVertexArrayObject": false,
+      "WebSocket": false,
+      "WheelEvent": false,
+      "window": false,
+      "Window": false,
+      "Worker": false,
+      "WritableStream": false,
+      "WritableStreamDefaultController": false,
+      "WritableStreamDefaultWriter": false,
+      "XMLDocument": false,
+      "XMLHttpRequest": false,
+      "XMLHttpRequestEventTarget": false,
+      "XMLHttpRequestUpload": false,
+      "XMLSerializer": false,
+      "XPathEvaluator": false,
+      "XPathExpression": false,
+      "XPathResult": false,
+      "XRAnchor": false,
+      "XRBoundedReferenceSpace": false,
+      "XRCPUDepthInformation": false,
+      "XRDepthInformation": false,
+      "XRFrame": false,
+      "XRInputSource": false,
+      "XRInputSourceArray": false,
+      "XRInputSourceEvent": false,
+      "XRInputSourcesChangeEvent": false,
+      "XRPose": false,
+      "XRReferenceSpace": false,
+      "XRReferenceSpaceEvent": false,
+      "XRRenderState": false,
+      "XRRigidTransform": false,
+      "XRSession": false,
+      "XRSessionEvent": false,
+      "XRSpace": false,
+      "XRSystem": false,
+      "XRView": false,
+      "XRViewerPose": false,
+      "XRViewport": false,
+      "XRWebGLBinding": false,
+      "XRWebGLDepthInformation": false,
+      "XRWebGLLayer": false,
+      "XSLTProcessor": false,
+      "after": false,
+      "afterEach": false,
+      "before": false,
+      "beforeEach": false,
+      "context": false,
+      "describe": false,
+      "it": false,
+      "mocha": false,
+      "run": false,
+      "setup": false,
+      "specify": false,
+      "suite": false,
+      "suiteSetup": false,
+      "suiteTeardown": false,
+      "teardown": false,
+      "test": false,
+      "xcontext": false,
+      "xdescribe": false,
+      "xit": false,
+      "xspecify": false,
+      "__dirname": false,
+      "__filename": false,
+      "Buffer": false,
+      "clearImmediate": false,
+      "exports": true,
+      "global": false,
+      "Iterator": false,
+      "module": false,
+      "process": false,
+      "require": false,
+      "setImmediate": false
+    },
+    "parser": "espree@9.6.1",
+    "parserOptions": {}
   },
-  "globals": {},
-  "parser": null,
-  "parserOptions": {},
-  "plugins": ["cypress", "prettier"],
+  "plugins": ["@", "cypress", "prettier:eslint-plugin-prettier@5.2.1"],
   "rules": {
-    "prefer-const": ["error"],
-    "prettier/prettier": ["error"],
-    "arrow-body-style": ["off"],
-    "prefer-arrow-callback": ["off"],
-    "curly": [0],
+    "constructor-super": [2],
+    "for-direction": [2],
+    "getter-return": [2],
+    "no-async-promise-executor": [2],
+    "no-case-declarations": [2],
+    "no-class-assign": [2],
+    "no-compare-neg-zero": [2],
+    "no-cond-assign": [2],
+    "no-const-assign": [2],
+    "no-constant-binary-expression": [2],
+    "no-constant-condition": [2],
+    "no-control-regex": [2],
+    "no-debugger": [2],
+    "no-delete-var": [2],
+    "no-dupe-args": [2],
+    "no-dupe-class-members": [2],
+    "no-dupe-else-if": [2],
+    "no-dupe-keys": [2],
+    "no-duplicate-case": [2],
+    "no-empty": [2],
+    "no-empty-character-class": [2],
+    "no-empty-pattern": [2],
+    "no-empty-static-block": [2],
+    "no-ex-assign": [2],
+    "no-extra-boolean-cast": [2],
+    "no-fallthrough": [2],
+    "no-func-assign": [2],
+    "no-global-assign": [2],
+    "no-import-assign": [2],
+    "no-invalid-regexp": [2],
+    "no-irregular-whitespace": [2],
+    "no-loss-of-precision": [2],
+    "no-misleading-character-class": [2],
+    "no-new-native-nonconstructor": [2],
+    "no-nonoctal-decimal-escape": [2],
+    "no-obj-calls": [2],
+    "no-octal": [2],
+    "no-prototype-builtins": [2],
+    "no-redeclare": [2],
+    "no-regex-spaces": [2],
+    "no-self-assign": [2],
+    "no-setter-return": [2],
+    "no-shadow-restricted-names": [2],
+    "no-sparse-arrays": [2],
+    "no-this-before-super": [2],
+    "no-undef": [2],
     "no-unexpected-multiline": [0],
+    "no-unreachable": [2],
+    "no-unsafe-finally": [2],
+    "no-unsafe-negation": [2],
+    "no-unsafe-optional-chaining": [2],
+    "no-unused-labels": [2],
+    "no-unused-private-class-members": [2],
+    "no-unused-vars": [2],
+    "no-useless-backreference": [2],
+    "no-useless-catch": [2],
+    "no-useless-escape": [2],
+    "no-with": [2],
+    "require-yield": [2],
+    "use-isnan": [2],
+    "valid-typeof": [2],
+    "cypress/no-assigning-return-values": [2],
+    "cypress/no-unnecessary-waiting": [2],
+    "cypress/no-async-tests": [2],
+    "cypress/unsafe-to-chain-command": [2],
+    "curly": [0],
     "@typescript-eslint/lines-around-comment": [0],
     "@typescript-eslint/quotes": [0],
     "babel/quotes": [0],
     "unicorn/template-indent": [0],
     "vue/html-self-closing": [0],
     "vue/max-len": [0],
-    "@babel/object-curly-spacing": ["off"],
-    "@babel/semi": ["off"],
-    "@typescript-eslint/block-spacing": ["off"],
-    "@typescript-eslint/brace-style": ["off"],
-    "@typescript-eslint/comma-dangle": ["off"],
-    "@typescript-eslint/comma-spacing": ["off"],
-    "@typescript-eslint/func-call-spacing": ["off"],
-    "@typescript-eslint/indent": ["off"],
-    "@typescript-eslint/key-spacing": ["off"],
-    "@typescript-eslint/keyword-spacing": ["off"],
-    "@typescript-eslint/member-delimiter-style": ["off"],
-    "@typescript-eslint/no-extra-parens": ["off"],
-    "@typescript-eslint/no-extra-semi": ["off"],
-    "@typescript-eslint/object-curly-spacing": ["off"],
-    "@typescript-eslint/semi": ["off"],
-    "@typescript-eslint/space-before-blocks": ["off"],
-    "@typescript-eslint/space-before-function-paren": ["off"],
-    "@typescript-eslint/space-infix-ops": ["off"],
-    "@typescript-eslint/type-annotation-spacing": ["off"],
-    "babel/object-curly-spacing": ["off"],
-    "babel/semi": ["off"],
-    "flowtype/boolean-style": ["off"],
-    "flowtype/delimiter-dangle": ["off"],
-    "flowtype/generic-spacing": ["off"],
-    "flowtype/object-type-curly-spacing": ["off"],
-    "flowtype/object-type-delimiter": ["off"],
-    "flowtype/quotes": ["off"],
-    "flowtype/semi": ["off"],
-    "flowtype/space-after-type-colon": ["off"],
-    "flowtype/space-before-generic-bracket": ["off"],
-    "flowtype/space-before-type-colon": ["off"],
-    "flowtype/union-intersection-spacing": ["off"],
-    "react/jsx-child-element-spacing": ["off"],
-    "react/jsx-closing-bracket-location": ["off"],
-    "react/jsx-closing-tag-location": ["off"],
-    "react/jsx-curly-newline": ["off"],
-    "react/jsx-curly-spacing": ["off"],
-    "react/jsx-equals-spacing": ["off"],
-    "react/jsx-first-prop-new-line": ["off"],
-    "react/jsx-indent": ["off"],
-    "react/jsx-indent-props": ["off"],
-    "react/jsx-max-props-per-line": ["off"],
-    "react/jsx-newline": ["off"],
-    "react/jsx-one-expression-per-line": ["off"],
-    "react/jsx-props-no-multi-spaces": ["off"],
-    "react/jsx-tag-spacing": ["off"],
-    "react/jsx-wrap-multilines": ["off"],
-    "standard/array-bracket-even-spacing": ["off"],
-    "standard/computed-property-even-spacing": ["off"],
-    "standard/object-curly-even-spacing": ["off"],
-    "unicorn/empty-brace-spaces": ["off"],
-    "unicorn/no-nested-ternary": ["off"],
-    "unicorn/number-literal-case": ["off"],
-    "vue/array-bracket-newline": ["off"],
-    "vue/array-bracket-spacing": ["off"],
-    "vue/array-element-newline": ["off"],
-    "vue/arrow-spacing": ["off"],
-    "vue/block-spacing": ["off"],
-    "vue/block-tag-newline": ["off"],
-    "vue/brace-style": ["off"],
-    "vue/comma-dangle": ["off"],
-    "vue/comma-spacing": ["off"],
-    "vue/comma-style": ["off"],
-    "vue/dot-location": ["off"],
-    "vue/func-call-spacing": ["off"],
-    "vue/html-closing-bracket-newline": ["off"],
-    "vue/html-closing-bracket-spacing": ["off"],
-    "vue/html-end-tags": ["off"],
-    "vue/html-indent": ["off"],
-    "vue/html-quotes": ["off"],
-    "vue/key-spacing": ["off"],
-    "vue/keyword-spacing": ["off"],
-    "vue/max-attributes-per-line": ["off"],
-    "vue/multiline-html-element-content-newline": ["off"],
-    "vue/multiline-ternary": ["off"],
-    "vue/mustache-interpolation-spacing": ["off"],
-    "vue/no-extra-parens": ["off"],
-    "vue/no-multi-spaces": ["off"],
-    "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
-    "vue/object-curly-newline": ["off"],
-    "vue/object-curly-spacing": ["off"],
-    "vue/object-property-newline": ["off"],
-    "vue/operator-linebreak": ["off"],
-    "vue/quote-props": ["off"],
-    "vue/script-indent": ["off"],
-    "vue/singleline-html-element-content-newline": ["off"],
-    "vue/space-in-parens": ["off"],
-    "vue/space-infix-ops": ["off"],
-    "vue/space-unary-ops": ["off"],
-    "vue/template-curly-spacing": ["off"],
-    "space-unary-word-ops": ["off"],
-    "generator-star": ["off"],
-    "no-comma-dangle": ["off"],
-    "no-reserved-keys": ["off"],
-    "no-space-before-semi": ["off"],
-    "no-wrap-func": ["off"],
-    "space-after-function-name": ["off"],
-    "space-before-function-parentheses": ["off"],
-    "space-in-brackets": ["off"],
-    "no-arrow-condition": ["off"],
-    "space-after-keywords": ["off"],
-    "space-before-keywords": ["off"],
-    "space-return-throw-case": ["off"],
-    "no-spaced-func": ["off"],
-    "indent-legacy": ["off"],
-    "array-bracket-newline": ["off"],
-    "array-bracket-spacing": ["off"],
-    "array-element-newline": ["off"],
-    "arrow-parens": ["off"],
-    "arrow-spacing": ["off"],
-    "block-spacing": ["off"],
-    "brace-style": ["off"],
-    "comma-dangle": ["off"],
-    "comma-spacing": ["off"],
-    "comma-style": ["off"],
-    "computed-property-spacing": ["off"],
-    "dot-location": ["off"],
-    "eol-last": ["off"],
-    "func-call-spacing": ["off"],
-    "function-call-argument-newline": ["off"],
-    "function-paren-newline": ["off"],
-    "generator-star-spacing": ["off"],
-    "implicit-arrow-linebreak": ["off"],
-    "indent": ["off"],
-    "jsx-quotes": ["off"],
-    "key-spacing": ["off"],
-    "keyword-spacing": ["off"],
-    "linebreak-style": ["off"],
+    "@babel/object-curly-spacing": [0],
+    "@babel/semi": [0],
+    "@typescript-eslint/block-spacing": [0],
+    "@typescript-eslint/brace-style": [0],
+    "@typescript-eslint/comma-dangle": [0],
+    "@typescript-eslint/comma-spacing": [0],
+    "@typescript-eslint/func-call-spacing": [0],
+    "@typescript-eslint/indent": [0],
+    "@typescript-eslint/key-spacing": [0],
+    "@typescript-eslint/keyword-spacing": [0],
+    "@typescript-eslint/member-delimiter-style": [0],
+    "@typescript-eslint/no-extra-parens": [0],
+    "@typescript-eslint/no-extra-semi": [0],
+    "@typescript-eslint/object-curly-spacing": [0],
+    "@typescript-eslint/semi": [0],
+    "@typescript-eslint/space-before-blocks": [0],
+    "@typescript-eslint/space-before-function-paren": [0],
+    "@typescript-eslint/space-infix-ops": [0],
+    "@typescript-eslint/type-annotation-spacing": [0],
+    "babel/object-curly-spacing": [0],
+    "babel/semi": [0],
+    "flowtype/boolean-style": [0],
+    "flowtype/delimiter-dangle": [0],
+    "flowtype/generic-spacing": [0],
+    "flowtype/object-type-curly-spacing": [0],
+    "flowtype/object-type-delimiter": [0],
+    "flowtype/quotes": [0],
+    "flowtype/semi": [0],
+    "flowtype/space-after-type-colon": [0],
+    "flowtype/space-before-generic-bracket": [0],
+    "flowtype/space-before-type-colon": [0],
+    "flowtype/union-intersection-spacing": [0],
+    "react/jsx-child-element-spacing": [0],
+    "react/jsx-closing-bracket-location": [0],
+    "react/jsx-closing-tag-location": [0],
+    "react/jsx-curly-newline": [0],
+    "react/jsx-curly-spacing": [0],
+    "react/jsx-equals-spacing": [0],
+    "react/jsx-first-prop-new-line": [0],
+    "react/jsx-indent": [0],
+    "react/jsx-indent-props": [0],
+    "react/jsx-max-props-per-line": [0],
+    "react/jsx-newline": [0],
+    "react/jsx-one-expression-per-line": [0],
+    "react/jsx-props-no-multi-spaces": [0],
+    "react/jsx-tag-spacing": [0],
+    "react/jsx-wrap-multilines": [0],
+    "standard/array-bracket-even-spacing": [0],
+    "standard/computed-property-even-spacing": [0],
+    "standard/object-curly-even-spacing": [0],
+    "unicorn/empty-brace-spaces": [0],
+    "unicorn/no-nested-ternary": [0],
+    "unicorn/number-literal-case": [0],
+    "vue/array-bracket-newline": [0],
+    "vue/array-bracket-spacing": [0],
+    "vue/array-element-newline": [0],
+    "vue/arrow-spacing": [0],
+    "vue/block-spacing": [0],
+    "vue/block-tag-newline": [0],
+    "vue/brace-style": [0],
+    "vue/comma-dangle": [0],
+    "vue/comma-spacing": [0],
+    "vue/comma-style": [0],
+    "vue/dot-location": [0],
+    "vue/func-call-spacing": [0],
+    "vue/html-closing-bracket-newline": [0],
+    "vue/html-closing-bracket-spacing": [0],
+    "vue/html-end-tags": [0],
+    "vue/html-indent": [0],
+    "vue/html-quotes": [0],
+    "vue/key-spacing": [0],
+    "vue/keyword-spacing": [0],
+    "vue/max-attributes-per-line": [0],
+    "vue/multiline-html-element-content-newline": [0],
+    "vue/multiline-ternary": [0],
+    "vue/mustache-interpolation-spacing": [0],
+    "vue/no-extra-parens": [0],
+    "vue/no-multi-spaces": [0],
+    "vue/no-spaces-around-equal-signs-in-attribute": [0],
+    "vue/object-curly-newline": [0],
+    "vue/object-curly-spacing": [0],
+    "vue/object-property-newline": [0],
+    "vue/operator-linebreak": [0],
+    "vue/quote-props": [0],
+    "vue/script-indent": [0],
+    "vue/singleline-html-element-content-newline": [0],
+    "vue/space-in-parens": [0],
+    "vue/space-infix-ops": [0],
+    "vue/space-unary-ops": [0],
+    "vue/template-curly-spacing": [0],
+    "space-unary-word-ops": [0],
+    "generator-star": [0],
+    "no-comma-dangle": [0],
+    "no-reserved-keys": [0],
+    "no-space-before-semi": [0],
+    "no-wrap-func": [0],
+    "space-after-function-name": [0],
+    "space-before-function-parentheses": [0],
+    "space-in-brackets": [0],
+    "no-arrow-condition": [0],
+    "space-after-keywords": [0],
+    "space-before-keywords": [0],
+    "space-return-throw-case": [0],
+    "no-spaced-func": [0],
+    "indent-legacy": [0],
+    "array-bracket-newline": [0],
+    "array-bracket-spacing": [0],
+    "array-element-newline": [0],
+    "arrow-parens": [0],
+    "arrow-spacing": [0],
+    "block-spacing": [0],
+    "brace-style": [0],
+    "comma-dangle": [0],
+    "comma-spacing": [0],
+    "comma-style": [0],
+    "computed-property-spacing": [0],
+    "dot-location": [0],
+    "eol-last": [0],
+    "func-call-spacing": [0],
+    "function-call-argument-newline": [0],
+    "function-paren-newline": [0],
+    "generator-star-spacing": [0],
+    "implicit-arrow-linebreak": [0],
+    "indent": [0],
+    "jsx-quotes": [0],
+    "key-spacing": [0],
+    "keyword-spacing": [0],
+    "linebreak-style": [0],
     "lines-around-comment": [0],
     "max-len": [0],
-    "max-statements-per-line": ["off"],
-    "multiline-ternary": ["off"],
-    "new-parens": ["off"],
-    "newline-per-chained-call": ["off"],
+    "max-statements-per-line": [0],
+    "multiline-ternary": [0],
+    "new-parens": [0],
+    "newline-per-chained-call": [0],
     "no-confusing-arrow": [0],
-    "no-extra-parens": ["off"],
-    "no-extra-semi": ["off"],
-    "no-floating-decimal": ["off"],
+    "no-extra-parens": [0],
+    "no-extra-semi": [0],
+    "no-floating-decimal": [0],
     "no-mixed-operators": [0],
-    "no-mixed-spaces-and-tabs": ["off"],
-    "no-multi-spaces": ["off"],
-    "no-multiple-empty-lines": ["off"],
+    "no-mixed-spaces-and-tabs": [0],
+    "no-multi-spaces": [0],
+    "no-multiple-empty-lines": [0],
     "no-tabs": [0],
-    "no-trailing-spaces": ["off"],
-    "no-whitespace-before-property": ["off"],
-    "nonblock-statement-body-position": ["off"],
-    "object-curly-newline": ["off"],
-    "object-curly-spacing": ["off"],
-    "object-property-newline": ["off"],
-    "one-var-declaration-per-line": ["off"],
-    "operator-linebreak": ["off"],
-    "padded-blocks": ["off"],
-    "quote-props": ["off"],
+    "no-trailing-spaces": [0],
+    "no-whitespace-before-property": [0],
+    "nonblock-statement-body-position": [0],
+    "object-curly-newline": [0],
+    "object-curly-spacing": [0],
+    "object-property-newline": [0],
+    "one-var-declaration-per-line": [0],
+    "operator-linebreak": [0],
+    "padded-blocks": [0],
+    "quote-props": [0],
     "quotes": [0],
-    "rest-spread-spacing": ["off"],
-    "semi": ["off"],
-    "semi-spacing": ["off"],
-    "semi-style": ["off"],
-    "space-before-blocks": ["off"],
-    "space-before-function-paren": ["off"],
-    "space-in-parens": ["off"],
-    "space-infix-ops": ["off"],
-    "space-unary-ops": ["off"],
-    "switch-colon-spacing": ["off"],
-    "template-curly-spacing": ["off"],
-    "template-tag-spacing": ["off"],
-    "wrap-iife": ["off"],
-    "wrap-regex": ["off"],
-    "yield-star-spacing": ["off"],
-    "react/jsx-space-before-closing": ["off"],
-    "cypress/no-assigning-return-values": ["error"],
-    "cypress/no-unnecessary-waiting": ["error"],
-    "cypress/no-async-tests": ["error"],
-    "cypress/unsafe-to-chain-command": ["error"],
-    "constructor-super": ["error"],
-    "for-direction": ["error"],
-    "getter-return": ["error"],
-    "no-async-promise-executor": ["error"],
-    "no-case-declarations": ["error"],
-    "no-class-assign": ["error"],
-    "no-compare-neg-zero": ["error"],
-    "no-cond-assign": ["error"],
-    "no-const-assign": ["error"],
-    "no-constant-condition": ["error"],
-    "no-control-regex": ["error"],
-    "no-debugger": ["error"],
-    "no-delete-var": ["error"],
-    "no-dupe-args": ["error"],
-    "no-dupe-class-members": ["error"],
-    "no-dupe-else-if": ["error"],
-    "no-dupe-keys": ["error"],
-    "no-duplicate-case": ["error"],
-    "no-empty": ["error"],
-    "no-empty-character-class": ["error"],
-    "no-empty-pattern": ["error"],
-    "no-ex-assign": ["error"],
-    "no-extra-boolean-cast": ["error"],
-    "no-fallthrough": ["error"],
-    "no-func-assign": ["error"],
-    "no-global-assign": ["error"],
-    "no-import-assign": ["error"],
-    "no-inner-declarations": ["error"],
-    "no-invalid-regexp": ["error"],
-    "no-irregular-whitespace": ["error"],
-    "no-loss-of-precision": ["error"],
-    "no-misleading-character-class": ["error"],
-    "no-new-symbol": ["error"],
-    "no-nonoctal-decimal-escape": ["error"],
-    "no-obj-calls": ["error"],
-    "no-octal": ["error"],
-    "no-prototype-builtins": ["error"],
-    "no-redeclare": ["error"],
-    "no-regex-spaces": ["error"],
-    "no-self-assign": ["error"],
-    "no-setter-return": ["error"],
-    "no-shadow-restricted-names": ["error"],
-    "no-sparse-arrays": ["error"],
-    "no-this-before-super": ["error"],
-    "no-undef": ["error"],
-    "no-unreachable": ["error"],
-    "no-unsafe-finally": ["error"],
-    "no-unsafe-negation": ["error"],
-    "no-unsafe-optional-chaining": ["error"],
-    "no-unused-labels": ["error"],
-    "no-unused-vars": ["error"],
-    "no-useless-backreference": ["error"],
-    "no-useless-catch": ["error"],
-    "no-useless-escape": ["error"],
-    "no-with": ["error"],
-    "require-yield": ["error"],
-    "use-isnan": ["error"],
-    "valid-typeof": ["error"]
-  },
-  "settings": {},
-  "ignorePatterns": []
+    "rest-spread-spacing": [0],
+    "semi": [0],
+    "semi-spacing": [0],
+    "semi-style": [0],
+    "space-before-blocks": [0],
+    "space-before-function-paren": [0],
+    "space-in-parens": [0],
+    "space-infix-ops": [0],
+    "space-unary-ops": [0],
+    "switch-colon-spacing": [0],
+    "template-curly-spacing": [0],
+    "template-tag-spacing": [0],
+    "wrap-iife": [0],
+    "wrap-regex": [0],
+    "yield-star-spacing": [0],
+    "react/jsx-space-before-closing": [0],
+    "prettier/prettier": [2],
+    "arrow-body-style": [0],
+    "prefer-arrow-callback": [0],
+    "prefer-const": [2]
+  }
 }
diff --git a/e2e/eslint.config.mjs b/e2e/eslint.config.mjs
new file mode 100644
index 0000000000..0beb4576a1
--- /dev/null
+++ b/e2e/eslint.config.mjs
@@ -0,0 +1,39 @@
+import { includeIgnoreFile } from '@eslint/compat'
+import globals from 'globals'
+import path from 'node:path'
+import { fileURLToPath } from 'node:url'
+import js from '@eslint/js'
+import { FlatCompat } from '@eslint/eslintrc'
+
+const __filename = fileURLToPath(import.meta.url)
+const __dirname = path.dirname(__filename)
+const compat = new FlatCompat({
+  baseDirectory: __dirname,
+  recommendedConfig: js.configs.recommended,
+  allConfig: js.configs.all,
+})
+const gitignorePath = path.resolve(__dirname, '.gitignore')
+
+export default [
+  ...compat.extends(
+    'eslint:recommended',
+    'plugin:cypress/recommended',
+    'plugin:prettier/recommended'
+  ),
+
+  includeIgnoreFile(gitignorePath),
+
+  {
+    languageOptions: {
+      globals: {
+        ...globals.node,
+        ...globals.mocha,
+      },
+    },
+
+    rules: {
+      'prefer-const': 'error',
+      'prettier/prettier': 'error',
+    },
+  },
+]
diff --git a/e2e/package-lock.json b/e2e/package-lock.json
index 1acf1335a6..a3135f13a6 100644
--- a/e2e/package-lock.json
+++ b/e2e/package-lock.json
@@ -6,11 +6,15 @@
     "": {
       "name": "@ecamp3/e2e",
       "devDependencies": {
+        "@eslint/compat": "1.1.1",
+        "@eslint/eslintrc": "3.1.0",
+        "@eslint/js": "9.8.0",
         "cypress": "13.13.2",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
         "eslint-plugin-cypress": "3.4.0",
         "eslint-plugin-prettier": "5.2.1",
+        "globals": "15.9.0",
         "prettier": "3.3.3"
       }
     },
@@ -102,17 +106,27 @@
         "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
+    "node_modules/@eslint/compat": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.1.1.tgz",
+      "integrity": "sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
     "node_modules/@eslint/eslintrc": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
-      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+      "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "ajv": "^6.12.4",
         "debug": "^4.3.2",
-        "espree": "^9.6.0",
-        "globals": "^13.19.0",
+        "espree": "^10.0.1",
+        "globals": "^14.0.0",
         "ignore": "^5.2.0",
         "import-fresh": "^3.2.1",
         "js-yaml": "^4.1.0",
@@ -120,20 +134,33 @@
         "strip-json-comments": "^3.1.1"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
       }
     },
+    "node_modules/@eslint/eslintrc/node_modules/globals": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/@eslint/js": {
-      "version": "8.57.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
-      "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+      "version": "9.8.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.8.0.tgz",
+      "integrity": "sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
     "node_modules/@humanwhocodes/config-array": {
@@ -226,14 +253,14 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.0.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.0.tgz",
-      "integrity": "sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==",
+      "version": "22.1.0",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz",
+      "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==",
       "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "undici-types": "~6.11.1"
+        "undici-types": "~6.13.0"
       }
     },
     "node_modules/@types/sinonjs__fake-timers": {
@@ -348,19 +375,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/ansi-escapes/node_modules/type-fest": {
-      "version": "0.21.3",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
-      "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
-      "dev": true,
-      "license": "(MIT OR CC0-1.0)",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/ansi-regex": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -1136,6 +1150,35 @@
         "eslint": ">=7"
       }
     },
+    "node_modules/eslint-plugin-cypress/node_modules/globals": {
+      "version": "13.24.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/eslint-plugin-cypress/node_modules/type-fest": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "dev": true,
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/eslint-plugin-prettier": {
       "version": "5.2.1",
       "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz",
@@ -1197,7 +1240,41 @@
         "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/espree": {
+    "node_modules/eslint/node_modules/@eslint/eslintrc": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.6.0",
+        "globals": "^13.19.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint/node_modules/@eslint/js": {
+      "version": "8.57.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+      "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
+    "node_modules/eslint/node_modules/espree": {
       "version": "9.6.1",
       "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
       "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
@@ -1215,6 +1292,66 @@
         "url": "https://opencollective.com/eslint"
       }
     },
+    "node_modules/eslint/node_modules/globals": {
+      "version": "13.24.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/eslint/node_modules/type-fest": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "dev": true,
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/espree": {
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+      "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "acorn": "^8.12.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^4.0.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/espree/node_modules/eslint-visitor-keys": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+      "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/esquery": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
@@ -1635,16 +1772,13 @@
       }
     },
     "node_modules/globals": {
-      "version": "13.24.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+      "version": "15.9.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
+      "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "type-fest": "^0.20.2"
-      },
       "engines": {
-        "node": ">=8"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -3087,9 +3221,9 @@
       }
     },
     "node_modules/type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "version": "0.21.3",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+      "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
       "dev": true,
       "license": "(MIT OR CC0-1.0)",
       "engines": {
@@ -3100,9 +3234,9 @@
       }
     },
     "node_modules/undici-types": {
-      "version": "6.11.1",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz",
-      "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==",
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz",
+      "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==",
       "dev": true,
       "license": "MIT",
       "optional": true
diff --git a/e2e/package.json b/e2e/package.json
index 02e6d278a4..e2612b87f8 100644
--- a/e2e/package.json
+++ b/e2e/package.json
@@ -5,18 +5,22 @@
     "cypress:open": "cypress open",
     "cypress:run": "cypress run",
     "lint": "npm run lint:eslint && npm run lint:prettier",
-    "lint:eslint": "eslint --fix --ext .js --ignore-path .gitignore .",
-    "lint:prettier": "prettier --write --ignore-path .gitignore **/*.{js,json,md}",
+    "lint:eslint": "eslint --fix",
+    "lint:prettier": "prettier --write --ignore-path .gitignore **/*.{js,mjs,json,md}",
     "lint:check": "npm run lint:check:eslint && npm run lint:check:prettier",
-    "lint:check:eslint": "eslint --ext .js --ignore-path .gitignore .",
-    "lint:check:prettier": "prettier --check --ignore-path .gitignore **/*.{js,json,md}"
+    "lint:check:eslint": "eslint",
+    "lint:check:prettier": "prettier --check --ignore-path .gitignore **/*.{js,mjs,json,md}"
   },
   "devDependencies": {
+    "@eslint/compat": "1.1.1",
+    "@eslint/eslintrc": "3.1.0",
+    "@eslint/js": "9.8.0",
     "cypress": "13.13.2",
     "eslint": "8.57.0",
     "eslint-config-prettier": "9.1.0",
     "eslint-plugin-cypress": "3.4.0",
     "eslint-plugin-prettier": "5.2.1",
+    "globals": "15.9.0",
     "prettier": "3.3.3"
   }
 }

From c8c2e0fd43394d28510f916cc73b20fdcf9da78b Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Fri, 2 Aug 2024 15:41:54 +0200
Subject: [PATCH 010/273] e2e: delete eslint-config-js.json again

Was only needed for the migration
---
 e2e/eslint-config-js.json | 1058 -------------------------------------
 1 file changed, 1058 deletions(-)
 delete mode 100644 e2e/eslint-config-js.json

diff --git a/e2e/eslint-config-js.json b/e2e/eslint-config-js.json
deleted file mode 100644
index 5bef341e13..0000000000
--- a/e2e/eslint-config-js.json
+++ /dev/null
@@ -1,1058 +0,0 @@
-{
-  "languageOptions": {
-    "ecmaVersion": 2019,
-    "sourceType": "module",
-    "globals": {
-      "cy": false,
-      "Cypress": false,
-      "expect": false,
-      "assert": false,
-      "chai": false,
-      "AbortController": false,
-      "AbortSignal": false,
-      "addEventListener": false,
-      "alert": false,
-      "AnalyserNode": false,
-      "Animation": false,
-      "AnimationEffectReadOnly": false,
-      "AnimationEffectTiming": false,
-      "AnimationEffectTimingReadOnly": false,
-      "AnimationEvent": false,
-      "AnimationPlaybackEvent": false,
-      "AnimationTimeline": false,
-      "applicationCache": false,
-      "ApplicationCache": false,
-      "ApplicationCacheErrorEvent": false,
-      "atob": false,
-      "Attr": false,
-      "Audio": false,
-      "AudioBuffer": false,
-      "AudioBufferSourceNode": false,
-      "AudioContext": false,
-      "AudioDestinationNode": false,
-      "AudioListener": false,
-      "AudioNode": false,
-      "AudioParam": false,
-      "AudioProcessingEvent": false,
-      "AudioScheduledSourceNode": false,
-      "AudioWorkletGlobalScope": false,
-      "AudioWorkletNode": false,
-      "AudioWorkletProcessor": false,
-      "BarProp": false,
-      "BaseAudioContext": false,
-      "BatteryManager": false,
-      "BeforeUnloadEvent": false,
-      "BiquadFilterNode": false,
-      "Blob": false,
-      "BlobEvent": false,
-      "blur": false,
-      "BroadcastChannel": false,
-      "btoa": false,
-      "BudgetService": false,
-      "ByteLengthQueuingStrategy": false,
-      "Cache": false,
-      "caches": false,
-      "CacheStorage": false,
-      "cancelAnimationFrame": false,
-      "cancelIdleCallback": false,
-      "CanvasCaptureMediaStreamTrack": false,
-      "CanvasGradient": false,
-      "CanvasPattern": false,
-      "CanvasRenderingContext2D": false,
-      "ChannelMergerNode": false,
-      "ChannelSplitterNode": false,
-      "CharacterData": false,
-      "clearInterval": false,
-      "clearTimeout": false,
-      "clientInformation": false,
-      "ClipboardEvent": false,
-      "ClipboardItem": false,
-      "close": false,
-      "closed": false,
-      "CloseEvent": false,
-      "Comment": false,
-      "CompositionEvent": false,
-      "CompressionStream": false,
-      "confirm": false,
-      "console": false,
-      "ConstantSourceNode": false,
-      "ConvolverNode": false,
-      "CountQueuingStrategy": false,
-      "createImageBitmap": false,
-      "Credential": false,
-      "CredentialsContainer": false,
-      "crypto": false,
-      "Crypto": false,
-      "CryptoKey": false,
-      "CSS": false,
-      "CSSConditionRule": false,
-      "CSSFontFaceRule": false,
-      "CSSGroupingRule": false,
-      "CSSImportRule": false,
-      "CSSKeyframeRule": false,
-      "CSSKeyframesRule": false,
-      "CSSMatrixComponent": false,
-      "CSSMediaRule": false,
-      "CSSNamespaceRule": false,
-      "CSSPageRule": false,
-      "CSSPerspective": false,
-      "CSSRotate": false,
-      "CSSRule": false,
-      "CSSRuleList": false,
-      "CSSScale": false,
-      "CSSSkew": false,
-      "CSSSkewX": false,
-      "CSSSkewY": false,
-      "CSSStyleDeclaration": false,
-      "CSSStyleRule": false,
-      "CSSStyleSheet": false,
-      "CSSSupportsRule": false,
-      "CSSTransformValue": false,
-      "CSSTranslate": false,
-      "CustomElementRegistry": false,
-      "customElements": false,
-      "CustomEvent": false,
-      "DataTransfer": false,
-      "DataTransferItem": false,
-      "DataTransferItemList": false,
-      "DecompressionStream": false,
-      "defaultstatus": false,
-      "defaultStatus": false,
-      "DelayNode": false,
-      "DeviceMotionEvent": false,
-      "DeviceOrientationEvent": false,
-      "devicePixelRatio": false,
-      "dispatchEvent": false,
-      "document": false,
-      "Document": false,
-      "DocumentFragment": false,
-      "DocumentType": false,
-      "DOMError": false,
-      "DOMException": false,
-      "DOMImplementation": false,
-      "DOMMatrix": false,
-      "DOMMatrixReadOnly": false,
-      "DOMParser": false,
-      "DOMPoint": false,
-      "DOMPointReadOnly": false,
-      "DOMQuad": false,
-      "DOMRect": false,
-      "DOMRectList": false,
-      "DOMRectReadOnly": false,
-      "DOMStringList": false,
-      "DOMStringMap": false,
-      "DOMTokenList": false,
-      "DragEvent": false,
-      "DynamicsCompressorNode": false,
-      "Element": false,
-      "ErrorEvent": false,
-      "event": false,
-      "Event": false,
-      "EventSource": false,
-      "EventTarget": false,
-      "external": false,
-      "fetch": false,
-      "File": false,
-      "FileList": false,
-      "FileReader": false,
-      "find": false,
-      "focus": false,
-      "FocusEvent": false,
-      "FontFace": false,
-      "FontFaceSetLoadEvent": false,
-      "FormData": false,
-      "FormDataEvent": false,
-      "frameElement": false,
-      "frames": false,
-      "GainNode": false,
-      "Gamepad": false,
-      "GamepadButton": false,
-      "GamepadEvent": false,
-      "getComputedStyle": false,
-      "getSelection": false,
-      "HashChangeEvent": false,
-      "Headers": false,
-      "history": false,
-      "History": false,
-      "HTMLAllCollection": false,
-      "HTMLAnchorElement": false,
-      "HTMLAreaElement": false,
-      "HTMLAudioElement": false,
-      "HTMLBaseElement": false,
-      "HTMLBodyElement": false,
-      "HTMLBRElement": false,
-      "HTMLButtonElement": false,
-      "HTMLCanvasElement": false,
-      "HTMLCollection": false,
-      "HTMLContentElement": false,
-      "HTMLDataElement": false,
-      "HTMLDataListElement": false,
-      "HTMLDetailsElement": false,
-      "HTMLDialogElement": false,
-      "HTMLDirectoryElement": false,
-      "HTMLDivElement": false,
-      "HTMLDListElement": false,
-      "HTMLDocument": false,
-      "HTMLElement": false,
-      "HTMLEmbedElement": false,
-      "HTMLFieldSetElement": false,
-      "HTMLFontElement": false,
-      "HTMLFormControlsCollection": false,
-      "HTMLFormElement": false,
-      "HTMLFrameElement": false,
-      "HTMLFrameSetElement": false,
-      "HTMLHeadElement": false,
-      "HTMLHeadingElement": false,
-      "HTMLHRElement": false,
-      "HTMLHtmlElement": false,
-      "HTMLIFrameElement": false,
-      "HTMLImageElement": false,
-      "HTMLInputElement": false,
-      "HTMLLabelElement": false,
-      "HTMLLegendElement": false,
-      "HTMLLIElement": false,
-      "HTMLLinkElement": false,
-      "HTMLMapElement": false,
-      "HTMLMarqueeElement": false,
-      "HTMLMediaElement": false,
-      "HTMLMenuElement": false,
-      "HTMLMetaElement": false,
-      "HTMLMeterElement": false,
-      "HTMLModElement": false,
-      "HTMLObjectElement": false,
-      "HTMLOListElement": false,
-      "HTMLOptGroupElement": false,
-      "HTMLOptionElement": false,
-      "HTMLOptionsCollection": false,
-      "HTMLOutputElement": false,
-      "HTMLParagraphElement": false,
-      "HTMLParamElement": false,
-      "HTMLPictureElement": false,
-      "HTMLPreElement": false,
-      "HTMLProgressElement": false,
-      "HTMLQuoteElement": false,
-      "HTMLScriptElement": false,
-      "HTMLSelectElement": false,
-      "HTMLShadowElement": false,
-      "HTMLSlotElement": false,
-      "HTMLSourceElement": false,
-      "HTMLSpanElement": false,
-      "HTMLStyleElement": false,
-      "HTMLTableCaptionElement": false,
-      "HTMLTableCellElement": false,
-      "HTMLTableColElement": false,
-      "HTMLTableElement": false,
-      "HTMLTableRowElement": false,
-      "HTMLTableSectionElement": false,
-      "HTMLTemplateElement": false,
-      "HTMLTextAreaElement": false,
-      "HTMLTimeElement": false,
-      "HTMLTitleElement": false,
-      "HTMLTrackElement": false,
-      "HTMLUListElement": false,
-      "HTMLUnknownElement": false,
-      "HTMLVideoElement": false,
-      "IDBCursor": false,
-      "IDBCursorWithValue": false,
-      "IDBDatabase": false,
-      "IDBFactory": false,
-      "IDBIndex": false,
-      "IDBKeyRange": false,
-      "IDBObjectStore": false,
-      "IDBOpenDBRequest": false,
-      "IDBRequest": false,
-      "IDBTransaction": false,
-      "IDBVersionChangeEvent": false,
-      "IdleDeadline": false,
-      "IIRFilterNode": false,
-      "Image": false,
-      "ImageBitmap": false,
-      "ImageBitmapRenderingContext": false,
-      "ImageCapture": false,
-      "ImageData": false,
-      "indexedDB": false,
-      "innerHeight": false,
-      "innerWidth": false,
-      "InputEvent": false,
-      "IntersectionObserver": false,
-      "IntersectionObserverEntry": false,
-      "Intl": false,
-      "isSecureContext": false,
-      "KeyboardEvent": false,
-      "KeyframeEffect": false,
-      "KeyframeEffectReadOnly": false,
-      "length": false,
-      "localStorage": false,
-      "location": true,
-      "Location": false,
-      "locationbar": false,
-      "matchMedia": false,
-      "MediaDeviceInfo": false,
-      "MediaDevices": false,
-      "MediaElementAudioSourceNode": false,
-      "MediaEncryptedEvent": false,
-      "MediaError": false,
-      "MediaKeyMessageEvent": false,
-      "MediaKeySession": false,
-      "MediaKeyStatusMap": false,
-      "MediaKeySystemAccess": false,
-      "MediaList": false,
-      "MediaMetadata": false,
-      "MediaQueryList": false,
-      "MediaQueryListEvent": false,
-      "MediaRecorder": false,
-      "MediaSettingsRange": false,
-      "MediaSource": false,
-      "MediaStream": false,
-      "MediaStreamAudioDestinationNode": false,
-      "MediaStreamAudioSourceNode": false,
-      "MediaStreamConstraints": false,
-      "MediaStreamEvent": false,
-      "MediaStreamTrack": false,
-      "MediaStreamTrackEvent": false,
-      "menubar": false,
-      "MessageChannel": false,
-      "MessageEvent": false,
-      "MessagePort": false,
-      "MIDIAccess": false,
-      "MIDIConnectionEvent": false,
-      "MIDIInput": false,
-      "MIDIInputMap": false,
-      "MIDIMessageEvent": false,
-      "MIDIOutput": false,
-      "MIDIOutputMap": false,
-      "MIDIPort": false,
-      "MimeType": false,
-      "MimeTypeArray": false,
-      "MouseEvent": false,
-      "moveBy": false,
-      "moveTo": false,
-      "MutationEvent": false,
-      "MutationObserver": false,
-      "MutationRecord": false,
-      "name": false,
-      "NamedNodeMap": false,
-      "NavigationPreloadManager": false,
-      "navigator": false,
-      "Navigator": false,
-      "NavigatorUAData": false,
-      "NetworkInformation": false,
-      "Node": false,
-      "NodeFilter": false,
-      "NodeIterator": false,
-      "NodeList": false,
-      "Notification": false,
-      "OfflineAudioCompletionEvent": false,
-      "OfflineAudioContext": false,
-      "offscreenBuffering": false,
-      "OffscreenCanvas": true,
-      "OffscreenCanvasRenderingContext2D": false,
-      "onabort": true,
-      "onafterprint": true,
-      "onanimationend": true,
-      "onanimationiteration": true,
-      "onanimationstart": true,
-      "onappinstalled": true,
-      "onauxclick": true,
-      "onbeforeinstallprompt": true,
-      "onbeforeprint": true,
-      "onbeforeunload": true,
-      "onblur": true,
-      "oncancel": true,
-      "oncanplay": true,
-      "oncanplaythrough": true,
-      "onchange": true,
-      "onclick": true,
-      "onclose": true,
-      "oncontextmenu": true,
-      "oncuechange": true,
-      "ondblclick": true,
-      "ondevicemotion": true,
-      "ondeviceorientation": true,
-      "ondeviceorientationabsolute": true,
-      "ondrag": true,
-      "ondragend": true,
-      "ondragenter": true,
-      "ondragleave": true,
-      "ondragover": true,
-      "ondragstart": true,
-      "ondrop": true,
-      "ondurationchange": true,
-      "onemptied": true,
-      "onended": true,
-      "onerror": true,
-      "onfocus": true,
-      "ongotpointercapture": true,
-      "onhashchange": true,
-      "oninput": true,
-      "oninvalid": true,
-      "onkeydown": true,
-      "onkeypress": true,
-      "onkeyup": true,
-      "onlanguagechange": true,
-      "onload": true,
-      "onloadeddata": true,
-      "onloadedmetadata": true,
-      "onloadstart": true,
-      "onlostpointercapture": true,
-      "onmessage": true,
-      "onmessageerror": true,
-      "onmousedown": true,
-      "onmouseenter": true,
-      "onmouseleave": true,
-      "onmousemove": true,
-      "onmouseout": true,
-      "onmouseover": true,
-      "onmouseup": true,
-      "onmousewheel": true,
-      "onoffline": true,
-      "ononline": true,
-      "onpagehide": true,
-      "onpageshow": true,
-      "onpause": true,
-      "onplay": true,
-      "onplaying": true,
-      "onpointercancel": true,
-      "onpointerdown": true,
-      "onpointerenter": true,
-      "onpointerleave": true,
-      "onpointermove": true,
-      "onpointerout": true,
-      "onpointerover": true,
-      "onpointerup": true,
-      "onpopstate": true,
-      "onprogress": true,
-      "onratechange": true,
-      "onrejectionhandled": true,
-      "onreset": true,
-      "onresize": true,
-      "onscroll": true,
-      "onsearch": true,
-      "onseeked": true,
-      "onseeking": true,
-      "onselect": true,
-      "onstalled": true,
-      "onstorage": true,
-      "onsubmit": true,
-      "onsuspend": true,
-      "ontimeupdate": true,
-      "ontoggle": true,
-      "ontransitionend": true,
-      "onunhandledrejection": true,
-      "onunload": true,
-      "onvolumechange": true,
-      "onwaiting": true,
-      "onwheel": true,
-      "open": false,
-      "openDatabase": false,
-      "opener": false,
-      "Option": false,
-      "origin": false,
-      "OscillatorNode": false,
-      "outerHeight": false,
-      "outerWidth": false,
-      "OverconstrainedError": false,
-      "PageTransitionEvent": false,
-      "pageXOffset": false,
-      "pageYOffset": false,
-      "PannerNode": false,
-      "parent": false,
-      "Path2D": false,
-      "PaymentAddress": false,
-      "PaymentRequest": false,
-      "PaymentRequestUpdateEvent": false,
-      "PaymentResponse": false,
-      "performance": false,
-      "Performance": false,
-      "PerformanceEntry": false,
-      "PerformanceLongTaskTiming": false,
-      "PerformanceMark": false,
-      "PerformanceMeasure": false,
-      "PerformanceNavigation": false,
-      "PerformanceNavigationTiming": false,
-      "PerformanceObserver": false,
-      "PerformanceObserverEntryList": false,
-      "PerformancePaintTiming": false,
-      "PerformanceResourceTiming": false,
-      "PerformanceTiming": false,
-      "PeriodicWave": false,
-      "Permissions": false,
-      "PermissionStatus": false,
-      "personalbar": false,
-      "PhotoCapabilities": false,
-      "Plugin": false,
-      "PluginArray": false,
-      "PointerEvent": false,
-      "PopStateEvent": false,
-      "postMessage": false,
-      "Presentation": false,
-      "PresentationAvailability": false,
-      "PresentationConnection": false,
-      "PresentationConnectionAvailableEvent": false,
-      "PresentationConnectionCloseEvent": false,
-      "PresentationConnectionList": false,
-      "PresentationReceiver": false,
-      "PresentationRequest": false,
-      "print": false,
-      "ProcessingInstruction": false,
-      "ProgressEvent": false,
-      "PromiseRejectionEvent": false,
-      "prompt": false,
-      "PushManager": false,
-      "PushSubscription": false,
-      "PushSubscriptionOptions": false,
-      "queueMicrotask": false,
-      "RadioNodeList": false,
-      "Range": false,
-      "ReadableByteStreamController": false,
-      "ReadableStream": false,
-      "ReadableStreamBYOBReader": false,
-      "ReadableStreamBYOBRequest": false,
-      "ReadableStreamDefaultController": false,
-      "ReadableStreamDefaultReader": false,
-      "registerProcessor": false,
-      "RemotePlayback": false,
-      "removeEventListener": false,
-      "reportError": false,
-      "Request": false,
-      "requestAnimationFrame": false,
-      "requestIdleCallback": false,
-      "resizeBy": false,
-      "ResizeObserver": false,
-      "ResizeObserverEntry": false,
-      "resizeTo": false,
-      "Response": false,
-      "RTCCertificate": false,
-      "RTCDataChannel": false,
-      "RTCDataChannelEvent": false,
-      "RTCDtlsTransport": false,
-      "RTCIceCandidate": false,
-      "RTCIceGatherer": false,
-      "RTCIceTransport": false,
-      "RTCPeerConnection": false,
-      "RTCPeerConnectionIceEvent": false,
-      "RTCRtpContributingSource": false,
-      "RTCRtpReceiver": false,
-      "RTCRtpSender": false,
-      "RTCSctpTransport": false,
-      "RTCSessionDescription": false,
-      "RTCStatsReport": false,
-      "RTCTrackEvent": false,
-      "screen": false,
-      "Screen": false,
-      "screenLeft": false,
-      "ScreenOrientation": false,
-      "screenTop": false,
-      "screenX": false,
-      "screenY": false,
-      "ScriptProcessorNode": false,
-      "scroll": false,
-      "scrollbars": false,
-      "scrollBy": false,
-      "scrollTo": false,
-      "scrollX": false,
-      "scrollY": false,
-      "SecurityPolicyViolationEvent": false,
-      "Selection": false,
-      "self": false,
-      "ServiceWorker": false,
-      "ServiceWorkerContainer": false,
-      "ServiceWorkerRegistration": false,
-      "sessionStorage": false,
-      "setInterval": false,
-      "setTimeout": false,
-      "ShadowRoot": false,
-      "SharedWorker": false,
-      "SourceBuffer": false,
-      "SourceBufferList": false,
-      "speechSynthesis": false,
-      "SpeechSynthesisEvent": false,
-      "SpeechSynthesisUtterance": false,
-      "StaticRange": false,
-      "status": false,
-      "statusbar": false,
-      "StereoPannerNode": false,
-      "stop": false,
-      "Storage": false,
-      "StorageEvent": false,
-      "StorageManager": false,
-      "structuredClone": false,
-      "styleMedia": false,
-      "StyleSheet": false,
-      "StyleSheetList": false,
-      "SubmitEvent": false,
-      "SubtleCrypto": false,
-      "SVGAElement": false,
-      "SVGAngle": false,
-      "SVGAnimatedAngle": false,
-      "SVGAnimatedBoolean": false,
-      "SVGAnimatedEnumeration": false,
-      "SVGAnimatedInteger": false,
-      "SVGAnimatedLength": false,
-      "SVGAnimatedLengthList": false,
-      "SVGAnimatedNumber": false,
-      "SVGAnimatedNumberList": false,
-      "SVGAnimatedPreserveAspectRatio": false,
-      "SVGAnimatedRect": false,
-      "SVGAnimatedString": false,
-      "SVGAnimatedTransformList": false,
-      "SVGAnimateElement": false,
-      "SVGAnimateMotionElement": false,
-      "SVGAnimateTransformElement": false,
-      "SVGAnimationElement": false,
-      "SVGCircleElement": false,
-      "SVGClipPathElement": false,
-      "SVGComponentTransferFunctionElement": false,
-      "SVGDefsElement": false,
-      "SVGDescElement": false,
-      "SVGDiscardElement": false,
-      "SVGElement": false,
-      "SVGEllipseElement": false,
-      "SVGFEBlendElement": false,
-      "SVGFEColorMatrixElement": false,
-      "SVGFEComponentTransferElement": false,
-      "SVGFECompositeElement": false,
-      "SVGFEConvolveMatrixElement": false,
-      "SVGFEDiffuseLightingElement": false,
-      "SVGFEDisplacementMapElement": false,
-      "SVGFEDistantLightElement": false,
-      "SVGFEDropShadowElement": false,
-      "SVGFEFloodElement": false,
-      "SVGFEFuncAElement": false,
-      "SVGFEFuncBElement": false,
-      "SVGFEFuncGElement": false,
-      "SVGFEFuncRElement": false,
-      "SVGFEGaussianBlurElement": false,
-      "SVGFEImageElement": false,
-      "SVGFEMergeElement": false,
-      "SVGFEMergeNodeElement": false,
-      "SVGFEMorphologyElement": false,
-      "SVGFEOffsetElement": false,
-      "SVGFEPointLightElement": false,
-      "SVGFESpecularLightingElement": false,
-      "SVGFESpotLightElement": false,
-      "SVGFETileElement": false,
-      "SVGFETurbulenceElement": false,
-      "SVGFilterElement": false,
-      "SVGForeignObjectElement": false,
-      "SVGGElement": false,
-      "SVGGeometryElement": false,
-      "SVGGradientElement": false,
-      "SVGGraphicsElement": false,
-      "SVGImageElement": false,
-      "SVGLength": false,
-      "SVGLengthList": false,
-      "SVGLinearGradientElement": false,
-      "SVGLineElement": false,
-      "SVGMarkerElement": false,
-      "SVGMaskElement": false,
-      "SVGMatrix": false,
-      "SVGMetadataElement": false,
-      "SVGMPathElement": false,
-      "SVGNumber": false,
-      "SVGNumberList": false,
-      "SVGPathElement": false,
-      "SVGPatternElement": false,
-      "SVGPoint": false,
-      "SVGPointList": false,
-      "SVGPolygonElement": false,
-      "SVGPolylineElement": false,
-      "SVGPreserveAspectRatio": false,
-      "SVGRadialGradientElement": false,
-      "SVGRect": false,
-      "SVGRectElement": false,
-      "SVGScriptElement": false,
-      "SVGSetElement": false,
-      "SVGStopElement": false,
-      "SVGStringList": false,
-      "SVGStyleElement": false,
-      "SVGSVGElement": false,
-      "SVGSwitchElement": false,
-      "SVGSymbolElement": false,
-      "SVGTextContentElement": false,
-      "SVGTextElement": false,
-      "SVGTextPathElement": false,
-      "SVGTextPositioningElement": false,
-      "SVGTitleElement": false,
-      "SVGTransform": false,
-      "SVGTransformList": false,
-      "SVGTSpanElement": false,
-      "SVGUnitTypes": false,
-      "SVGUseElement": false,
-      "SVGViewElement": false,
-      "TaskAttributionTiming": false,
-      "Text": false,
-      "TextDecoder": false,
-      "TextDecoderStream": false,
-      "TextEncoder": false,
-      "TextEncoderStream": false,
-      "TextEvent": false,
-      "TextMetrics": false,
-      "TextTrack": false,
-      "TextTrackCue": false,
-      "TextTrackCueList": false,
-      "TextTrackList": false,
-      "TimeRanges": false,
-      "ToggleEvent": false,
-      "toolbar": false,
-      "top": false,
-      "Touch": false,
-      "TouchEvent": false,
-      "TouchList": false,
-      "TrackEvent": false,
-      "TransformStream": false,
-      "TransformStreamDefaultController": false,
-      "TransitionEvent": false,
-      "TreeWalker": false,
-      "UIEvent": false,
-      "URL": false,
-      "URLSearchParams": false,
-      "ValidityState": false,
-      "visualViewport": false,
-      "VisualViewport": false,
-      "VTTCue": false,
-      "WaveShaperNode": false,
-      "WebAssembly": false,
-      "WebGL2RenderingContext": false,
-      "WebGLActiveInfo": false,
-      "WebGLBuffer": false,
-      "WebGLContextEvent": false,
-      "WebGLFramebuffer": false,
-      "WebGLProgram": false,
-      "WebGLQuery": false,
-      "WebGLRenderbuffer": false,
-      "WebGLRenderingContext": false,
-      "WebGLSampler": false,
-      "WebGLShader": false,
-      "WebGLShaderPrecisionFormat": false,
-      "WebGLSync": false,
-      "WebGLTexture": false,
-      "WebGLTransformFeedback": false,
-      "WebGLUniformLocation": false,
-      "WebGLVertexArrayObject": false,
-      "WebSocket": false,
-      "WheelEvent": false,
-      "window": false,
-      "Window": false,
-      "Worker": false,
-      "WritableStream": false,
-      "WritableStreamDefaultController": false,
-      "WritableStreamDefaultWriter": false,
-      "XMLDocument": false,
-      "XMLHttpRequest": false,
-      "XMLHttpRequestEventTarget": false,
-      "XMLHttpRequestUpload": false,
-      "XMLSerializer": false,
-      "XPathEvaluator": false,
-      "XPathExpression": false,
-      "XPathResult": false,
-      "XRAnchor": false,
-      "XRBoundedReferenceSpace": false,
-      "XRCPUDepthInformation": false,
-      "XRDepthInformation": false,
-      "XRFrame": false,
-      "XRInputSource": false,
-      "XRInputSourceArray": false,
-      "XRInputSourceEvent": false,
-      "XRInputSourcesChangeEvent": false,
-      "XRPose": false,
-      "XRReferenceSpace": false,
-      "XRReferenceSpaceEvent": false,
-      "XRRenderState": false,
-      "XRRigidTransform": false,
-      "XRSession": false,
-      "XRSessionEvent": false,
-      "XRSpace": false,
-      "XRSystem": false,
-      "XRView": false,
-      "XRViewerPose": false,
-      "XRViewport": false,
-      "XRWebGLBinding": false,
-      "XRWebGLDepthInformation": false,
-      "XRWebGLLayer": false,
-      "XSLTProcessor": false,
-      "after": false,
-      "afterEach": false,
-      "before": false,
-      "beforeEach": false,
-      "context": false,
-      "describe": false,
-      "it": false,
-      "mocha": false,
-      "run": false,
-      "setup": false,
-      "specify": false,
-      "suite": false,
-      "suiteSetup": false,
-      "suiteTeardown": false,
-      "teardown": false,
-      "test": false,
-      "xcontext": false,
-      "xdescribe": false,
-      "xit": false,
-      "xspecify": false,
-      "__dirname": false,
-      "__filename": false,
-      "Buffer": false,
-      "clearImmediate": false,
-      "exports": true,
-      "global": false,
-      "Iterator": false,
-      "module": false,
-      "process": false,
-      "require": false,
-      "setImmediate": false
-    },
-    "parser": "espree@9.6.1",
-    "parserOptions": {}
-  },
-  "plugins": ["@", "cypress", "prettier:eslint-plugin-prettier@5.2.1"],
-  "rules": {
-    "constructor-super": [2],
-    "for-direction": [2],
-    "getter-return": [2],
-    "no-async-promise-executor": [2],
-    "no-case-declarations": [2],
-    "no-class-assign": [2],
-    "no-compare-neg-zero": [2],
-    "no-cond-assign": [2],
-    "no-const-assign": [2],
-    "no-constant-binary-expression": [2],
-    "no-constant-condition": [2],
-    "no-control-regex": [2],
-    "no-debugger": [2],
-    "no-delete-var": [2],
-    "no-dupe-args": [2],
-    "no-dupe-class-members": [2],
-    "no-dupe-else-if": [2],
-    "no-dupe-keys": [2],
-    "no-duplicate-case": [2],
-    "no-empty": [2],
-    "no-empty-character-class": [2],
-    "no-empty-pattern": [2],
-    "no-empty-static-block": [2],
-    "no-ex-assign": [2],
-    "no-extra-boolean-cast": [2],
-    "no-fallthrough": [2],
-    "no-func-assign": [2],
-    "no-global-assign": [2],
-    "no-import-assign": [2],
-    "no-invalid-regexp": [2],
-    "no-irregular-whitespace": [2],
-    "no-loss-of-precision": [2],
-    "no-misleading-character-class": [2],
-    "no-new-native-nonconstructor": [2],
-    "no-nonoctal-decimal-escape": [2],
-    "no-obj-calls": [2],
-    "no-octal": [2],
-    "no-prototype-builtins": [2],
-    "no-redeclare": [2],
-    "no-regex-spaces": [2],
-    "no-self-assign": [2],
-    "no-setter-return": [2],
-    "no-shadow-restricted-names": [2],
-    "no-sparse-arrays": [2],
-    "no-this-before-super": [2],
-    "no-undef": [2],
-    "no-unexpected-multiline": [0],
-    "no-unreachable": [2],
-    "no-unsafe-finally": [2],
-    "no-unsafe-negation": [2],
-    "no-unsafe-optional-chaining": [2],
-    "no-unused-labels": [2],
-    "no-unused-private-class-members": [2],
-    "no-unused-vars": [2],
-    "no-useless-backreference": [2],
-    "no-useless-catch": [2],
-    "no-useless-escape": [2],
-    "no-with": [2],
-    "require-yield": [2],
-    "use-isnan": [2],
-    "valid-typeof": [2],
-    "cypress/no-assigning-return-values": [2],
-    "cypress/no-unnecessary-waiting": [2],
-    "cypress/no-async-tests": [2],
-    "cypress/unsafe-to-chain-command": [2],
-    "curly": [0],
-    "@typescript-eslint/lines-around-comment": [0],
-    "@typescript-eslint/quotes": [0],
-    "babel/quotes": [0],
-    "unicorn/template-indent": [0],
-    "vue/html-self-closing": [0],
-    "vue/max-len": [0],
-    "@babel/object-curly-spacing": [0],
-    "@babel/semi": [0],
-    "@typescript-eslint/block-spacing": [0],
-    "@typescript-eslint/brace-style": [0],
-    "@typescript-eslint/comma-dangle": [0],
-    "@typescript-eslint/comma-spacing": [0],
-    "@typescript-eslint/func-call-spacing": [0],
-    "@typescript-eslint/indent": [0],
-    "@typescript-eslint/key-spacing": [0],
-    "@typescript-eslint/keyword-spacing": [0],
-    "@typescript-eslint/member-delimiter-style": [0],
-    "@typescript-eslint/no-extra-parens": [0],
-    "@typescript-eslint/no-extra-semi": [0],
-    "@typescript-eslint/object-curly-spacing": [0],
-    "@typescript-eslint/semi": [0],
-    "@typescript-eslint/space-before-blocks": [0],
-    "@typescript-eslint/space-before-function-paren": [0],
-    "@typescript-eslint/space-infix-ops": [0],
-    "@typescript-eslint/type-annotation-spacing": [0],
-    "babel/object-curly-spacing": [0],
-    "babel/semi": [0],
-    "flowtype/boolean-style": [0],
-    "flowtype/delimiter-dangle": [0],
-    "flowtype/generic-spacing": [0],
-    "flowtype/object-type-curly-spacing": [0],
-    "flowtype/object-type-delimiter": [0],
-    "flowtype/quotes": [0],
-    "flowtype/semi": [0],
-    "flowtype/space-after-type-colon": [0],
-    "flowtype/space-before-generic-bracket": [0],
-    "flowtype/space-before-type-colon": [0],
-    "flowtype/union-intersection-spacing": [0],
-    "react/jsx-child-element-spacing": [0],
-    "react/jsx-closing-bracket-location": [0],
-    "react/jsx-closing-tag-location": [0],
-    "react/jsx-curly-newline": [0],
-    "react/jsx-curly-spacing": [0],
-    "react/jsx-equals-spacing": [0],
-    "react/jsx-first-prop-new-line": [0],
-    "react/jsx-indent": [0],
-    "react/jsx-indent-props": [0],
-    "react/jsx-max-props-per-line": [0],
-    "react/jsx-newline": [0],
-    "react/jsx-one-expression-per-line": [0],
-    "react/jsx-props-no-multi-spaces": [0],
-    "react/jsx-tag-spacing": [0],
-    "react/jsx-wrap-multilines": [0],
-    "standard/array-bracket-even-spacing": [0],
-    "standard/computed-property-even-spacing": [0],
-    "standard/object-curly-even-spacing": [0],
-    "unicorn/empty-brace-spaces": [0],
-    "unicorn/no-nested-ternary": [0],
-    "unicorn/number-literal-case": [0],
-    "vue/array-bracket-newline": [0],
-    "vue/array-bracket-spacing": [0],
-    "vue/array-element-newline": [0],
-    "vue/arrow-spacing": [0],
-    "vue/block-spacing": [0],
-    "vue/block-tag-newline": [0],
-    "vue/brace-style": [0],
-    "vue/comma-dangle": [0],
-    "vue/comma-spacing": [0],
-    "vue/comma-style": [0],
-    "vue/dot-location": [0],
-    "vue/func-call-spacing": [0],
-    "vue/html-closing-bracket-newline": [0],
-    "vue/html-closing-bracket-spacing": [0],
-    "vue/html-end-tags": [0],
-    "vue/html-indent": [0],
-    "vue/html-quotes": [0],
-    "vue/key-spacing": [0],
-    "vue/keyword-spacing": [0],
-    "vue/max-attributes-per-line": [0],
-    "vue/multiline-html-element-content-newline": [0],
-    "vue/multiline-ternary": [0],
-    "vue/mustache-interpolation-spacing": [0],
-    "vue/no-extra-parens": [0],
-    "vue/no-multi-spaces": [0],
-    "vue/no-spaces-around-equal-signs-in-attribute": [0],
-    "vue/object-curly-newline": [0],
-    "vue/object-curly-spacing": [0],
-    "vue/object-property-newline": [0],
-    "vue/operator-linebreak": [0],
-    "vue/quote-props": [0],
-    "vue/script-indent": [0],
-    "vue/singleline-html-element-content-newline": [0],
-    "vue/space-in-parens": [0],
-    "vue/space-infix-ops": [0],
-    "vue/space-unary-ops": [0],
-    "vue/template-curly-spacing": [0],
-    "space-unary-word-ops": [0],
-    "generator-star": [0],
-    "no-comma-dangle": [0],
-    "no-reserved-keys": [0],
-    "no-space-before-semi": [0],
-    "no-wrap-func": [0],
-    "space-after-function-name": [0],
-    "space-before-function-parentheses": [0],
-    "space-in-brackets": [0],
-    "no-arrow-condition": [0],
-    "space-after-keywords": [0],
-    "space-before-keywords": [0],
-    "space-return-throw-case": [0],
-    "no-spaced-func": [0],
-    "indent-legacy": [0],
-    "array-bracket-newline": [0],
-    "array-bracket-spacing": [0],
-    "array-element-newline": [0],
-    "arrow-parens": [0],
-    "arrow-spacing": [0],
-    "block-spacing": [0],
-    "brace-style": [0],
-    "comma-dangle": [0],
-    "comma-spacing": [0],
-    "comma-style": [0],
-    "computed-property-spacing": [0],
-    "dot-location": [0],
-    "eol-last": [0],
-    "func-call-spacing": [0],
-    "function-call-argument-newline": [0],
-    "function-paren-newline": [0],
-    "generator-star-spacing": [0],
-    "implicit-arrow-linebreak": [0],
-    "indent": [0],
-    "jsx-quotes": [0],
-    "key-spacing": [0],
-    "keyword-spacing": [0],
-    "linebreak-style": [0],
-    "lines-around-comment": [0],
-    "max-len": [0],
-    "max-statements-per-line": [0],
-    "multiline-ternary": [0],
-    "new-parens": [0],
-    "newline-per-chained-call": [0],
-    "no-confusing-arrow": [0],
-    "no-extra-parens": [0],
-    "no-extra-semi": [0],
-    "no-floating-decimal": [0],
-    "no-mixed-operators": [0],
-    "no-mixed-spaces-and-tabs": [0],
-    "no-multi-spaces": [0],
-    "no-multiple-empty-lines": [0],
-    "no-tabs": [0],
-    "no-trailing-spaces": [0],
-    "no-whitespace-before-property": [0],
-    "nonblock-statement-body-position": [0],
-    "object-curly-newline": [0],
-    "object-curly-spacing": [0],
-    "object-property-newline": [0],
-    "one-var-declaration-per-line": [0],
-    "operator-linebreak": [0],
-    "padded-blocks": [0],
-    "quote-props": [0],
-    "quotes": [0],
-    "rest-spread-spacing": [0],
-    "semi": [0],
-    "semi-spacing": [0],
-    "semi-style": [0],
-    "space-before-blocks": [0],
-    "space-before-function-paren": [0],
-    "space-in-parens": [0],
-    "space-infix-ops": [0],
-    "space-unary-ops": [0],
-    "switch-colon-spacing": [0],
-    "template-curly-spacing": [0],
-    "template-tag-spacing": [0],
-    "wrap-iife": [0],
-    "wrap-regex": [0],
-    "yield-star-spacing": [0],
-    "react/jsx-space-before-closing": [0],
-    "prettier/prettier": [2],
-    "arrow-body-style": [0],
-    "prefer-arrow-callback": [0],
-    "prefer-const": [2]
-  }
-}

From 16d306cb108190c32c0b840a839c49f15e62c588 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 6 Aug 2024 19:10:26 +0000
Subject: [PATCH 011/273] chore(deps): update dependency node to v22.6.0

---
 .github/workflows/continuous-integration.yml | 14 +++++++-------
 .nvmrc                                       |  2 +-
 renovate.json                                |  2 +-
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index 63eeb5213e..44d417808b 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -105,7 +105,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.5.1'
+          node-version: '22.6.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -134,7 +134,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.5.1'
+          node-version: '22.6.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -163,7 +163,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.5.1'
+          node-version: '22.6.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -195,7 +195,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.5.1'
+          node-version: '22.6.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -303,7 +303,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.5.1'
+          node-version: '22.6.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -346,7 +346,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.5.1'
+          node-version: '22.6.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -385,7 +385,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.5.1'
+          node-version: '22.6.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
diff --git a/.nvmrc b/.nvmrc
index 1384ff6a1c..dc5f6a52b1 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-22.5.1
+22.6.0
diff --git a/renovate.json b/renovate.json
index e503ed51bf..45a58051ba 100644
--- a/renovate.json
+++ b/renovate.json
@@ -5,7 +5,7 @@
     ":prConcurrentLimitNone"
   ],
   "constraints": {
-    "node": "22.5.1",
+    "node": "22.6.0",
     "php": "8.3.10"
   },
   "automergeType": "branch",

From 1766ae453301e7f72eb1aec9a4677e9f13c76a92 Mon Sep 17 00:00:00 2001
From: Urban Suppiger <urban@suppiger.net>
Date: Tue, 6 Aug 2024 21:30:25 +0200
Subject: [PATCH 012/273] fixes naming and uriTemplate of category subresource

---
 api/src/Entity/Category.php                                    | 3 +--
 ...ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml | 2 +-
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/api/src/Entity/Category.php b/api/src/Entity/Category.php
index 03fccdd46c..b1972babd0 100644
--- a/api/src/Entity/Category.php
+++ b/api/src/Entity/Category.php
@@ -58,7 +58,6 @@
             securityPostDenormalize: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)'
         ),
         new GetCollection(
-            name: 'BelongsToCamp_App\Entity\Category_get_collection',
             uriTemplate: self::CAMP_SUBRESOURCE_URI_TEMPLATE,
             uriVariables: [
                 'campId' => new Link(
@@ -79,7 +78,7 @@ class Category extends BaseEntity implements BelongsToCampInterface, CopyFromPro
     use ClassInfoTrait;
     use HasRootContentNodeTrait;
 
-    public const CAMP_SUBRESOURCE_URI_TEMPLATE = '/camps/{campId}/categories.{_format}';
+    public const CAMP_SUBRESOURCE_URI_TEMPLATE = '/camps/{campId}/categories{._format}';
 
     public const ITEM_NORMALIZATION_CONTEXT = [
         'groups' => [
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
index de1445fbea..d1f260203b 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
@@ -22659,7 +22659,7 @@ paths:
     get:
       deprecated: false
       description: 'Retrieves the collection of Category resources.'
-      operationId: BelongsToCamp_App\Entity\Category_get_collection
+      operationId: api_camps_campIdcategories_get_collection
       parameters:
         -
           allowEmptyValue: false

From 3ff6b68be82d721f9796886ef01b32c408ef381a Mon Sep 17 00:00:00 2001
From: Carlo Beltrame <carlo@beltra.me>
Date: Tue, 6 Aug 2024 23:10:07 +0200
Subject: [PATCH 013/273] Rename safety concept to safety considerations

Fixes #5508
---
 api/fixtures/activity1-aside-top.yml          |   6 +-
 api/fixtures/categories.yml                   |   2 +-
 api/fixtures/contentTypes.yml                 |   4 +-
 api/fixtures/performance_test/activities.yml  |  12 +-
 api/fixtures/performance_test/categories.yml  |   2 +-
 .../schema/Version20240806120000.php          |  27 +++++
 api/src/Entity/ContentNode.php                |   2 +-
 api/src/Entity/ContentType.php                |   2 +-
 .../Api/Categories/CreateCategoryTest.php     |   4 +-
 .../Api/Categories/UpdateCategoryTest.php     |  18 +--
 .../ContentNode/ListContentNodesTest.php      |   4 +-
 .../CreateContentNodeTestCase.php             |   2 +-
 .../SingleText/ListSingleTextTest.php         |   2 +-
 .../ContentTypes/DeleteContentTypeTest.php    |   2 +-
 .../Api/ContentTypes/ReadContentTypeTest.php  |   4 +-
 .../ContentTypes/UpdateContentTypeTest.php    |   2 +-
 .../Api/SnapshotTests/ReadItemFixtureMap.php  |   2 +-
 ...est__testOpenApiSpecMatchesSnapshot__1.yml | 106 +++++++++---------
 common/locales/de.json                        |   4 +-
 common/locales/en.json                        |   4 +-
 common/locales/fr.json                        |   4 +-
 common/locales/it.json                        |   4 +-
 .../responses/content_types_collection.json   |   2 +-
 .../src/components/activity/ContentNode.vue   |   4 +-
 ...tyConcept.vue => SafetyConsiderations.vue} |   4 +-
 .../scheduleEntry/contentNode/ContentNode.vue |   4 +-
 ...tyConcept.vue => SafetyConsiderations.vue} |   2 +-
 .../__snapshots__/program.spec.json.snap      |  40 +++----
 .../single_activity.spec.json.snap            |   2 +-
 .../__tests__/fullCampStoreContent.json       |  42 +++----
 .../scheduleEntry/contentNode/ContentNode.vue |   4 +-
 ...tyConcept.vue => SafetyConsiderations.vue} |   0
 32 files changed, 175 insertions(+), 148 deletions(-)
 create mode 100644 api/migrations/schema/Version20240806120000.php
 rename frontend/src/components/activity/content/{SafetyConcept.vue => SafetyConsiderations.vue} (86%)
 rename pdf/src/campPrint/scheduleEntry/contentNode/{SafetyConcept.vue => SafetyConsiderations.vue} (94%)
 rename print/components/scheduleEntry/contentNode/{SafetyConcept.vue => SafetyConsiderations.vue} (100%)

diff --git a/api/fixtures/activity1-aside-top.yml b/api/fixtures/activity1-aside-top.yml
index be19e66902..5840dcc926 100644
--- a/api/fixtures/activity1-aside-top.yml
+++ b/api/fixtures/activity1-aside-top.yml
@@ -27,11 +27,11 @@ App\Entity\ContentNode\SingleText:
     instanceName: 'singleText1'
     contentType: '@contentTypeNotes'
     data: { html: <word()> }
-  safetyConcept1:
+  safetyConsiderations1:
     root: '@columnLayout1'
     parent: '@responsiveLayout1'
     slot: 'aside-top'
     position: 3
-    instanceName: 'safetyConcept1'
-    contentType: '@contentTypeSafetyConcept'
+    instanceName: 'safetyConsiderations1'
+    contentType: '@contentTypeSafetyConsiderations'
     data: { html: <sentence()> }
diff --git a/api/fixtures/categories.yml b/api/fixtures/categories.yml
index 2adac31992..c66effe26f 100644
--- a/api/fixtures/categories.yml
+++ b/api/fixtures/categories.yml
@@ -7,7 +7,7 @@ App\Entity\Category:
     numberingStyle: 1
     rootContentNode: '@columnLayout2'
     preferredContentTypes:
-      - '@contentTypeSafetyConcept'
+      - '@contentTypeSafetyConsiderations'
   category2:
     camp: '@camp1'
     short: LP
diff --git a/api/fixtures/contentTypes.yml b/api/fixtures/contentTypes.yml
index a620bf2ee9..a9127eae79 100644
--- a/api/fixtures/contentTypes.yml
+++ b/api/fixtures/contentTypes.yml
@@ -1,6 +1,6 @@
 App\Entity\ContentType:
-  contentTypeSafetyConcept:
-    name: 'SafetyConcept'
+  contentTypeSafetyConsiderations:
+    name: 'SafetyConsiderations'
     active: true
     entityClass: 'App\Entity\ContentNode\SingleText'
   contentTypeStoryContext:
diff --git a/api/fixtures/performance_test/activities.yml b/api/fixtures/performance_test/activities.yml
index c17f563cce..014e9f6ea5 100644
--- a/api/fixtures/performance_test/activities.yml
+++ b/api/fixtures/performance_test/activities.yml
@@ -110,13 +110,13 @@ App\Entity\ContentNode\SingleText:
     instanceName: 'singleText<current()>'
     contentType: '@contentTypeNotes'
     data: { html: <word()> }
-  additional_safetyConcept1_{1..400}:
+  additional_safetyConsiderations1_{1..400}:
     root: '@additional_columnLayout1_<current()>'
     parent: '@additional_responsiveLayout1_<current()>'
     slot: 'aside-top'
     position: 3
-    instanceName: 'safetyConcept<current()>'
-    contentType: '@contentTypeSafetyConcept'
+    instanceName: 'safetyConsiderations<current()>'
+    contentType: '@contentTypeSafetyConsiderations'
     data: { html: <sentence()> }
   additional_singleText_camp1_{1..200}:
     root: '@additional_columnLayout_camp1_<current()>'
@@ -126,11 +126,11 @@ App\Entity\ContentNode\SingleText:
     instanceName: 'singleText<current()>'
     contentType: '@contentTypeNotes'
     data: { html: <word()> }
-  additional_safetyConcept_camp1_{1..200}:
+  additional_safetyConsiderations_camp1_{1..200}:
     root: '@additional_columnLayout_camp1_<current()>'
     parent: '@additional_responsiveLayout_camp1_<current()>'
     slot: 'aside-top'
     position: 3
-    instanceName: 'safetyConcept<current()>'
-    contentType: '@contentTypeSafetyConcept'
+    instanceName: 'safetyConsiderations<current()>'
+    contentType: '@contentTypeSafetyConsiderations'
     data: { html: <sentence()> }
diff --git a/api/fixtures/performance_test/categories.yml b/api/fixtures/performance_test/categories.yml
index a51bcbc83d..7bd1c17572 100644
--- a/api/fixtures/performance_test/categories.yml
+++ b/api/fixtures/performance_test/categories.yml
@@ -7,7 +7,7 @@ App\Entity\Category:
     numberingStyle: 1
     rootContentNode: '@additionalColumnLayoutForCampNumber1_<current()>'
     preferredContentTypes:
-      - '@contentTypeSafetyConcept'
+      - '@contentTypeSafetyConsiderations'
   additionalCategoryForCampNumber2_{1..400}:
     camp: '@additionalCamp_<current()>'
     short: LP
diff --git a/api/migrations/schema/Version20240806120000.php b/api/migrations/schema/Version20240806120000.php
new file mode 100644
index 0000000000..b5678362a6
--- /dev/null
+++ b/api/migrations/schema/Version20240806120000.php
@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace DoctrineMigrations;
+
+use Doctrine\DBAL\Schema\Schema;
+use Doctrine\Migrations\AbstractMigration;
+
+/**
+ * Auto-generated Migration: Please modify to your needs!
+ */
+final class Version20240806120000 extends AbstractMigration {
+    public function getDescription(): string {
+        return 'Renames safety concept to safety considerations';
+    }
+
+    public function up(Schema $schema): void {
+        // this up() migration is auto-generated, please modify it to your needs
+        $this->addSql('UPDATE public.content_type SET entityclass=\'SafetyConsiderations\' WHERE entityclass=\'SafetyConcept\';');
+    }
+
+    public function down(Schema $schema): void {
+        // this down() migration is auto-generated, please modify it to your needs
+        $this->addSql('UPDATE public.content_type SET entityclass=\'SafetyConcept\' WHERE entityclass=\'SafetyConsiderations\';');
+    }
+}
diff --git a/api/src/Entity/ContentNode.php b/api/src/Entity/ContentNode.php
index 0b29d17753..2ebaf52023 100644
--- a/api/src/Entity/ContentNode.php
+++ b/api/src/Entity/ContentNode.php
@@ -160,7 +160,7 @@ public function __construct() {
     /**
      * The name of the content type of this content node. Read-only, for convenience.
      */
-    #[ApiProperty(example: 'SafetyConcept')]
+    #[ApiProperty(example: 'SafetyConsiderations')]
     #[Groups(['read'])]
     public function getContentTypeName(): string {
         return $this->contentType?->name;
diff --git a/api/src/Entity/ContentType.php b/api/src/Entity/ContentType.php
index 8da651b0d2..82be444e94 100644
--- a/api/src/Entity/ContentType.php
+++ b/api/src/Entity/ContentType.php
@@ -33,7 +33,7 @@ class ContentType extends BaseEntity {
      * A name in UpperCamelCase of the content type. This value may be used as a technical
      * identifier of this content type, it is guaranteed to stay fixed.
      */
-    #[ApiProperty(writable: false, example: 'SafetyConcept')]
+    #[ApiProperty(writable: false, example: 'SafetyConsiderations')]
     #[Groups(['read'])]
     #[ORM\Column(type: 'string', length: 32, unique: true)]
     public ?string $name = null;
diff --git a/api/tests/Api/Categories/CreateCategoryTest.php b/api/tests/Api/Categories/CreateCategoryTest.php
index 5c29dfe60a..4f0161d917 100644
--- a/api/tests/Api/Categories/CreateCategoryTest.php
+++ b/api/tests/Api/Categories/CreateCategoryTest.php
@@ -561,7 +561,7 @@ public function testCreateCategoryPurgesCacheTags() {
         $this->assertResponseStatusCodeSame(201);
 
         $camp1 = static::getFixture('camp1');
-        $contentType = static::getFixture('contentTypeSafetyConcept');
+        $contentType = static::getFixture('contentTypeSafetyConsiderations');
         self::assertEqualsCanonicalizing([
             '/categories',
             '/camps/'.$camp1->getId().'/categories',
@@ -606,7 +606,7 @@ public function getExampleWritePayload($attributes = [], $except = []) {
             array_merge([
                 'copyCategorySource' => null,
                 'camp' => $this->getIriFor('camp1'),
-                'preferredContentTypes' => [$this->getIriFor('contentTypeSafetyConcept')],
+                'preferredContentTypes' => [$this->getIriFor('contentTypeSafetyConsiderations')],
             ], $attributes),
             [],
             $except
diff --git a/api/tests/Api/Categories/UpdateCategoryTest.php b/api/tests/Api/Categories/UpdateCategoryTest.php
index 92d3429565..df15957861 100644
--- a/api/tests/Api/Categories/UpdateCategoryTest.php
+++ b/api/tests/Api/Categories/UpdateCategoryTest.php
@@ -17,7 +17,7 @@ public function testPatchCategoryIsDeniedForAnonymousUser() {
             'numberingStyle' => 'I',
             'preferredContentTypes' => [
                 $this->getIriFor('contentTypeColumnLayout'),
-                $this->getIriFor('contentTypeSafetyConcept'),
+                $this->getIriFor('contentTypeSafetyConsiderations'),
             ],
         ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
         $this->assertResponseStatusCodeSame(401);
@@ -37,7 +37,7 @@ public function testPatchCategoryIsDeniedForUnrelatedUser() {
                 'numberingStyle' => 'I',
                 'preferredContentTypes' => [
                     $this->getIriFor('contentTypeColumnLayout'),
-                    $this->getIriFor('contentTypeSafetyConcept'),
+                    $this->getIriFor('contentTypeSafetyConsiderations'),
                 ],
             ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
         ;
@@ -58,7 +58,7 @@ public function testPatchCategoryIsDeniedForInactiveCollaborator() {
                 'numberingStyle' => 'I',
                 'preferredContentTypes' => [
                     $this->getIriFor('contentTypeColumnLayout'),
-                    $this->getIriFor('contentTypeSafetyConcept'),
+                    $this->getIriFor('contentTypeSafetyConsiderations'),
                 ],
             ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
         ;
@@ -79,7 +79,7 @@ public function testPatchCategoryIsDeniedForGuest() {
                 'numberingStyle' => 'I',
                 'preferredContentTypes' => [
                     $this->getIriFor('contentTypeColumnLayout'),
-                    $this->getIriFor('contentTypeSafetyConcept'),
+                    $this->getIriFor('contentTypeSafetyConsiderations'),
                 ],
             ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
         ;
@@ -100,7 +100,7 @@ public function testPatchCategoryIsAllowedForMember() {
                 'numberingStyle' => 'I',
                 'preferredContentTypes' => [
                     $this->getIriFor('contentTypeColumnLayout'),
-                    $this->getIriFor('contentTypeSafetyConcept'),
+                    $this->getIriFor('contentTypeSafetyConsiderations'),
                 ],
             ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
         ;
@@ -127,7 +127,7 @@ public function testPatchCategoryIsAllowedForManager() {
             'numberingStyle' => 'I',
             'preferredContentTypes' => [
                 $this->getIriFor('contentTypeColumnLayout'),
-                $this->getIriFor('contentTypeSafetyConcept'),
+                $this->getIriFor('contentTypeSafetyConsiderations'),
             ],
         ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
         $this->assertResponseStatusCodeSame(200);
@@ -153,7 +153,7 @@ public function testPatchCategoryInCampPrototypeIsDeniedForUnrelatedUser() {
             'numberingStyle' => 'I',
             'preferredContentTypes' => [
                 $this->getIriFor('contentTypeColumnLayout'),
-                $this->getIriFor('contentTypeSafetyConcept'),
+                $this->getIriFor('contentTypeSafetyConsiderations'),
             ],
         ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
         $this->assertResponseStatusCodeSame(403);
@@ -529,12 +529,12 @@ public function testPatchCategoryPurgesCacheTags() {
 
         $contentTypeColumnLayout = static::getFixture('contentTypeColumnLayout');
         $contentTypeNotes = static::getFixture('contentTypeNotes');
-        $contentTypeSafetyConcept = static::getFixture('contentTypeSafetyConcept');
+        $contentTypeSafetyConsiderations = static::getFixture('contentTypeSafetyConsiderations');
         self::assertEqualsCanonicalizing([
             $category->getId(),
             $contentTypeColumnLayout->getId().'#categories',
             $contentTypeNotes->getId().'#categories',
-            $contentTypeSafetyConcept->getId().'#categories', // SafetyConcept was previously in the list, so this is purged because it was removed
+            $contentTypeSafetyConsiderations->getId().'#categories', // SafetyConsiderations was previously in the list, so this is purged because it was removed
         ], $cacheManager->getInvalidatedTags());
     }
 }
diff --git a/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php b/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php
index 3ea968a731..983df008d9 100644
--- a/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php
+++ b/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php
@@ -45,7 +45,7 @@ public function testListContentNodesIsAllowedForLoggedInUserButFiltered() {
             ['href' => $this->getIriFor('columnLayout2campPrototype')],
             ['href' => $this->getIriFor('singleText1')],
             ['href' => $this->getIriFor('singleText2')],
-            ['href' => $this->getIriFor('safetyConcept1')],
+            ['href' => $this->getIriFor('safetyConsiderations1')],
             ['href' => $this->getIriFor('materialNode1')],
             ['href' => $this->getIriFor('materialNode2')],
             ['href' => $this->getIriFor('storyboard1')],
@@ -75,7 +75,7 @@ public function testListContentNodesFilteredByPeriodIsAllowedForCollaborator() {
             ['href' => $this->getIriFor('columnLayout3')],
             ['href' => $this->getIriFor('singleText1')],
             ['href' => $this->getIriFor('singleText2')],
-            ['href' => $this->getIriFor('safetyConcept1')],
+            ['href' => $this->getIriFor('safetyConsiderations1')],
             ['href' => $this->getIriFor('materialNode1')],
             ['href' => $this->getIriFor('storyboard1')],
             ['href' => $this->getIriFor('storyboard2')],
diff --git a/api/tests/Api/ContentNodes/CreateContentNodeTestCase.php b/api/tests/Api/ContentNodes/CreateContentNodeTestCase.php
index 8fdaa2f327..8de5165c23 100644
--- a/api/tests/Api/ContentNodes/CreateContentNodeTestCase.php
+++ b/api/tests/Api/ContentNodes/CreateContentNodeTestCase.php
@@ -110,7 +110,7 @@ public function testCreateRejectsParentsWhichDontSupportChildren(string $idOfPar
     public function testCreateValidatesIncompatibleContentType() {
         // given
         /** @var ContentType $contentType */
-        $contentType = static::getFixture(ColumnLayout::class === $this->entityClass ? 'contentTypeSafetyConcept' : 'contentTypeColumnLayout');
+        $contentType = static::getFixture(ColumnLayout::class === $this->entityClass ? 'contentTypeSafetyConsiderations' : 'contentTypeColumnLayout');
 
         // when
         $this->create($this->getExampleWritePayload(['contentType' => $this->getIriFor($contentType)]));
diff --git a/api/tests/Api/ContentNodes/SingleText/ListSingleTextTest.php b/api/tests/Api/ContentNodes/SingleText/ListSingleTextTest.php
index 7e66a3c622..2a8ab5b05f 100644
--- a/api/tests/Api/ContentNodes/SingleText/ListSingleTextTest.php
+++ b/api/tests/Api/ContentNodes/SingleText/ListSingleTextTest.php
@@ -16,7 +16,7 @@ public function setUp(): void {
         $this->contentNodesCamp1and2 = [
             $this->getIriFor('singleText1'),
             $this->getIriFor('singleText2'),
-            $this->getIriFor('safetyConcept1'),
+            $this->getIriFor('safetyConsiderations1'),
         ];
 
         $this->contentNodesCampUnrelated = [
diff --git a/api/tests/Api/ContentTypes/DeleteContentTypeTest.php b/api/tests/Api/ContentTypes/DeleteContentTypeTest.php
index c1b097e8b4..d66fbcc191 100644
--- a/api/tests/Api/ContentTypes/DeleteContentTypeTest.php
+++ b/api/tests/Api/ContentTypes/DeleteContentTypeTest.php
@@ -9,7 +9,7 @@
  */
 class DeleteContentTypeTest extends ECampApiTestCase {
     public function testDeleteContentTypeIsNotAllowed() {
-        $contentType = static::getFixture('contentTypeSafetyConcept');
+        $contentType = static::getFixture('contentTypeSafetyConsiderations');
         static::createClientWithCredentials()->request('DELETE', '/content_types/'.$contentType->getId());
 
         $this->assertResponseStatusCodeSame(405); // method not allowed
diff --git a/api/tests/Api/ContentTypes/ReadContentTypeTest.php b/api/tests/Api/ContentTypes/ReadContentTypeTest.php
index 58c3b06679..75c8931661 100644
--- a/api/tests/Api/ContentTypes/ReadContentTypeTest.php
+++ b/api/tests/Api/ContentTypes/ReadContentTypeTest.php
@@ -11,7 +11,7 @@
 class ReadContentTypeTest extends ECampApiTestCase {
     public function testGetSingleContentTypeIsAllowedForAnonymousUser() {
         /** @var ContentType $contentType */
-        $contentType = static::getFixture('contentTypeSafetyConcept');
+        $contentType = static::getFixture('contentTypeSafetyConsiderations');
         static::createBasicClient()->request('GET', '/content_types/'.$contentType->getId());
         $this->assertResponseStatusCodeSame(200);
         $this->assertJsonContains([
@@ -28,7 +28,7 @@ public function testGetSingleContentTypeIsAllowedForAnonymousUser() {
 
     public function testGetSingleContentTypeIsAllowedForLoggedInUser() {
         /** @var ContentType $contentType */
-        $contentType = static::getFixture('contentTypeSafetyConcept');
+        $contentType = static::getFixture('contentTypeSafetyConsiderations');
         static::createClientWithCredentials()->request('GET', '/content_types/'.$contentType->getId());
         $this->assertResponseStatusCodeSame(200);
         $this->assertJsonContains([
diff --git a/api/tests/Api/ContentTypes/UpdateContentTypeTest.php b/api/tests/Api/ContentTypes/UpdateContentTypeTest.php
index ba98231bfa..bfd3b9c46f 100644
--- a/api/tests/Api/ContentTypes/UpdateContentTypeTest.php
+++ b/api/tests/Api/ContentTypes/UpdateContentTypeTest.php
@@ -9,7 +9,7 @@
  */
 class UpdateContentTypeTest extends ECampApiTestCase {
     public function testPatchContentTypeIsNotAllowed() {
-        $contentType = static::getFixture('contentTypeSafetyConcept');
+        $contentType = static::getFixture('contentTypeSafetyConsiderations');
         static::createClientWithCredentials()->request('PATCH', '/content_types/'.$contentType->getId(), ['json' => [
             'title' => 'Hello World',
             'location' => 'Stoos',
diff --git a/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php b/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php
index 15b893263b..3a799e428b 100644
--- a/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php
+++ b/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php
@@ -13,7 +13,7 @@ public static function get(string $collectionEndpoint, array $fixtures): mixed {
             '/categories' => $fixtures['category1'],
             '/content_node/column_layouts' => $fixtures['columnLayout2'],
             '/content_node/responsive_layouts' => $fixtures['responsiveLayout1'],
-            '/content_types' => $fixtures['contentTypeSafetyConcept'],
+            '/content_types' => $fixtures['contentTypeSafetyConsiderations'],
             '/day_responsibles' => $fixtures['dayResponsible1'],
             '/days' => $fixtures['day1period1'],
             '/material_items' => $fixtures['materialItem1'],
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
index de1445fbea..4ef6700142 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
@@ -7510,7 +7510,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -7608,7 +7608,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -7706,7 +7706,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -7804,7 +7804,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -7902,7 +7902,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -8127,7 +8127,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -8234,7 +8234,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -8341,7 +8341,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -8448,7 +8448,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -8555,7 +8555,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -8662,7 +8662,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -8860,7 +8860,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -8981,7 +8981,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -9102,7 +9102,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -9223,7 +9223,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -9344,7 +9344,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -9515,7 +9515,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -9606,7 +9606,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -9697,7 +9697,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -9794,7 +9794,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -9899,7 +9899,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -9999,7 +9999,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -10099,7 +10099,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -10201,7 +10201,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -10315,7 +10315,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -10429,7 +10429,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -10526,7 +10526,7 @@ components:
           description: |-
             A name in UpperCamelCase of the content type. This value may be used as a technical
             identifier of this content type, it is guaranteed to stay fixed.
-          example: SafetyConcept
+          example: SafetyConsiderations
           maxLength: 32
           readOnly: true
           type: string
@@ -10560,7 +10560,7 @@ components:
           description: |-
             A name in UpperCamelCase of the content type. This value may be used as a technical
             identifier of this content type, it is guaranteed to stay fixed.
-          example: SafetyConcept
+          example: SafetyConsiderations
           maxLength: 32
           readOnly: true
           type: string
@@ -10614,7 +10614,7 @@ components:
                   description: |-
                     A name in UpperCamelCase of the content type. This value may be used as a technical
                     identifier of this content type, it is guaranteed to stay fixed.
-                  example: SafetyConcept
+                  example: SafetyConsiderations
                   maxLength: 32
                   readOnly: true
                   type: string
@@ -10687,7 +10687,7 @@ components:
           description: |-
             A name in UpperCamelCase of the content type. This value may be used as a technical
             identifier of this content type, it is guaranteed to stay fixed.
-          example: SafetyConcept
+          example: SafetyConsiderations
           maxLength: 32
           readOnly: true
           type: string
@@ -10730,7 +10730,7 @@ components:
           description: |-
             A name in UpperCamelCase of the content type. This value may be used as a technical
             identifier of this content type, it is guaranteed to stay fixed.
-          example: SafetyConcept
+          example: SafetyConsiderations
           maxLength: 32
           readOnly: true
           type: string
@@ -10790,7 +10790,7 @@ components:
           description: |-
             A name in UpperCamelCase of the content type. This value may be used as a technical
             identifier of this content type, it is guaranteed to stay fixed.
-          example: SafetyConcept
+          example: SafetyConsiderations
           maxLength: 32
           readOnly: true
           type: string
@@ -10847,7 +10847,7 @@ components:
           description: |-
             A name in UpperCamelCase of the content type. This value may be used as a technical
             identifier of this content type, it is guaranteed to stay fixed.
-          example: SafetyConcept
+          example: SafetyConsiderations
           maxLength: 32
           readOnly: true
           type: string
@@ -12800,7 +12800,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -13009,7 +13009,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -13115,7 +13115,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -13304,7 +13304,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -13461,7 +13461,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -13684,7 +13684,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -13790,7 +13790,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -13986,7 +13986,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -16670,7 +16670,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -16904,7 +16904,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -17014,7 +17014,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -17218,7 +17218,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -18883,7 +18883,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -19099,7 +19099,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -19203,7 +19203,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -19395,7 +19395,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -19555,7 +19555,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -19781,7 +19781,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -19888,7 +19888,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -20086,7 +20086,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
diff --git a/common/locales/de.json b/common/locales/de.json
index c8f3f1d83f..cf026baa03 100644
--- a/common/locales/de.json
+++ b/common/locales/de.json
@@ -72,9 +72,9 @@
       "printAboveMainContent": "Über dem Hauptinhalt drucken",
       "printBelowMainContent": "Unter dem Hauptinhalt drucken"
     },
-    "safetyConcept": {
+    "safetyConsiderations": {
       "info": "Einige Blöcke erfordern, dass ihr euch Gedanken zu den Risiken macht. Hier könnt ihr diese Gedanken erfassen.{br}Haltet fest, welche Risiken ihr erkannt habt - und wie ihr diesen begegnen könnt.",
-      "name": "Sicherheitskonzept"
+      "name": "Sicherheitsüberlegungen"
     },
     "storyboard": {
       "entity": {
diff --git a/common/locales/en.json b/common/locales/en.json
index 1093dd758c..64ad605289 100644
--- a/common/locales/en.json
+++ b/common/locales/en.json
@@ -76,10 +76,10 @@
       "printAboveMainContent": "Print above main content",
       "printBelowMainContent": "Print below main content"
     },
-    "safetyConcept": {
+    "safetyConsiderations": {
       "icon": "mdi-security",
       "info": "Some blocks require to think about the risks. Here you can record these thoughts.{br}Record what risks you have identified - and how you can address them.",
-      "name": "Safety concept"
+      "name": "Safety considerations"
     },
     "storyboard": {
       "entity": {
diff --git a/common/locales/fr.json b/common/locales/fr.json
index db1a1a74a4..983250d6a4 100644
--- a/common/locales/fr.json
+++ b/common/locales/fr.json
@@ -62,9 +62,9 @@
       "printAboveMainContent": "Imprimer au-dessus du contenu principal",
       "printBelowMainContent": "Imprimer sous le contenu principal"
     },
-    "safetyConcept": {
+    "safetyConsiderations": {
       "info": "Certains blocs nécessitent de réfléchir aux risques. Tu peux enregistrer ces réflexions ici.{br}Enregistre les risques que tu as identifiés - et comment tu peux y faire face.",
-      "name": "Concept de sécurité"
+      "name": "Considérations de sécurité"
     },
     "storyboard": {
       "entity": {
diff --git a/common/locales/it.json b/common/locales/it.json
index f7ea5a4054..c22395bc12 100644
--- a/common/locales/it.json
+++ b/common/locales/it.json
@@ -62,9 +62,9 @@
       "printAboveMainContent": "Stampa sopra il contenuto principale",
       "printBelowMainContent": "Stampa sotto il contenuto principale"
     },
-    "safetyConcept": {
+    "safetyConsiderations": {
       "info": "Alcuni blocchi richiedono una riflessione sui rischi. Qui puoi registrare questi pensieri.{br}Registra i rischi che hai identificato e come puoi affrontarli.",
-      "name": "Concetto di sicurezza"
+      "name": "Considerazioni sulla sicurezza"
     },
     "storyboard": {
       "entity": {
diff --git a/e2e/specs/responses/content_types_collection.json b/e2e/specs/responses/content_types_collection.json
index f209e6a3b5..a268c3ee12 100644
--- a/e2e/specs/responses/content_types_collection.json
+++ b/e2e/specs/responses/content_types_collection.json
@@ -139,7 +139,7 @@
             "href": "/api/content_node/single_texts?contentType=%2Fapi%2Fcontent_types%2F44dcc7493c65"
           }
         },
-        "name": "SafetyConcept",
+        "name": "SafetyConsiderations",
         "active": true,
         "id": "44dcc7493c65"
       },
diff --git a/frontend/src/components/activity/ContentNode.vue b/frontend/src/components/activity/ContentNode.vue
index 4f152eb231..04bfbb9fe5 100644
--- a/frontend/src/components/activity/ContentNode.vue
+++ b/frontend/src/components/activity/ContentNode.vue
@@ -20,7 +20,7 @@ import Material from './content/Material.vue'
 import LAThematicArea from './content/LAThematicArea.vue'
 import LearningObjectives from './content/LearningObjectives.vue'
 import LearningTopics from './content/LearningTopics.vue'
-import SafetyConcept from './content/SafetyConcept.vue'
+import SafetyConsiderations from './content/SafetyConsiderations.vue'
 import Storyboard from './content/Storyboard.vue'
 import Storycontext from './content/Storycontext.vue'
 
@@ -32,7 +32,7 @@ const contentNodeComponents = {
   LAThematicArea,
   LearningObjectives,
   LearningTopics,
-  SafetyConcept,
+  SafetyConsiderations,
   Storyboard,
   Storycontext,
 }
diff --git a/frontend/src/components/activity/content/SafetyConcept.vue b/frontend/src/components/activity/content/SafetyConsiderations.vue
similarity index 86%
rename from frontend/src/components/activity/content/SafetyConcept.vue
rename to frontend/src/components/activity/content/SafetyConsiderations.vue
index 3807a56eb9..8359f14eae 100644
--- a/frontend/src/components/activity/content/SafetyConcept.vue
+++ b/frontend/src/components/activity/content/SafetyConsiderations.vue
@@ -3,7 +3,7 @@
     <api-richtext
       :uri="contentNode._meta.self"
       path="data.html"
-      :placeholder="$tc('contentNode.safetyConcept.name')"
+      :placeholder="$tc('contentNode.safetyConsiderations.name')"
       rows="2"
       :disabled="layoutMode || disabled"
       class="grow-v-slot"
@@ -17,7 +17,7 @@ import ContentNodeCard from '@/components/activity/content/layout/ContentNodeCar
 import { contentNodeMixin } from '@/mixins/contentNodeMixin.js'
 
 export default {
-  name: 'SafetyConcept',
+  name: 'SafetyConsiderations',
   components: {
     ContentNodeCard,
     ApiRichtext,
diff --git a/pdf/src/campPrint/scheduleEntry/contentNode/ContentNode.vue b/pdf/src/campPrint/scheduleEntry/contentNode/ContentNode.vue
index 8d71c91662..29d11ccc12 100644
--- a/pdf/src/campPrint/scheduleEntry/contentNode/ContentNode.vue
+++ b/pdf/src/campPrint/scheduleEntry/contentNode/ContentNode.vue
@@ -15,7 +15,7 @@ import LearningObjectives from './LearningObjectives.vue'
 import LearningTopics from './LearningTopics.vue'
 import Storyboard from './Storyboard.vue'
 import Notes from './Notes.vue'
-import SafetyConcept from './SafetyConcept.vue'
+import SafetyConsiderations from './SafetyConsiderations.vue'
 import Material from './Material.vue'
 import Storycontext from './Storycontext.vue'
 
@@ -38,7 +38,7 @@ export default {
         LearningTopics,
         Storyboard,
         Notes,
-        SafetyConcept,
+        SafetyConsiderations,
         Material,
         Storycontext,
       }[this.contentTypeName]
diff --git a/pdf/src/campPrint/scheduleEntry/contentNode/SafetyConcept.vue b/pdf/src/campPrint/scheduleEntry/contentNode/SafetyConsiderations.vue
similarity index 94%
rename from pdf/src/campPrint/scheduleEntry/contentNode/SafetyConcept.vue
rename to pdf/src/campPrint/scheduleEntry/contentNode/SafetyConsiderations.vue
index 41ed1bf585..36cfba907f 100644
--- a/pdf/src/campPrint/scheduleEntry/contentNode/SafetyConcept.vue
+++ b/pdf/src/campPrint/scheduleEntry/contentNode/SafetyConsiderations.vue
@@ -12,7 +12,7 @@ import InstanceName from '../InstanceName.vue'
 import RichText from '../../RichText.vue'
 
 export default {
-  name: 'SafetyConcept',
+  name: 'SafetyConsiderations',
   components: { RichText, InstanceName },
   extends: PdfComponent,
   props: {
diff --git a/pdf/src/renderer/__tests__/__snapshots__/program.spec.json.snap b/pdf/src/renderer/__tests__/__snapshots__/program.spec.json.snap
index c101834a6d..f857c1f78b 100644
--- a/pdf/src/renderer/__tests__/__snapshots__/program.spec.json.snap
+++ b/pdf/src/renderer/__tests__/__snapshots__/program.spec.json.snap
@@ -1202,7 +1202,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -2268,7 +2268,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -3368,7 +3368,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -4882,7 +4882,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -6232,7 +6232,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -7134,7 +7134,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -7972,7 +7972,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -9115,7 +9115,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -11156,7 +11156,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -13000,7 +13000,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -14520,7 +14520,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -15459,7 +15459,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -17332,7 +17332,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -18452,7 +18452,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -20273,7 +20273,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -21158,7 +21158,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -22392,7 +22392,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -23442,7 +23442,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -24569,7 +24569,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
@@ -25805,7 +25805,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
diff --git a/pdf/src/renderer/__tests__/__snapshots__/single_activity.spec.json.snap b/pdf/src/renderer/__tests__/__snapshots__/single_activity.spec.json.snap
index ad970ee2e0..946783a446 100644
--- a/pdf/src/renderer/__tests__/__snapshots__/single_activity.spec.json.snap
+++ b/pdf/src/renderer/__tests__/__snapshots__/single_activity.spec.json.snap
@@ -1177,7 +1177,7 @@
                                     {
                                       "parent": [Circular],
                                       "type": "TEXT_INSTANCE",
-                                      "value": "Safety concept",
+                                      "value": "Safety considerations",
                                     },
                                   ],
                                   "parent": [Circular],
diff --git a/pdf/src/renderer/__tests__/fullCampStoreContent.json b/pdf/src/renderer/__tests__/fullCampStoreContent.json
index 9b187d465a..b526ae4986 100644
--- a/pdf/src/renderer/__tests__/fullCampStoreContent.json
+++ b/pdf/src/renderer/__tests__/fullCampStoreContent.json
@@ -1190,7 +1190,7 @@
     "position": 1,
     "instanceName": null,
     "id": "dbed0f43dd70",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/193c3491fa23"
     },
@@ -1516,7 +1516,7 @@
     "position": 1,
     "instanceName": null,
     "id": "95cd1a28febb",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/13d74b9d52b8"
     },
@@ -2038,7 +2038,7 @@
     "position": 1,
     "instanceName": null,
     "id": "d5114af3e81e",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/e460f03e79b4"
     },
@@ -2320,7 +2320,7 @@
     "position": 1,
     "instanceName": null,
     "id": "7fe23d0fc00f",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/d81a9dae4316"
     },
@@ -2722,7 +2722,7 @@
     "position": 1,
     "instanceName": null,
     "id": "89a401571d37",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/3ddaa17f2649"
     },
@@ -3073,7 +3073,7 @@
     "position": 1,
     "instanceName": null,
     "id": "49d09f48b287",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/475f7b34581a"
     },
@@ -3484,7 +3484,7 @@
     "position": 1,
     "instanceName": null,
     "id": "21bca97eadd7",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/2b3f79233387"
     },
@@ -3927,7 +3927,7 @@
     "position": 1,
     "instanceName": null,
     "id": "e5c2b710898d",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/7792c9c855ce"
     },
@@ -4275,7 +4275,7 @@
     "position": 1,
     "instanceName": null,
     "id": "1f648080582d",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/b46ab3cde287"
     },
@@ -4718,7 +4718,7 @@
     "position": 1,
     "instanceName": null,
     "id": "22d8c12d7df3",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/d4fe28437432"
     },
@@ -5255,7 +5255,7 @@
     "position": 1,
     "instanceName": null,
     "id": "84b40e43160a",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/280031715953"
     },
@@ -5710,7 +5710,7 @@
     "position": 1,
     "instanceName": null,
     "id": "b3f5cbd532da",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/f9ba3a735450"
     },
@@ -6191,7 +6191,7 @@
     "position": 1,
     "instanceName": null,
     "id": "0fada08fb7c1",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/8e15971caab8"
     },
@@ -6527,7 +6527,7 @@
     "position": 1,
     "instanceName": null,
     "id": "f2f21f7b5963",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/3a9614e39661"
     },
@@ -6875,7 +6875,7 @@
     "position": 1,
     "instanceName": null,
     "id": "d0448480da8b",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/aff5fa86266e"
     },
@@ -7318,7 +7318,7 @@
     "position": 1,
     "instanceName": null,
     "id": "a7a4a7ebefe6",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/5015df0b6259"
     },
@@ -7711,7 +7711,7 @@
     "position": 1,
     "instanceName": null,
     "id": "ae634c4157a0",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/69fa08a77f38"
     },
@@ -8109,7 +8109,7 @@
     "position": 1,
     "instanceName": null,
     "id": "73ce151126d3",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/c2eae59077c5"
     },
@@ -8549,7 +8549,7 @@
     "position": 1,
     "instanceName": null,
     "id": "381c06d8ac17",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/78c9196140b7"
     },
@@ -8969,7 +8969,7 @@
     "position": 1,
     "instanceName": null,
     "id": "9a405af3cf69",
-    "contentTypeName": "SafetyConcept",
+    "contentTypeName": "SafetyConsiderations",
     "root": {
       "href": "/content_node/column_layouts/985356416a4b"
     },
@@ -9925,7 +9925,7 @@
     }
   },
   "/content_types/44dcc7493c65": {
-    "name": "SafetyConcept",
+    "name": "SafetyConsiderations",
     "active": true,
     "id": "44dcc7493c65",
     "contentNodes": {
diff --git a/print/components/scheduleEntry/contentNode/ContentNode.vue b/print/components/scheduleEntry/contentNode/ContentNode.vue
index 8381fba54d..649b861126 100644
--- a/print/components/scheduleEntry/contentNode/ContentNode.vue
+++ b/print/components/scheduleEntry/contentNode/ContentNode.vue
@@ -34,7 +34,7 @@ import LearningObjectives from './LearningObjectives.vue'
 import LearningTopics from './LearningTopics.vue'
 import Material from './Material.vue'
 import Notes from './Notes.vue'
-import SafetyConcept from './SafetyConcept.vue'
+import SafetyConsiderations from './SafetyConsiderations.vue'
 import Storycontext from './Storycontext.vue'
 import Storyboard from './Storyboard.vue'
 
@@ -48,7 +48,7 @@ export default defineNuxtComponent({
     LearningTopics,
     Material,
     Notes,
-    SafetyConcept,
+    SafetyConsiderations,
     Storyboard,
     Storycontext,
   },
diff --git a/print/components/scheduleEntry/contentNode/SafetyConcept.vue b/print/components/scheduleEntry/contentNode/SafetyConsiderations.vue
similarity index 100%
rename from print/components/scheduleEntry/contentNode/SafetyConcept.vue
rename to print/components/scheduleEntry/contentNode/SafetyConsiderations.vue

From 2b7d2977e2a113a6bf87823b323c9bf2fff2de6d Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 7 Aug 2024 01:07:43 +0000
Subject: [PATCH 014/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.24

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 05587f1079..078f482844 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.23
+    image: amazon/aws-cli:2.17.24
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From f0c7d0cfc3c4454e17b3e7fdd934a9a6cc14d71e Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 7 Aug 2024 01:07:49 +0000
Subject: [PATCH 015/273] chore(deps): update node docker tag to v22.6.0

---
 .docker-hub/print/Dockerfile                              | 4 ++--
 .../elasticsearch/remove-old-indexes/docker-compose.yml   | 2 +-
 .ops/ecamp3-logging/values.yaml                           | 2 +-
 docker-compose.yml                                        | 8 ++++----
 4 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/.docker-hub/print/Dockerfile b/.docker-hub/print/Dockerfile
index 3a6b8126c5..c310878d89 100644
--- a/.docker-hub/print/Dockerfile
+++ b/.docker-hub/print/Dockerfile
@@ -1,5 +1,5 @@
 # build stage
-FROM node:22.5.1 AS build-stage
+FROM node:22.6.0 AS build-stage
 ARG SENTRY_AUTH_TOKEN
 ARG SENTRY_ORG
 ARG SENTRY_PRINT_PROJECT
@@ -22,7 +22,7 @@ COPY print .
 RUN npm run build
 
 # production stage
-FROM node:22.5.1 AS production-stage
+FROM node:22.6.0 AS production-stage
 WORKDIR /app
 
 COPY --from=build-stage /app/.output ./.output
diff --git a/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml b/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml
index cb3ae73cb5..c3576be12c 100644
--- a/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml
+++ b/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml
@@ -1,6 +1,6 @@
 services:
   remove-old-indexes:
-    image: node:22.5.1
+    image: node:22.6.0
     volumes:
       - ./src:/src
     command:
diff --git a/.ops/ecamp3-logging/values.yaml b/.ops/ecamp3-logging/values.yaml
index d52d4450d4..5c5852b185 100644
--- a/.ops/ecamp3-logging/values.yaml
+++ b/.ops/ecamp3-logging/values.yaml
@@ -48,7 +48,7 @@ elasticsearch:
         storage: 10Gi
   removeOldIndexes:
     maxIndexAge: 15
-    image: node:22.5.1
+    image: node:22.6.0
 
 kibana:
   name: kibana
diff --git a/docker-compose.yml b/docker-compose.yml
index be2c1a9a31..45c94d55fb 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,6 +1,6 @@
 services:
   frontend:
-    image: node:22.5.1
+    image: node:22.6.0
     container_name: 'ecamp3-frontend'
     ports:
       - '9229:9229' # jest debug
@@ -91,7 +91,7 @@ services:
       - VARNISH_HTTP_PORT=8080
 
   pdf:
-    image: node:22.5.1
+    image: node:22.6.0
     container_name: 'ecamp3-pdf'
     stdin_open: true
     tty: true
@@ -110,7 +110,7 @@ services:
       - CI=${CI}
 
   print:
-    image: node:22.5.1
+    image: node:22.6.0
     container_name: 'ecamp3-print'
     user: ${USER_ID:-1000}
     volumes:
@@ -194,7 +194,7 @@ services:
     working_dir: /e2e
 
   translation:
-    image: node:22.5.1
+    image: node:22.6.0
     profiles: ['translation']
     container_name: 'ecamp3-translation'
     volumes:

From 3d6d8fcfc632c1ebce78df8bb72de604b87b2f50 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 7 Aug 2024 17:50:05 +0000
Subject: [PATCH 016/273] chore(deps): update dependency
 @tailwindcss/typography to v0.5.14

---
 print/package-lock.json | 8 ++++----
 print/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index b8f1b55c62..507a89967a 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -25,7 +25,7 @@
         "@nuxtjs/eslint-module": "4.1.0",
         "@nuxtjs/i18n": "8.3.3",
         "@nuxtjs/tailwindcss": "6.12.1",
-        "@tailwindcss/typography": "0.5.13",
+        "@tailwindcss/typography": "0.5.14",
         "@typescript-eslint/eslint-plugin": "7.18.0",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/compiler-dom": "3.4.36",
@@ -4454,9 +4454,9 @@
       }
     },
     "node_modules/@tailwindcss/typography": {
-      "version": "0.5.13",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.13.tgz",
-      "integrity": "sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw==",
+      "version": "0.5.14",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.14.tgz",
+      "integrity": "sha512-ZvOCjUbsJBjL9CxQBn+VEnFpouzuKhxh2dH8xMIWHILL+HfOYtlAkWcyoon8LlzE53d2Yo6YO6pahKKNW3q1YQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/print/package.json b/print/package.json
index d7316ad1f6..cc9d29715e 100644
--- a/print/package.json
+++ b/print/package.json
@@ -34,7 +34,7 @@
     "@nuxtjs/eslint-module": "4.1.0",
     "@nuxtjs/i18n": "8.3.3",
     "@nuxtjs/tailwindcss": "6.12.1",
-    "@tailwindcss/typography": "0.5.13",
+    "@tailwindcss/typography": "0.5.14",
     "@typescript-eslint/eslint-plugin": "7.18.0",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/compiler-dom": "3.4.36",

From 8b9624537440d2bd52169dc22bd648f3500ec1d1 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 7 Aug 2024 19:43:11 +0000
Subject: [PATCH 017/273] chore(deps): update dependency vite to v5.4.0

---
 frontend/package-lock.json | 14 +++++++++-----
 frontend/package.json      |  2 +-
 pdf/package-lock.json      | 14 +++++++++-----
 pdf/package.json           |  2 +-
 print/package-lock.json    |  8 ++++----
 print/package.json         |  2 +-
 6 files changed, 25 insertions(+), 17 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index dd1ba3348a..91b0b21bc4 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -99,7 +99,7 @@
         "prettier": "3.3.3",
         "sass": "1.32.13",
         "unplugin-vue-components": "0.27.3",
-        "vite": "5.3.5",
+        "vite": "5.4.0",
         "vite-plugin-comlink": "5.0.1",
         "vite-plugin-vue2-svg": "0.4.0",
         "vitest": "2.0.5",
@@ -12633,14 +12633,14 @@
       }
     },
     "node_modules/vite": {
-      "version": "5.3.5",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz",
-      "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==",
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz",
+      "integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
-        "postcss": "^8.4.39",
+        "postcss": "^8.4.40",
         "rollup": "^4.13.0"
       },
       "bin": {
@@ -12660,6 +12660,7 @@
         "less": "*",
         "lightningcss": "^1.21.0",
         "sass": "*",
+        "sass-embedded": "*",
         "stylus": "*",
         "sugarss": "*",
         "terser": "^5.4.0"
@@ -12677,6 +12678,9 @@
         "sass": {
           "optional": true
         },
+        "sass-embedded": {
+          "optional": true
+        },
         "stylus": {
           "optional": true
         },
diff --git a/frontend/package.json b/frontend/package.json
index f4477e2f20..a221786262 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -111,7 +111,7 @@
     "prettier": "3.3.3",
     "sass": "1.32.13",
     "unplugin-vue-components": "0.27.3",
-    "vite": "5.3.5",
+    "vite": "5.4.0",
     "vite-plugin-comlink": "5.0.1",
     "vite-plugin-vue2-svg": "0.4.0",
     "vitest": "2.0.5",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index 2a63be560f..9456e450f3 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -32,7 +32,7 @@
         "jsdom": "24.1.1",
         "prettier": "3.3.3",
         "url-template": "3.1.1",
-        "vite": "5.3.5",
+        "vite": "5.4.0",
         "vitest": "2.0.5"
       },
       "peerDependencies": {
@@ -7709,14 +7709,14 @@
       "license": "MIT"
     },
     "node_modules/vite": {
-      "version": "5.3.5",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz",
-      "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==",
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz",
+      "integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
-        "postcss": "^8.4.39",
+        "postcss": "^8.4.40",
         "rollup": "^4.13.0"
       },
       "bin": {
@@ -7736,6 +7736,7 @@
         "less": "*",
         "lightningcss": "^1.21.0",
         "sass": "*",
+        "sass-embedded": "*",
         "stylus": "*",
         "sugarss": "*",
         "terser": "^5.4.0"
@@ -7753,6 +7754,9 @@
         "sass": {
           "optional": true
         },
+        "sass-embedded": {
+          "optional": true
+        },
         "stylus": {
           "optional": true
         },
diff --git a/pdf/package.json b/pdf/package.json
index a6d00fd548..6ec538b0da 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -52,7 +52,7 @@
     "jsdom": "24.1.1",
     "prettier": "3.3.3",
     "url-template": "3.1.1",
-    "vite": "5.3.5",
+    "vite": "5.4.0",
     "vitest": "2.0.5"
   },
   "eslintConfig": {
diff --git a/print/package-lock.json b/print/package-lock.json
index 507a89967a..b8f1b55c62 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -25,7 +25,7 @@
         "@nuxtjs/eslint-module": "4.1.0",
         "@nuxtjs/i18n": "8.3.3",
         "@nuxtjs/tailwindcss": "6.12.1",
-        "@tailwindcss/typography": "0.5.14",
+        "@tailwindcss/typography": "0.5.13",
         "@typescript-eslint/eslint-plugin": "7.18.0",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/compiler-dom": "3.4.36",
@@ -4454,9 +4454,9 @@
       }
     },
     "node_modules/@tailwindcss/typography": {
-      "version": "0.5.14",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.14.tgz",
-      "integrity": "sha512-ZvOCjUbsJBjL9CxQBn+VEnFpouzuKhxh2dH8xMIWHILL+HfOYtlAkWcyoon8LlzE53d2Yo6YO6pahKKNW3q1YQ==",
+      "version": "0.5.13",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.13.tgz",
+      "integrity": "sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/print/package.json b/print/package.json
index cc9d29715e..d7316ad1f6 100644
--- a/print/package.json
+++ b/print/package.json
@@ -34,7 +34,7 @@
     "@nuxtjs/eslint-module": "4.1.0",
     "@nuxtjs/i18n": "8.3.3",
     "@nuxtjs/tailwindcss": "6.12.1",
-    "@tailwindcss/typography": "0.5.14",
+    "@tailwindcss/typography": "0.5.13",
     "@typescript-eslint/eslint-plugin": "7.18.0",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/compiler-dom": "3.4.36",

From 1a474dc4563d093eb05c9f3b9b04a49ec26f6327 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 7 Aug 2024 21:50:52 +0000
Subject: [PATCH 018/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.25

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 078f482844..75f9fec463 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.24
+    image: amazon/aws-cli:2.17.25
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From 1dc1e5081888d7a4b71c8198b7303caf913268cd Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 8 Aug 2024 00:31:38 +0000
Subject: [PATCH 019/273] chore(deps): update dependency
 @tailwindcss/typography to v0.5.14

---
 print/package-lock.json | 8 ++++----
 print/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index b8f1b55c62..507a89967a 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -25,7 +25,7 @@
         "@nuxtjs/eslint-module": "4.1.0",
         "@nuxtjs/i18n": "8.3.3",
         "@nuxtjs/tailwindcss": "6.12.1",
-        "@tailwindcss/typography": "0.5.13",
+        "@tailwindcss/typography": "0.5.14",
         "@typescript-eslint/eslint-plugin": "7.18.0",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/compiler-dom": "3.4.36",
@@ -4454,9 +4454,9 @@
       }
     },
     "node_modules/@tailwindcss/typography": {
-      "version": "0.5.13",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.13.tgz",
-      "integrity": "sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw==",
+      "version": "0.5.14",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.14.tgz",
+      "integrity": "sha512-ZvOCjUbsJBjL9CxQBn+VEnFpouzuKhxh2dH8xMIWHILL+HfOYtlAkWcyoon8LlzE53d2Yo6YO6pahKKNW3q1YQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/print/package.json b/print/package.json
index d7316ad1f6..cc9d29715e 100644
--- a/print/package.json
+++ b/print/package.json
@@ -34,7 +34,7 @@
     "@nuxtjs/eslint-module": "4.1.0",
     "@nuxtjs/i18n": "8.3.3",
     "@nuxtjs/tailwindcss": "6.12.1",
-    "@tailwindcss/typography": "0.5.13",
+    "@tailwindcss/typography": "0.5.14",
     "@typescript-eslint/eslint-plugin": "7.18.0",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/compiler-dom": "3.4.36",

From 2be6aebb2da89fe48200944fe85104b15dc9732c Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 8 Aug 2024 00:31:53 +0000
Subject: [PATCH 020/273] fix(deps): update dependency @pulumi/awsx to v2.14.0

---
 .ops/aws-setup/package-lock.json | 10 +++++-----
 .ops/aws-setup/package.json      |  2 +-
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index 0968510cc3..45441ee711 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -7,7 +7,7 @@
             "name": "ecamp-core",
             "dependencies": {
                 "@pulumi/aws": "6.48.0",
-                "@pulumi/awsx": "2.13.0",
+                "@pulumi/awsx": "2.14.0",
                 "@pulumi/pulumi": "3.128.0"
             },
             "devDependencies": {
@@ -2024,14 +2024,14 @@
             }
         },
         "node_modules/@pulumi/awsx": {
-            "version": "2.13.0",
-            "resolved": "https://registry.npmjs.org/@pulumi/awsx/-/awsx-2.13.0.tgz",
-            "integrity": "sha512-wmPw9dsS7H4wM2Qof4RjYIDX+jItFlmNRql2yE2exemHPqY/IJKotKlUh6eoqhIqXdwHNyV2N8bzX5lH/Cla6Q==",
+            "version": "2.14.0",
+            "resolved": "https://registry.npmjs.org/@pulumi/awsx/-/awsx-2.14.0.tgz",
+            "integrity": "sha512-vAv4qKT1vvFYDERR+IxjXiSikz20E8fRsWEg1xg5Hc7W9Go2WjsAXx9EgNtZrXr/dCNtHk3lQgOVdNmhrPnfCw==",
             "hasInstallScript": true,
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/client-ecs": "^3.405.0",
-                "@pulumi/aws": "^6.37.1",
+                "@pulumi/aws": "^6.47.0",
                 "@pulumi/docker": "^4.5.1",
                 "@pulumi/pulumi": "^3.0.0",
                 "@types/aws-lambda": "^8.10.23",
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index dde1ea6792..09f596788b 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -12,7 +12,7 @@
     "dependencies": {
         "@pulumi/pulumi": "3.128.0",
         "@pulumi/aws": "6.48.0",
-        "@pulumi/awsx": "2.13.0"
+        "@pulumi/awsx": "2.14.0"
     },
     "devDependencies": {
         "@babel/eslint-parser": "7.25.1",

From 1b99d2f993bca68e33c5203411a295f7e04fa293 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 8 Aug 2024 09:44:11 +0000
Subject: [PATCH 021/273] chore(deps): update dependency phpstan/phpstan to
 v1.11.10

---
 api/composer.json |  2 +-
 api/composer.lock | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 1a61aab86a..2ffea93110 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -56,7 +56,7 @@
         "justinrainbow/json-schema": "6.0.0",
         "php-coveralls/php-coveralls": "2.7.0",
         "phpspec/prophecy-phpunit": "2.2",
-        "phpstan/phpstan": "1.11.9",
+        "phpstan/phpstan": "1.11.10",
         "phpunit/phpunit": "10.5.29",
         "rector/rector": "1.2.2",
         "spatie/phpunit-snapshot-assertions": "5.1.6",
diff --git a/api/composer.lock b/api/composer.lock
index 60a2fdf760..5ef782f65a 100644
--- a/api/composer.lock
+++ b/api/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": "c43da401dbe408dede154e8b70c51bdd",
+    "content-hash": "a11d9b5b6b0a03df7f205d66f9667a9c",
     "packages": [
         {
             "name": "api-platform/core",
@@ -12076,16 +12076,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.9",
+            "version": "1.11.10",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "e370bcddadaede0c1716338b262346f40d296f82"
+                "reference": "640410b32995914bde3eed26fa89552f9c2c082f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e370bcddadaede0c1716338b262346f40d296f82",
-                "reference": "e370bcddadaede0c1716338b262346f40d296f82",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/640410b32995914bde3eed26fa89552f9c2c082f",
+                "reference": "640410b32995914bde3eed26fa89552f9c2c082f",
                 "shasum": ""
             },
             "require": {
@@ -12130,7 +12130,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-01T16:25:18+00:00"
+            "time": "2024-08-08T09:02:50+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",

From 1192586f6ccad63a52ce2a699cac755e5008d7db Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 8 Aug 2024 15:00:41 +0000
Subject: [PATCH 022/273] chore(deps): update vue-minor-print-pdf to v3.4.37

---
 pdf/package-lock.json   | 118 ++++++++++++++++++++--------------------
 pdf/package.json        |  12 ++--
 print/package-lock.json | 118 ++++++++++++++++++++--------------------
 print/package.json      |  12 ++--
 4 files changed, 130 insertions(+), 130 deletions(-)

diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index 9456e450f3..0da40d1a0f 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -6,7 +6,7 @@
     "": {
       "name": "@ecamp3/client-pdf",
       "dependencies": {
-        "@vue/runtime-core": "3.4.36",
+        "@vue/runtime-core": "3.4.37",
         "html-entities": "2.5.2",
         "html-parse-stringify": "3.0.1"
       },
@@ -17,12 +17,12 @@
         "@vitejs/plugin-vue": "5.1.2",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/babel-preset-app": "5.0.8",
-        "@vue/compiler-dom": "3.4.36",
-        "@vue/compiler-sfc": "3.4.36",
+        "@vue/compiler-dom": "3.4.37",
+        "@vue/compiler-sfc": "3.4.37",
         "@vue/eslint-config-prettier": "9.0.0",
-        "@vue/runtime-dom": "3.4.36",
-        "@vue/server-renderer": "3.4.36",
-        "@vue/shared": "3.4.36",
+        "@vue/runtime-dom": "3.4.37",
+        "@vue/server-renderer": "3.4.37",
+        "@vue/shared": "3.4.37",
         "@vue/test-utils": "2.4.6",
         "css": "3.0.0",
         "dayjs": "1.11.12",
@@ -3551,14 +3551,14 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.36.tgz",
-      "integrity": "sha512-qBkndgpwFKdupmOPoiS10i7oFdN7a+4UNDlezD0GlQ1kuA1pNrscg9g12HnB5E8hrWSuEftRsbJhL1HI2zpJhg==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.37.tgz",
+      "integrity": "sha512-ZDDT/KiLKuCRXyzWecNzC5vTcubGz4LECAtfGPENpo0nrmqJHwuWtRLxk/Sb9RAKtR9iFflFycbkjkY+W/PZUQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.24.7",
-        "@vue/shared": "3.4.36",
+        "@vue/shared": "3.4.37",
         "entities": "^5.0.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
@@ -3578,28 +3578,28 @@
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.36.tgz",
-      "integrity": "sha512-eEIjy4GwwZTFon/Y+WO8tRRNGqylaRlA79T1RLhUpkOzJ7EtZkkb8MurNfkqY6x6Qiu0R7ESspEF7GkPR/4yYg==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.37.tgz",
+      "integrity": "sha512-rIiSmL3YrntvgYV84rekAtU/xfogMUJIclUMeIKEtVBFngOL3IeZHhsH3UaFEgB5iFGpj6IW+8YuM/2Up+vVag==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.4.36",
-        "@vue/shared": "3.4.36"
+        "@vue/compiler-core": "3.4.37",
+        "@vue/shared": "3.4.37"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.36.tgz",
-      "integrity": "sha512-rhuHu7qztt/rNH90dXPTzhB7hLQT2OC4s4GrPVqmzVgPY4XBlfWmcWzn4bIPEWNImt0CjO7kfHAf/1UXOtx3vw==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.37.tgz",
+      "integrity": "sha512-vCfetdas40Wk9aK/WWf8XcVESffsbNkBQwS5t13Y/PcfqKfIwJX2gF+82th6dOpnpbptNMlMjAny80li7TaCIg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.24.7",
-        "@vue/compiler-core": "3.4.36",
-        "@vue/compiler-dom": "3.4.36",
-        "@vue/compiler-ssr": "3.4.36",
-        "@vue/shared": "3.4.36",
+        "@vue/compiler-core": "3.4.37",
+        "@vue/compiler-dom": "3.4.37",
+        "@vue/compiler-ssr": "3.4.37",
+        "@vue/shared": "3.4.37",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.10",
         "postcss": "^8.4.40",
@@ -3607,14 +3607,14 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.36.tgz",
-      "integrity": "sha512-Wt1zyheF0zVvRJyhY74uxQbnkXV2Le/JPOrAxooR4rFYKC7cFr+cRqW6RU3cM/bsTy7sdZ83IDuy/gLPSfPGng==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.37.tgz",
+      "integrity": "sha512-TyAgYBWrHlFrt4qpdACh8e9Ms6C/AZQ6A6xLJaWrCL8GCX5DxMzxyeFAEMfU/VFr4tylHm+a2NpfJpcd7+20XA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.4.36",
-        "@vue/shared": "3.4.36"
+        "@vue/compiler-dom": "3.4.37",
+        "@vue/shared": "3.4.37"
       }
     },
     "node_modules/@vue/eslint-config-prettier": {
@@ -3633,55 +3633,55 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.36.tgz",
-      "integrity": "sha512-wN1aoCwSoqrt1yt8wO0gc13QaC+Vk1o6AoSt584YHNnz6TGDhh1NCMUYgAnvp4HEIkLdGsaC1bvu/P+wpoDEXw==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.37.tgz",
+      "integrity": "sha512-UmdKXGx0BZ5kkxPqQr3PK3tElz6adTey4307NzZ3whZu19i5VavYal7u2FfOmAzlcDVgE8+X0HZ2LxLb/jgbYw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.4.36"
+        "@vue/shared": "3.4.37"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.36.tgz",
-      "integrity": "sha512-9+TR14LAVEerZWLOm/N/sG2DVYhrH2bKgFrbH/FVt/Q8Jdw4OtdcGMRC6Tx8VAo0DA1eqAqrZaX0fbOaOxxZ4A==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.37.tgz",
+      "integrity": "sha512-MNjrVoLV/sirHZoD7QAilU1Ifs7m/KJv4/84QVbE6nyAZGQNVOa1HGxaOzp9YqCG+GpLt1hNDC4RbH+KtanV7w==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.4.36",
-        "@vue/shared": "3.4.36"
+        "@vue/reactivity": "3.4.37",
+        "@vue/shared": "3.4.37"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.36.tgz",
-      "integrity": "sha512-2Qe2fKkLxgZBVvHrG0QMNLL4bsx7Ae88pyXebY2WnQYABpOnGYvA+axMbcF9QwM4yxnsv+aELbC0eiNVns7mGw==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.37.tgz",
+      "integrity": "sha512-Mg2EwgGZqtwKrqdL/FKMF2NEaOHuH+Ks9TQn3DHKyX//hQTYOun+7Tqp1eo0P4Ds+SjltZshOSRq6VsU0baaNg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.4.36",
-        "@vue/runtime-core": "3.4.36",
-        "@vue/shared": "3.4.36",
+        "@vue/reactivity": "3.4.37",
+        "@vue/runtime-core": "3.4.37",
+        "@vue/shared": "3.4.37",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.36.tgz",
-      "integrity": "sha512-2XW90Rq8+Y7S1EIsAuubZVLm0gCU8HYb5mRAruFdwfC3XSOU5/YKePz29csFzsch8hXaY5UHh7ZMddmi1XTJEA==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.37.tgz",
+      "integrity": "sha512-jZ5FAHDR2KBq2FsRUJW6GKDOAG9lUTX8aBEGq4Vf6B/35I9fPce66BornuwmqmKgfiSlecwuOb6oeoamYMohkg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.4.36",
-        "@vue/shared": "3.4.36"
+        "@vue/compiler-ssr": "3.4.37",
+        "@vue/shared": "3.4.37"
       },
       "peerDependencies": {
-        "vue": "3.4.36"
+        "vue": "3.4.37"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.36.tgz",
-      "integrity": "sha512-fdPLStwl1sDfYuUftBaUVn2pIrVFDASYerZSrlBvVBfylObPA1gtcWJHy5Ox8jLEJ524zBibss488Q3SZtU1uA==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.37.tgz",
+      "integrity": "sha512-nIh8P2fc3DflG8+5Uw8PT/1i17ccFn0xxN/5oE9RfV5SVnd7G0XEFRwakrnNFE/jlS95fpGXDVG5zDETS26nmg==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -7881,18 +7881,18 @@
       }
     },
     "node_modules/vue": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.36.tgz",
-      "integrity": "sha512-mIFvbLgjODfx3Iy1SrxOsiPpDb8Bo3EU+87ioimOZzZTOp15IEdAels70IjBOLO3ZFlLW5AhdwY4dWbXVQKYow==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.37.tgz",
+      "integrity": "sha512-3vXvNfkKTBsSJ7JP+LyR7GBuwQuckbWvuwAid3xbqK9ppsKt/DUvfqgZ48fgOLEfpy1IacL5f8QhUVl77RaI7A==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
-        "@vue/compiler-dom": "3.4.36",
-        "@vue/compiler-sfc": "3.4.36",
-        "@vue/runtime-dom": "3.4.36",
-        "@vue/server-renderer": "3.4.36",
-        "@vue/shared": "3.4.36"
+        "@vue/compiler-dom": "3.4.37",
+        "@vue/compiler-sfc": "3.4.37",
+        "@vue/runtime-dom": "3.4.37",
+        "@vue/server-renderer": "3.4.37",
+        "@vue/shared": "3.4.37"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/pdf/package.json b/pdf/package.json
index 6ec538b0da..58a0edffe2 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -17,7 +17,7 @@
     "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss}"
   },
   "dependencies": {
-    "@vue/runtime-core": "3.4.36",
+    "@vue/runtime-core": "3.4.37",
     "html-entities": "2.5.2",
     "html-parse-stringify": "3.0.1"
   },
@@ -37,12 +37,12 @@
     "@vitejs/plugin-vue": "5.1.2",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/babel-preset-app": "5.0.8",
-    "@vue/compiler-dom": "3.4.36",
-    "@vue/compiler-sfc": "3.4.36",
+    "@vue/compiler-dom": "3.4.37",
+    "@vue/compiler-sfc": "3.4.37",
     "@vue/eslint-config-prettier": "9.0.0",
-    "@vue/runtime-dom": "3.4.36",
-    "@vue/server-renderer": "3.4.36",
-    "@vue/shared": "3.4.36",
+    "@vue/runtime-dom": "3.4.37",
+    "@vue/server-renderer": "3.4.37",
+    "@vue/shared": "3.4.37",
     "@vue/test-utils": "2.4.6",
     "css": "3.0.0",
     "dayjs": "1.11.12",
diff --git a/print/package-lock.json b/print/package-lock.json
index b8f1b55c62..980edf910d 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -28,11 +28,11 @@
         "@tailwindcss/typography": "0.5.13",
         "@typescript-eslint/eslint-plugin": "7.18.0",
         "@vitest/coverage-v8": "2.0.5",
-        "@vue/compiler-dom": "3.4.36",
-        "@vue/compiler-sfc": "3.4.36",
-        "@vue/runtime-dom": "3.4.36",
-        "@vue/server-renderer": "3.4.36",
-        "@vue/shared": "3.4.36",
+        "@vue/compiler-dom": "3.4.37",
+        "@vue/compiler-sfc": "3.4.37",
+        "@vue/runtime-dom": "3.4.37",
+        "@vue/server-renderer": "3.4.37",
+        "@vue/shared": "3.4.37",
         "@vue/test-utils": "2.4.6",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
@@ -45,7 +45,7 @@
         "sass": "1.69.4",
         "vite-svg-loader": "5.1.0",
         "vitest": "2.0.5",
-        "vue": "3.4.36"
+        "vue": "3.4.37"
       }
     },
     "node_modules/@alloc/quick-lru": {
@@ -5443,13 +5443,13 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.36.tgz",
-      "integrity": "sha512-qBkndgpwFKdupmOPoiS10i7oFdN7a+4UNDlezD0GlQ1kuA1pNrscg9g12HnB5E8hrWSuEftRsbJhL1HI2zpJhg==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.37.tgz",
+      "integrity": "sha512-ZDDT/KiLKuCRXyzWecNzC5vTcubGz4LECAtfGPENpo0nrmqJHwuWtRLxk/Sb9RAKtR9iFflFycbkjkY+W/PZUQ==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.24.7",
-        "@vue/shared": "3.4.36",
+        "@vue/shared": "3.4.37",
         "entities": "^5.0.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
@@ -5474,26 +5474,26 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.36.tgz",
-      "integrity": "sha512-eEIjy4GwwZTFon/Y+WO8tRRNGqylaRlA79T1RLhUpkOzJ7EtZkkb8MurNfkqY6x6Qiu0R7ESspEF7GkPR/4yYg==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.37.tgz",
+      "integrity": "sha512-rIiSmL3YrntvgYV84rekAtU/xfogMUJIclUMeIKEtVBFngOL3IeZHhsH3UaFEgB5iFGpj6IW+8YuM/2Up+vVag==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.4.36",
-        "@vue/shared": "3.4.36"
+        "@vue/compiler-core": "3.4.37",
+        "@vue/shared": "3.4.37"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.36.tgz",
-      "integrity": "sha512-rhuHu7qztt/rNH90dXPTzhB7hLQT2OC4s4GrPVqmzVgPY4XBlfWmcWzn4bIPEWNImt0CjO7kfHAf/1UXOtx3vw==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.37.tgz",
+      "integrity": "sha512-vCfetdas40Wk9aK/WWf8XcVESffsbNkBQwS5t13Y/PcfqKfIwJX2gF+82th6dOpnpbptNMlMjAny80li7TaCIg==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.24.7",
-        "@vue/compiler-core": "3.4.36",
-        "@vue/compiler-dom": "3.4.36",
-        "@vue/compiler-ssr": "3.4.36",
-        "@vue/shared": "3.4.36",
+        "@vue/compiler-core": "3.4.37",
+        "@vue/compiler-dom": "3.4.37",
+        "@vue/compiler-ssr": "3.4.37",
+        "@vue/shared": "3.4.37",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.10",
         "postcss": "^8.4.40",
@@ -5507,13 +5507,13 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.36.tgz",
-      "integrity": "sha512-Wt1zyheF0zVvRJyhY74uxQbnkXV2Le/JPOrAxooR4rFYKC7cFr+cRqW6RU3cM/bsTy7sdZ83IDuy/gLPSfPGng==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.37.tgz",
+      "integrity": "sha512-TyAgYBWrHlFrt4qpdACh8e9Ms6C/AZQ6A6xLJaWrCL8GCX5DxMzxyeFAEMfU/VFr4tylHm+a2NpfJpcd7+20XA==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.4.36",
-        "@vue/shared": "3.4.36"
+        "@vue/compiler-dom": "3.4.37",
+        "@vue/shared": "3.4.37"
       }
     },
     "node_modules/@vue/devtools-api": {
@@ -5583,53 +5583,53 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.36.tgz",
-      "integrity": "sha512-wN1aoCwSoqrt1yt8wO0gc13QaC+Vk1o6AoSt584YHNnz6TGDhh1NCMUYgAnvp4HEIkLdGsaC1bvu/P+wpoDEXw==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.37.tgz",
+      "integrity": "sha512-UmdKXGx0BZ5kkxPqQr3PK3tElz6adTey4307NzZ3whZu19i5VavYal7u2FfOmAzlcDVgE8+X0HZ2LxLb/jgbYw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.4.36"
+        "@vue/shared": "3.4.37"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.36.tgz",
-      "integrity": "sha512-9+TR14LAVEerZWLOm/N/sG2DVYhrH2bKgFrbH/FVt/Q8Jdw4OtdcGMRC6Tx8VAo0DA1eqAqrZaX0fbOaOxxZ4A==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.37.tgz",
+      "integrity": "sha512-MNjrVoLV/sirHZoD7QAilU1Ifs7m/KJv4/84QVbE6nyAZGQNVOa1HGxaOzp9YqCG+GpLt1hNDC4RbH+KtanV7w==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.4.36",
-        "@vue/shared": "3.4.36"
+        "@vue/reactivity": "3.4.37",
+        "@vue/shared": "3.4.37"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.36.tgz",
-      "integrity": "sha512-2Qe2fKkLxgZBVvHrG0QMNLL4bsx7Ae88pyXebY2WnQYABpOnGYvA+axMbcF9QwM4yxnsv+aELbC0eiNVns7mGw==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.37.tgz",
+      "integrity": "sha512-Mg2EwgGZqtwKrqdL/FKMF2NEaOHuH+Ks9TQn3DHKyX//hQTYOun+7Tqp1eo0P4Ds+SjltZshOSRq6VsU0baaNg==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.4.36",
-        "@vue/runtime-core": "3.4.36",
-        "@vue/shared": "3.4.36",
+        "@vue/reactivity": "3.4.37",
+        "@vue/runtime-core": "3.4.37",
+        "@vue/shared": "3.4.37",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.36.tgz",
-      "integrity": "sha512-2XW90Rq8+Y7S1EIsAuubZVLm0gCU8HYb5mRAruFdwfC3XSOU5/YKePz29csFzsch8hXaY5UHh7ZMddmi1XTJEA==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.37.tgz",
+      "integrity": "sha512-jZ5FAHDR2KBq2FsRUJW6GKDOAG9lUTX8aBEGq4Vf6B/35I9fPce66BornuwmqmKgfiSlecwuOb6oeoamYMohkg==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.4.36",
-        "@vue/shared": "3.4.36"
+        "@vue/compiler-ssr": "3.4.37",
+        "@vue/shared": "3.4.37"
       },
       "peerDependencies": {
-        "vue": "3.4.36"
+        "vue": "3.4.37"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.36.tgz",
-      "integrity": "sha512-fdPLStwl1sDfYuUftBaUVn2pIrVFDASYerZSrlBvVBfylObPA1gtcWJHy5Ox8jLEJ524zBibss488Q3SZtU1uA==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.37.tgz",
+      "integrity": "sha512-nIh8P2fc3DflG8+5Uw8PT/1i17ccFn0xxN/5oE9RfV5SVnd7G0XEFRwakrnNFE/jlS95fpGXDVG5zDETS26nmg==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -18120,16 +18120,16 @@
       "license": "MIT"
     },
     "node_modules/vue": {
-      "version": "3.4.36",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.36.tgz",
-      "integrity": "sha512-mIFvbLgjODfx3Iy1SrxOsiPpDb8Bo3EU+87ioimOZzZTOp15IEdAels70IjBOLO3ZFlLW5AhdwY4dWbXVQKYow==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.37.tgz",
+      "integrity": "sha512-3vXvNfkKTBsSJ7JP+LyR7GBuwQuckbWvuwAid3xbqK9ppsKt/DUvfqgZ48fgOLEfpy1IacL5f8QhUVl77RaI7A==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.4.36",
-        "@vue/compiler-sfc": "3.4.36",
-        "@vue/runtime-dom": "3.4.36",
-        "@vue/server-renderer": "3.4.36",
-        "@vue/shared": "3.4.36"
+        "@vue/compiler-dom": "3.4.37",
+        "@vue/compiler-sfc": "3.4.37",
+        "@vue/runtime-dom": "3.4.37",
+        "@vue/server-renderer": "3.4.37",
+        "@vue/shared": "3.4.37"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/print/package.json b/print/package.json
index d7316ad1f6..8653d10be5 100644
--- a/print/package.json
+++ b/print/package.json
@@ -37,11 +37,11 @@
     "@tailwindcss/typography": "0.5.13",
     "@typescript-eslint/eslint-plugin": "7.18.0",
     "@vitest/coverage-v8": "2.0.5",
-    "@vue/compiler-dom": "3.4.36",
-    "@vue/compiler-sfc": "3.4.36",
-    "@vue/runtime-dom": "3.4.36",
-    "@vue/server-renderer": "3.4.36",
-    "@vue/shared": "3.4.36",
+    "@vue/compiler-dom": "3.4.37",
+    "@vue/compiler-sfc": "3.4.37",
+    "@vue/runtime-dom": "3.4.37",
+    "@vue/server-renderer": "3.4.37",
+    "@vue/shared": "3.4.37",
     "@vue/test-utils": "2.4.6",
     "eslint": "8.57.0",
     "eslint-config-prettier": "9.1.0",
@@ -54,7 +54,7 @@
     "sass": "1.69.4",
     "vitest": "2.0.5",
     "vite-svg-loader": "5.1.0",
-    "vue": "3.4.36"
+    "vue": "3.4.37"
   },
   "eslintConfig": {
     "root": true,

From 54daca026d82da4ec087a6d68a0704fb566f2394 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 8 Aug 2024 15:03:59 +0000
Subject: [PATCH 023/273] chore(deps): update dependency
 friendsofphp/php-cs-fixer to v3.62.0

---
 api/composer.json |  2 +-
 api/composer.lock | 14 +++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 2ffea93110..5afb926341 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -51,7 +51,7 @@
         "webonyx/graphql-php": "15.12.5"
     },
     "require-dev": {
-        "friendsofphp/php-cs-fixer": "3.61.1",
+        "friendsofphp/php-cs-fixer": "3.62.0",
         "hautelook/alice-bundle": "2.13.0",
         "justinrainbow/json-schema": "6.0.0",
         "php-coveralls/php-coveralls": "2.7.0",
diff --git a/api/composer.lock b/api/composer.lock
index 5ef782f65a..a4673b5fed 100644
--- a/api/composer.lock
+++ b/api/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": "a11d9b5b6b0a03df7f205d66f9667a9c",
+    "content-hash": "b584e17264b55347cbae3a1f67b14595",
     "packages": [
         {
             "name": "api-platform/core",
@@ -10988,16 +10988,16 @@
         },
         {
             "name": "friendsofphp/php-cs-fixer",
-            "version": "v3.61.1",
+            "version": "v3.62.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
-                "reference": "94a87189f55814e6cabca2d9a33b06de384a2ab8"
+                "reference": "627692f794d35c43483f34b01d94740df2a73507"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/94a87189f55814e6cabca2d9a33b06de384a2ab8",
-                "reference": "94a87189f55814e6cabca2d9a33b06de384a2ab8",
+                "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/627692f794d35c43483f34b01d94740df2a73507",
+                "reference": "627692f794d35c43483f34b01d94740df2a73507",
                 "shasum": ""
             },
             "require": {
@@ -11079,7 +11079,7 @@
             ],
             "support": {
                 "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
-                "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.61.1"
+                "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.62.0"
             },
             "funding": [
                 {
@@ -11087,7 +11087,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-07-31T14:33:15+00:00"
+            "time": "2024-08-07T17:03:09+00:00"
         },
         {
             "name": "hautelook/alice-bundle",

From c5d2e9f5a6a611d9e96ecd4ff667bd1bdd234947 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 8 Aug 2024 18:21:28 +0000
Subject: [PATCH 024/273] fix(deps): update dependency twig/cssinliner-extra to
 v3.11.0

---
 api/composer.lock | 27 ++++++++++++++-------------
 1 file changed, 14 insertions(+), 13 deletions(-)

diff --git a/api/composer.lock b/api/composer.lock
index 5ef782f65a..2530ca1492 100644
--- a/api/composer.lock
+++ b/api/composer.lock
@@ -9733,16 +9733,16 @@
         },
         {
             "name": "twig/cssinliner-extra",
-            "version": "v3.10.0",
+            "version": "v3.11.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/twigphp/cssinliner-extra.git",
-                "reference": "10e88e9a887b646c58e3d670383208f15295dd22"
+                "reference": "7312a0275812b86918febb4b7a67d0cb084c5d02"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/10e88e9a887b646c58e3d670383208f15295dd22",
-                "reference": "10e88e9a887b646c58e3d670383208f15295dd22",
+                "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/7312a0275812b86918febb4b7a67d0cb084c5d02",
+                "reference": "7312a0275812b86918febb4b7a67d0cb084c5d02",
                 "shasum": ""
             },
             "require": {
@@ -9786,7 +9786,7 @@
                 "twig"
             ],
             "support": {
-                "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.10.0"
+                "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.11.0"
             },
             "funding": [
                 {
@@ -9798,7 +9798,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-05-11T07:35:57+00:00"
+            "time": "2024-06-21T06:22:31+00:00"
         },
         {
             "name": "twig/extra-bundle",
@@ -9876,16 +9876,16 @@
         },
         {
             "name": "twig/twig",
-            "version": "v3.10.3",
+            "version": "v3.11.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/twigphp/Twig.git",
-                "reference": "67f29781ffafa520b0bbfbd8384674b42db04572"
+                "reference": "e80fb8ebba85c7341a97a9ebf825d7fd4b77708d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/Twig/zipball/67f29781ffafa520b0bbfbd8384674b42db04572",
-                "reference": "67f29781ffafa520b0bbfbd8384674b42db04572",
+                "url": "https://api.github.com/repos/twigphp/Twig/zipball/e80fb8ebba85c7341a97a9ebf825d7fd4b77708d",
+                "reference": "e80fb8ebba85c7341a97a9ebf825d7fd4b77708d",
                 "shasum": ""
             },
             "require": {
@@ -9893,7 +9893,8 @@
                 "symfony/deprecation-contracts": "^2.5|^3",
                 "symfony/polyfill-ctype": "^1.8",
                 "symfony/polyfill-mbstring": "^1.3",
-                "symfony/polyfill-php80": "^1.22"
+                "symfony/polyfill-php80": "^1.22",
+                "symfony/polyfill-php81": "^1.29"
             },
             "require-dev": {
                 "psr/container": "^1.0|^2.0",
@@ -9939,7 +9940,7 @@
             ],
             "support": {
                 "issues": "https://github.com/twigphp/Twig/issues",
-                "source": "https://github.com/twigphp/Twig/tree/v3.10.3"
+                "source": "https://github.com/twigphp/Twig/tree/v3.11.0"
             },
             "funding": [
                 {
@@ -9951,7 +9952,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-05-16T10:04:27+00:00"
+            "time": "2024-08-08T16:15:16+00:00"
         },
         {
             "name": "webmozart/assert",

From 4604743ba7f64ea11c8f0ccb367452e9d3f59c38 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 8 Aug 2024 18:21:39 +0000
Subject: [PATCH 025/273] fix(deps): update dependency twig/extra-bundle to
 v3.11.0

---
 api/composer.lock | 27 ++++++++++++++-------------
 1 file changed, 14 insertions(+), 13 deletions(-)

diff --git a/api/composer.lock b/api/composer.lock
index 5ef782f65a..0be7451582 100644
--- a/api/composer.lock
+++ b/api/composer.lock
@@ -9802,16 +9802,16 @@
         },
         {
             "name": "twig/extra-bundle",
-            "version": "v3.10.0",
+            "version": "v3.11.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/twigphp/twig-extra-bundle.git",
-                "reference": "cdc6e23aeb7f4953c1039568c3439aab60c56454"
+                "reference": "bf8a304eac15838d7724fdf64c345bdefbb75f03"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/cdc6e23aeb7f4953c1039568c3439aab60c56454",
-                "reference": "cdc6e23aeb7f4953c1039568c3439aab60c56454",
+                "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/bf8a304eac15838d7724fdf64c345bdefbb75f03",
+                "reference": "bf8a304eac15838d7724fdf64c345bdefbb75f03",
                 "shasum": ""
             },
             "require": {
@@ -9860,7 +9860,7 @@
                 "twig"
             ],
             "support": {
-                "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.10.0"
+                "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.11.0"
             },
             "funding": [
                 {
@@ -9872,20 +9872,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-05-11T07:35:57+00:00"
+            "time": "2024-06-21T06:25:01+00:00"
         },
         {
             "name": "twig/twig",
-            "version": "v3.10.3",
+            "version": "v3.11.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/twigphp/Twig.git",
-                "reference": "67f29781ffafa520b0bbfbd8384674b42db04572"
+                "reference": "e80fb8ebba85c7341a97a9ebf825d7fd4b77708d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/Twig/zipball/67f29781ffafa520b0bbfbd8384674b42db04572",
-                "reference": "67f29781ffafa520b0bbfbd8384674b42db04572",
+                "url": "https://api.github.com/repos/twigphp/Twig/zipball/e80fb8ebba85c7341a97a9ebf825d7fd4b77708d",
+                "reference": "e80fb8ebba85c7341a97a9ebf825d7fd4b77708d",
                 "shasum": ""
             },
             "require": {
@@ -9893,7 +9893,8 @@
                 "symfony/deprecation-contracts": "^2.5|^3",
                 "symfony/polyfill-ctype": "^1.8",
                 "symfony/polyfill-mbstring": "^1.3",
-                "symfony/polyfill-php80": "^1.22"
+                "symfony/polyfill-php80": "^1.22",
+                "symfony/polyfill-php81": "^1.29"
             },
             "require-dev": {
                 "psr/container": "^1.0|^2.0",
@@ -9939,7 +9940,7 @@
             ],
             "support": {
                 "issues": "https://github.com/twigphp/Twig/issues",
-                "source": "https://github.com/twigphp/Twig/tree/v3.10.3"
+                "source": "https://github.com/twigphp/Twig/tree/v3.11.0"
             },
             "funding": [
                 {
@@ -9951,7 +9952,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-05-16T10:04:27+00:00"
+            "time": "2024-08-08T16:15:16+00:00"
         },
         {
             "name": "webmozart/assert",

From af0d92d525527635e20e900d4b646a5d6df75e85 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 8 Aug 2024 22:40:19 +0000
Subject: [PATCH 026/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.26

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 75f9fec463..2a8457e9a3 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.25
+    image: amazon/aws-cli:2.17.26
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From 248305cf5cc1bffd88544ab2154cb87402b395ba Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 9 Aug 2024 09:48:32 +0000
Subject: [PATCH 027/273] fix(deps): update sentry-javascript monorepo to
 v8.25.0

---
 frontend/package-lock.json | 114 ++++++++++++++++++-------------------
 frontend/package.json      |   4 +-
 print/package-lock.json    |  52 ++++++++---------
 print/package.json         |   2 +-
 4 files changed, 86 insertions(+), 86 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 91b0b21bc4..7f1dce1cab 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -14,8 +14,8 @@
         "@react-pdf/pdfkit": "3.1.10",
         "@react-pdf/primitives": "3.1.1",
         "@react-pdf/render": "3.4.4",
-        "@sentry/browser": "8.24.0",
-        "@sentry/vue": "8.24.0",
+        "@sentry/browser": "8.25.0",
+        "@sentry/vue": "8.25.0",
         "@tiptap/extension-bold": "2.5.9",
         "@tiptap/extension-bubble-menu": "2.5.9",
         "@tiptap/extension-bullet-list": "2.5.9",
@@ -3240,58 +3240,58 @@
       ]
     },
     "node_modules/@sentry-internal/browser-utils": {
-      "version": "8.24.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.24.0.tgz",
-      "integrity": "sha512-U5dVZ4JM+UeN3YWBUHZcNLF038C3ccTTsTICIw+zfCQbpPhPms8DOEDVpd0So18XoNDzYmLo07hC1BwByRAfGw==",
+      "version": "8.25.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.25.0.tgz",
+      "integrity": "sha512-nlWgp1lVhNQOTUplW85G3qm0fOIgAhJ/sl/31OIuScVrITYhYDF2bO+Zv/jQ8YsdUBAUXqY1tPT9wwPJklnPhw==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/core": "8.24.0",
-        "@sentry/types": "8.24.0",
-        "@sentry/utils": "8.24.0"
+        "@sentry/core": "8.25.0",
+        "@sentry/types": "8.25.0",
+        "@sentry/utils": "8.25.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry-internal/feedback": {
-      "version": "8.24.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.24.0.tgz",
-      "integrity": "sha512-0tWRp8SOSTSPTViRJnB6+HHixFgkEWjKPciuLsAZkobRhi+VVedPj3zVztORy5AvARGr6AgyVSdnviilcrKl6g==",
+      "version": "8.25.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.25.0.tgz",
+      "integrity": "sha512-327I5XJAFrsgjc5qUKxZ9rff3WNCfGvf1fIii70LQ2YQhQgG4XHZILmkD06ETEyXb+H1tkrNQQEJ1/d4ai+q5g==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/core": "8.24.0",
-        "@sentry/types": "8.24.0",
-        "@sentry/utils": "8.24.0"
+        "@sentry/core": "8.25.0",
+        "@sentry/types": "8.25.0",
+        "@sentry/utils": "8.25.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry-internal/replay": {
-      "version": "8.24.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.24.0.tgz",
-      "integrity": "sha512-+3d+3Ln7iDOZo2wOBv7EWojVHigEskjKsz8vR3WFdxYyue8e3zPQ/xg/t9A6BtEVRPQsEyhM3oN6LyjqFv2nfg==",
+      "version": "8.25.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.25.0.tgz",
+      "integrity": "sha512-3f7x8EYthyj157uV9V8vBjun+1gJnHhh2+i0qxYLhMGx7N2Fq0J3Bvvo1rosSg+fYh5HzPNZDufwIRdg5C/MQw==",
       "license": "MIT",
       "dependencies": {
-        "@sentry-internal/browser-utils": "8.24.0",
-        "@sentry/core": "8.24.0",
-        "@sentry/types": "8.24.0",
-        "@sentry/utils": "8.24.0"
+        "@sentry-internal/browser-utils": "8.25.0",
+        "@sentry/core": "8.25.0",
+        "@sentry/types": "8.25.0",
+        "@sentry/utils": "8.25.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry-internal/replay-canvas": {
-      "version": "8.24.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.24.0.tgz",
-      "integrity": "sha512-MI+j9tUab1d5oer2xKQ2lxdXSzBeZ1DF2dwlVxQDOfSAQqRfZJpmLcmSPb6M+GJsf2xHg6n4dAQvWQuM0qGQPQ==",
+      "version": "8.25.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.25.0.tgz",
+      "integrity": "sha512-dPXlkAbkFL1DBum8rGTaHS+apJKaXEZJF9gLcBBKTruhTCizrugFLxajzIfVSiFVuwNKuJWa2fzhzbeQM0ee7w==",
       "license": "MIT",
       "dependencies": {
-        "@sentry-internal/replay": "8.24.0",
-        "@sentry/core": "8.24.0",
-        "@sentry/types": "8.24.0",
-        "@sentry/utils": "8.24.0"
+        "@sentry-internal/replay": "8.25.0",
+        "@sentry/core": "8.25.0",
+        "@sentry/types": "8.25.0",
+        "@sentry/utils": "8.25.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3308,18 +3308,18 @@
       }
     },
     "node_modules/@sentry/browser": {
-      "version": "8.24.0",
-      "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.24.0.tgz",
-      "integrity": "sha512-WdCLUoMAE0ZWsZDb3G/FQI5YgkH59VVEpnPqrWI08m2KuqLz8eU724JZvNzaDv/L2yzksgS4HDDUXkNRzDeCrQ==",
+      "version": "8.25.0",
+      "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.25.0.tgz",
+      "integrity": "sha512-51bdVGXjyooqVGzaSGsnExqRTt9NvZ1zGFsxbbCSXi5UoEFN6zdMUz6jKYsL2K80eeELP2VKOVlobHlEzeJQfw==",
       "license": "MIT",
       "dependencies": {
-        "@sentry-internal/browser-utils": "8.24.0",
-        "@sentry-internal/feedback": "8.24.0",
-        "@sentry-internal/replay": "8.24.0",
-        "@sentry-internal/replay-canvas": "8.24.0",
-        "@sentry/core": "8.24.0",
-        "@sentry/types": "8.24.0",
-        "@sentry/utils": "8.24.0"
+        "@sentry-internal/browser-utils": "8.25.0",
+        "@sentry-internal/feedback": "8.25.0",
+        "@sentry-internal/replay": "8.25.0",
+        "@sentry-internal/replay-canvas": "8.25.0",
+        "@sentry/core": "8.25.0",
+        "@sentry/types": "8.25.0",
+        "@sentry/utils": "8.25.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3498,34 +3498,34 @@
       }
     },
     "node_modules/@sentry/core": {
-      "version": "8.24.0",
-      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.24.0.tgz",
-      "integrity": "sha512-nyy7po78Ef5KNzehHJCCyLGGR/FceHyw2IRzDQUVD6M4tos8G1OML1gcnALChWhyeq1SIoDsC1ofxFlbkIWuog==",
+      "version": "8.25.0",
+      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.25.0.tgz",
+      "integrity": "sha512-7KtglbrW1eX4DOHkf6i4rRIExEf2CgtQ99qZ8gn5FUaAmNMg0rK7bb1yZMx0RZtp5G1TSz/S0jQQgxHWebaEig==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.24.0",
-        "@sentry/utils": "8.24.0"
+        "@sentry/types": "8.25.0",
+        "@sentry/utils": "8.25.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/types": {
-      "version": "8.24.0",
-      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.24.0.tgz",
-      "integrity": "sha512-5QWXARoFrvTvnS19ip+ha0x4nWIv/RvoCTnqCsgrNTjypbk1+KMSMQQhGMo8OuEBFhdGyTs1BqfxVV82URHh3w==",
+      "version": "8.25.0",
+      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.25.0.tgz",
+      "integrity": "sha512-ojim0gDcRhGJPguYrtms4FsprX4xZz3LGNk9Z0hwTbSVEdlhQIInsQ7CYcdM3sjUs+qT7kfpxTRZGUeZNRRJcA==",
       "license": "MIT",
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/utils": {
-      "version": "8.24.0",
-      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.24.0.tgz",
-      "integrity": "sha512-AGo5PldxCJYn3g0IYXeBkeALNa+NieJaaCDpYyzrKAFdxoA6Qp+Z/wmN9m5BYZ9eHx9N+xMOoz2aIh4hG48VbQ==",
+      "version": "8.25.0",
+      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.25.0.tgz",
+      "integrity": "sha512-mVlkV7S62ZZ2jM38/kOwWx2xoW8fUv2cjw2IwFKoAIPyLBh3mo1WJtvfdtN/rXGjQWZJBKW53EWaWnD00rkjyA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.24.0"
+        "@sentry/types": "8.25.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3546,15 +3546,15 @@
       }
     },
     "node_modules/@sentry/vue": {
-      "version": "8.24.0",
-      "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-8.24.0.tgz",
-      "integrity": "sha512-a75tkByrVk4pMFWuE6xVGg4hpbV1IBzi4UqB0DpNVrVqmd+4sjHSFL1NrvjWV4oKAuhYwKCSVPfsniyoP612sQ==",
+      "version": "8.25.0",
+      "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-8.25.0.tgz",
+      "integrity": "sha512-ztT1pNYQY1sujIZT6JYKTNh7Ms3K4SIUeriWVBtU1p8mU6shhy2TA3Q2OsgXdkL/nEMok9zq+Ff3iT9XuyzbWA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/browser": "8.24.0",
-        "@sentry/core": "8.24.0",
-        "@sentry/types": "8.24.0",
-        "@sentry/utils": "8.24.0"
+        "@sentry/browser": "8.25.0",
+        "@sentry/core": "8.25.0",
+        "@sentry/types": "8.25.0",
+        "@sentry/utils": "8.25.0"
       },
       "engines": {
         "node": ">=14.18"
diff --git a/frontend/package.json b/frontend/package.json
index a221786262..810c31c973 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -26,8 +26,8 @@
     "@react-pdf/pdfkit": "3.1.10",
     "@react-pdf/primitives": "3.1.1",
     "@react-pdf/render": "3.4.4",
-    "@sentry/browser": "8.24.0",
-    "@sentry/vue": "8.24.0",
+    "@sentry/browser": "8.25.0",
+    "@sentry/vue": "8.25.0",
     "@tiptap/extension-bold": "2.5.9",
     "@tiptap/extension-bubble-menu": "2.5.9",
     "@tiptap/extension-bullet-list": "2.5.9",
diff --git a/print/package-lock.json b/print/package-lock.json
index 980edf910d..23066026aa 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -8,7 +8,7 @@
       "dependencies": {
         "@jamescoyle/vue-icon": "0.1.2",
         "@mdi/js": "7.4.47",
-        "@sentry/node": "8.24.0",
+        "@sentry/node": "8.25.0",
         "axios": "1.7.3",
         "colorjs.io": "0.5.2",
         "dayjs": "1.11.12",
@@ -3978,22 +3978,22 @@
       "license": "MIT"
     },
     "node_modules/@sentry/core": {
-      "version": "8.24.0",
-      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.24.0.tgz",
-      "integrity": "sha512-nyy7po78Ef5KNzehHJCCyLGGR/FceHyw2IRzDQUVD6M4tos8G1OML1gcnALChWhyeq1SIoDsC1ofxFlbkIWuog==",
+      "version": "8.25.0",
+      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.25.0.tgz",
+      "integrity": "sha512-7KtglbrW1eX4DOHkf6i4rRIExEf2CgtQ99qZ8gn5FUaAmNMg0rK7bb1yZMx0RZtp5G1TSz/S0jQQgxHWebaEig==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.24.0",
-        "@sentry/utils": "8.24.0"
+        "@sentry/types": "8.25.0",
+        "@sentry/utils": "8.25.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/node": {
-      "version": "8.24.0",
-      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.24.0.tgz",
-      "integrity": "sha512-BKemIyeUyitsO52VEYlJTkIpaJELNi5xYHzMTG60N+JxNs+ytNaDMeS9cDVXXKY1LD9oG+vlqp6RQVT4LfieNw==",
+      "version": "8.25.0",
+      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.25.0.tgz",
+      "integrity": "sha512-KFeJpYU/7CKi/v8D72ztniA+QqH0yBv2wzEP0PUe3DWZ/Fwl0OQSVWNNuDfJBQUvk3NrytCH5A6klZjU0/rwlw==",
       "license": "MIT",
       "dependencies": {
         "@opentelemetry/api": "^1.9.0",
@@ -4019,10 +4019,10 @@
         "@opentelemetry/sdk-trace-base": "^1.25.1",
         "@opentelemetry/semantic-conventions": "^1.25.1",
         "@prisma/instrumentation": "5.17.0",
-        "@sentry/core": "8.24.0",
-        "@sentry/opentelemetry": "8.24.0",
-        "@sentry/types": "8.24.0",
-        "@sentry/utils": "8.24.0",
+        "@sentry/core": "8.25.0",
+        "@sentry/opentelemetry": "8.25.0",
+        "@sentry/types": "8.25.0",
+        "@sentry/utils": "8.25.0",
         "import-in-the-middle": "^1.11.0"
       },
       "engines": {
@@ -4033,14 +4033,14 @@
       }
     },
     "node_modules/@sentry/opentelemetry": {
-      "version": "8.24.0",
-      "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.24.0.tgz",
-      "integrity": "sha512-Qiixv3v7x6ZZT5C9VDhoayxOcA5i18Paie8MegejwWRpZwWK28OQiP9MhZQQtstzNSDsw2+9/+K9r6gWf/kJMQ==",
+      "version": "8.25.0",
+      "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.25.0.tgz",
+      "integrity": "sha512-6g4TXwQMHtvmlu2i1OKqvFD2W2RTrGBxDtJ1tBQmqCfHKyiqQ37gy6AozuwrQ3po1KKbawaQGIFNEzb4wnSrfA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/core": "8.24.0",
-        "@sentry/types": "8.24.0",
-        "@sentry/utils": "8.24.0"
+        "@sentry/core": "8.25.0",
+        "@sentry/types": "8.25.0",
+        "@sentry/utils": "8.25.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -4054,21 +4054,21 @@
       }
     },
     "node_modules/@sentry/types": {
-      "version": "8.24.0",
-      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.24.0.tgz",
-      "integrity": "sha512-5QWXARoFrvTvnS19ip+ha0x4nWIv/RvoCTnqCsgrNTjypbk1+KMSMQQhGMo8OuEBFhdGyTs1BqfxVV82URHh3w==",
+      "version": "8.25.0",
+      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.25.0.tgz",
+      "integrity": "sha512-ojim0gDcRhGJPguYrtms4FsprX4xZz3LGNk9Z0hwTbSVEdlhQIInsQ7CYcdM3sjUs+qT7kfpxTRZGUeZNRRJcA==",
       "license": "MIT",
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/utils": {
-      "version": "8.24.0",
-      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.24.0.tgz",
-      "integrity": "sha512-AGo5PldxCJYn3g0IYXeBkeALNa+NieJaaCDpYyzrKAFdxoA6Qp+Z/wmN9m5BYZ9eHx9N+xMOoz2aIh4hG48VbQ==",
+      "version": "8.25.0",
+      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.25.0.tgz",
+      "integrity": "sha512-mVlkV7S62ZZ2jM38/kOwWx2xoW8fUv2cjw2IwFKoAIPyLBh3mo1WJtvfdtN/rXGjQWZJBKW53EWaWnD00rkjyA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.24.0"
+        "@sentry/types": "8.25.0"
       },
       "engines": {
         "node": ">=14.18"
diff --git a/print/package.json b/print/package.json
index 8653d10be5..6374a71b02 100644
--- a/print/package.json
+++ b/print/package.json
@@ -17,7 +17,7 @@
   "dependencies": {
     "@jamescoyle/vue-icon": "0.1.2",
     "@mdi/js": "7.4.47",
-    "@sentry/node": "8.24.0",
+    "@sentry/node": "8.25.0",
     "axios": "1.7.3",
     "colorjs.io": "0.5.2",
     "dayjs": "1.11.12",

From e811d8c289b26f4bd1950f2d88f79f9f5cda391b Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 9 Aug 2024 20:25:02 +0000
Subject: [PATCH 028/273] chore(deps): update dependency @types/node to
 v20.14.15

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index 45441ee711..6b4c671d22 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -12,7 +12,7 @@
             },
             "devDependencies": {
                 "@babel/eslint-parser": "7.25.1",
-                "@types/node": "20.14.14",
+                "@types/node": "20.14.15",
                 "eslint": "8.57.0",
                 "eslint-config-prettier": "9.1.0",
                 "eslint-plugin-import": "2.29.1",
@@ -2862,9 +2862,9 @@
             }
         },
         "node_modules/@types/node": {
-            "version": "20.14.14",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.14.tgz",
-            "integrity": "sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==",
+            "version": "20.14.15",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.15.tgz",
+            "integrity": "sha512-Fz1xDMCF/B00/tYSVMlmK7hVeLh7jE5f3B7X1/hmV0MJBwE27KlS7EvD/Yp+z1lm8mVhwV5w+n8jOZG8AfTlKw==",
             "license": "MIT",
             "dependencies": {
                 "undici-types": "~5.26.4"
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 09f596788b..7d8845d046 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -16,7 +16,7 @@
     },
     "devDependencies": {
         "@babel/eslint-parser": "7.25.1",
-        "@types/node": "20.14.14",
+        "@types/node": "20.14.15",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
         "eslint-plugin-import": "2.29.1",

From 6f2de0f62c915b023214564b11aaf5b5fbb75275 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 9 Aug 2024 20:25:10 +0000
Subject: [PATCH 029/273] chore(deps): update dependency @eslint/js to v9.9.0

---
 e2e/package-lock.json | 8 ++++----
 e2e/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/e2e/package-lock.json b/e2e/package-lock.json
index a3135f13a6..899ccd8ba4 100644
--- a/e2e/package-lock.json
+++ b/e2e/package-lock.json
@@ -8,7 +8,7 @@
       "devDependencies": {
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.8.0",
+        "@eslint/js": "9.9.0",
         "cypress": "13.13.2",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
@@ -154,9 +154,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.8.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.8.0.tgz",
-      "integrity": "sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==",
+      "version": "9.9.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.0.tgz",
+      "integrity": "sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/e2e/package.json b/e2e/package.json
index e2612b87f8..b774529d85 100644
--- a/e2e/package.json
+++ b/e2e/package.json
@@ -14,7 +14,7 @@
   "devDependencies": {
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
-    "@eslint/js": "9.8.0",
+    "@eslint/js": "9.9.0",
     "cypress": "13.13.2",
     "eslint": "8.57.0",
     "eslint-config-prettier": "9.1.0",

From 1ba6fa6a88702b6864cbdb7670a480f3bb8b5865 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 9 Aug 2024 23:39:40 +0000
Subject: [PATCH 030/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.27

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 2a8457e9a3..4286557a84 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.26
+    image: amazon/aws-cli:2.17.27
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From 7d38a8df9d1784901eb5ee3244b5079f29ebdb3b Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 12 Aug 2024 13:20:12 +0000
Subject: [PATCH 031/273] chore(deps): update dependency
 unplugin-vue-components to v0.27.4

---
 frontend/package-lock.json | 20 ++++++++++----------
 frontend/package.json      |  2 +-
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 7f1dce1cab..06361370d8 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -98,7 +98,7 @@
         "lint-staged": "15.2.8",
         "prettier": "3.3.3",
         "sass": "1.32.13",
-        "unplugin-vue-components": "0.27.3",
+        "unplugin-vue-components": "0.27.4",
         "vite": "5.4.0",
         "vite-plugin-comlink": "5.0.1",
         "vite-plugin-vue2-svg": "0.4.0",
@@ -12389,22 +12389,22 @@
       }
     },
     "node_modules/unplugin-vue-components": {
-      "version": "0.27.3",
-      "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.27.3.tgz",
-      "integrity": "sha512-5wg7lbdg5ZcrAQNzyYK+6gcg/DG8K6rO+f5YeuvqGHs/PhpapBvpA4O/0ex/pFthE5WgRk43iWuRZEMLVsdz4Q==",
+      "version": "0.27.4",
+      "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.27.4.tgz",
+      "integrity": "sha512-1XVl5iXG7P1UrOMnaj2ogYa5YTq8aoh5jwDPQhemwO/OrXW+lPQKDXd1hMz15qxQPxgb/XXlbgo3HQ2rLEbmXQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@antfu/utils": "^0.7.10",
         "@rollup/pluginutils": "^5.1.0",
         "chokidar": "^3.6.0",
-        "debug": "^4.3.5",
+        "debug": "^4.3.6",
         "fast-glob": "^3.3.2",
         "local-pkg": "^0.5.0",
-        "magic-string": "^0.30.10",
+        "magic-string": "^0.30.11",
         "minimatch": "^9.0.5",
         "mlly": "^1.7.1",
-        "unplugin": "^1.11.0"
+        "unplugin": "^1.12.1"
       },
       "engines": {
         "node": ">=14"
@@ -12463,9 +12463,9 @@
       }
     },
     "node_modules/unplugin-vue-components/node_modules/unplugin": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.0.tgz",
-      "integrity": "sha512-KeczzHl2sATPQUx1gzo+EnUkmN4VmGBYRRVOZSGvGITE9rGHRDGqft6ONceP3vgXcyJ2XjX5axG5jMWUwNCYLw==",
+      "version": "1.12.1",
+      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.1.tgz",
+      "integrity": "sha512-aXEH9c5qi3uYZHo0niUtxDlT9ylG/luMW/dZslSCkbtC31wCyFkmM0kyoBBh+Grhn7CL+/kvKLfN61/EdxPxMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/frontend/package.json b/frontend/package.json
index 810c31c973..ac02663650 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -110,7 +110,7 @@
     "lint-staged": "15.2.8",
     "prettier": "3.3.3",
     "sass": "1.32.13",
-    "unplugin-vue-components": "0.27.3",
+    "unplugin-vue-components": "0.27.4",
     "vite": "5.4.0",
     "vite-plugin-comlink": "5.0.1",
     "vite-plugin-vue2-svg": "0.4.0",

From 9db8bb018bf79bcc508cda38399d10c0cfe64ff2 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 12 Aug 2024 17:13:37 +0000
Subject: [PATCH 032/273] chore(deps): update dependency rector/rector to
 v1.2.3

---
 api/composer.json |  2 +-
 api/composer.lock | 16 ++++++++--------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 5afb926341..487ec4b414 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -58,7 +58,7 @@
         "phpspec/prophecy-phpunit": "2.2",
         "phpstan/phpstan": "1.11.10",
         "phpunit/phpunit": "10.5.29",
-        "rector/rector": "1.2.2",
+        "rector/rector": "1.2.3",
         "spatie/phpunit-snapshot-assertions": "5.1.6",
         "symfony/browser-kit": "7.1.1",
         "symfony/css-selector": "7.1.1",
diff --git a/api/composer.lock b/api/composer.lock
index c20dee0d9c..e2d596dd2f 100644
--- a/api/composer.lock
+++ b/api/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": "b584e17264b55347cbae3a1f67b14595",
+    "content-hash": "af3fd2ea17209489263546c36ab2aade",
     "packages": [
         {
             "name": "api-platform/core",
@@ -13087,21 +13087,21 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.2.2",
+            "version": "1.2.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "044e6364017882d1e346da8690eeabc154da5495"
+                "reference": "2433e95410aef1b34b15d7f1b6a134365a4ddb39"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/044e6364017882d1e346da8690eeabc154da5495",
-                "reference": "044e6364017882d1e346da8690eeabc154da5495",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/2433e95410aef1b34b15d7f1b6a134365a4ddb39",
+                "reference": "2433e95410aef1b34b15d7f1b6a134365a4ddb39",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.2|^8.0",
-                "phpstan/phpstan": "^1.11"
+                "phpstan/phpstan": "^1.11.9"
             },
             "conflict": {
                 "rector/rector-doctrine": "*",
@@ -13134,7 +13134,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.2.2"
+                "source": "https://github.com/rectorphp/rector/tree/1.2.3"
             },
             "funding": [
                 {
@@ -13142,7 +13142,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-07-25T07:44:34+00:00"
+            "time": "2024-08-12T16:36:46+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From 4767b5860a3049a16bb63cc602c397ef0844a510 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 12 Aug 2024 17:15:44 +0000
Subject: [PATCH 033/273] chore(deps): update dependency eslint-plugin-cypress
 to v3.5.0

---
 e2e/package-lock.json | 8 ++++----
 e2e/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/e2e/package-lock.json b/e2e/package-lock.json
index 899ccd8ba4..2859b758fd 100644
--- a/e2e/package-lock.json
+++ b/e2e/package-lock.json
@@ -12,7 +12,7 @@
         "cypress": "13.13.2",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
-        "eslint-plugin-cypress": "3.4.0",
+        "eslint-plugin-cypress": "3.5.0",
         "eslint-plugin-prettier": "5.2.1",
         "globals": "15.9.0",
         "prettier": "3.3.3"
@@ -1138,9 +1138,9 @@
       }
     },
     "node_modules/eslint-plugin-cypress": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-3.4.0.tgz",
-      "integrity": "sha512-Rrrr3Ri6wHqzrRr+TyUV7bDS4UnMMrFY1R1PP2F7XdGfe9txDC6lQEshyoNOWqGoPkbbeDm1x1XPc/adxemsnA==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-cypress/-/eslint-plugin-cypress-3.5.0.tgz",
+      "integrity": "sha512-JZQ6XnBTNI8h1B9M7wJSFzc48SYbh7VMMKaNTQOFa3BQlnmXPrVc4PKen8R+fpv6VleiPeej6VxloGb42zdRvw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/e2e/package.json b/e2e/package.json
index b774529d85..0453ebfb04 100644
--- a/e2e/package.json
+++ b/e2e/package.json
@@ -18,7 +18,7 @@
     "cypress": "13.13.2",
     "eslint": "8.57.0",
     "eslint-config-prettier": "9.1.0",
-    "eslint-plugin-cypress": "3.4.0",
+    "eslint-plugin-cypress": "3.5.0",
     "eslint-plugin-prettier": "5.2.1",
     "globals": "15.9.0",
     "prettier": "3.3.3"

From f37ba9df71038b0b78016b71e921b2db693818b1 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 12 Aug 2024 19:35:09 +0000
Subject: [PATCH 034/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.28

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 4286557a84..96e39f8730 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.27
+    image: amazon/aws-cli:2.17.28
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From e29cb1d5cccd145c8d06b82dfbc58c0f8f4e1e4e Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 12 Aug 2024 19:35:54 +0000
Subject: [PATCH 035/273] fix(deps): update dependency @pulumi/aws to v6.49.0

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index 6b4c671d22..5e0092e1a9 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -6,7 +6,7 @@
         "": {
             "name": "ecamp-core",
             "dependencies": {
-                "@pulumi/aws": "6.48.0",
+                "@pulumi/aws": "6.49.0",
                 "@pulumi/awsx": "2.14.0",
                 "@pulumi/pulumi": "3.128.0"
             },
@@ -2012,9 +2012,9 @@
             "license": "BSD-3-Clause"
         },
         "node_modules/@pulumi/aws": {
-            "version": "6.48.0",
-            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.48.0.tgz",
-            "integrity": "sha512-Y+raJupp7mtMmDC6C1yDiapE6cPbkH/T+wVovePBKtwggipJ33ezZtZ8n95CseiN9ii9fo5jX0iLIEaOpv5/fw==",
+            "version": "6.49.0",
+            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.49.0.tgz",
+            "integrity": "sha512-Xj/rf0dmcykCxBtf1rNk6OWVSnCXDb5bl6T2/FIzmnDRETc/Tnhk5m7GsSmZe7a3l00IMbvodBre+FIxikimKg==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@pulumi/pulumi": "^3.0.0",
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 7d8845d046..e5ce38d51a 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -11,7 +11,7 @@
     },
     "dependencies": {
         "@pulumi/pulumi": "3.128.0",
-        "@pulumi/aws": "6.48.0",
+        "@pulumi/aws": "6.49.0",
         "@pulumi/awsx": "2.14.0"
     },
     "devDependencies": {

From 27ddfc4457b0a407ee0e89659fd6352e8c5c096e Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 12 Aug 2024 19:46:55 +0000
Subject: [PATCH 036/273] fix(deps): update dependency
 knpuniversity/oauth2-client-bundle to v2.18.2

---
 api/composer.json |  2 +-
 api/composer.lock | 29 ++++++++++++++---------------
 2 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 487ec4b414..87d25d707e 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -16,7 +16,7 @@
         "friendsofsymfony/http-cache-bundle": "3.0.1",
         "google/recaptcha": "1.3.0",
         "guzzlehttp/guzzle": "7.9.2",
-        "knpuniversity/oauth2-client-bundle": "2.18.1",
+        "knpuniversity/oauth2-client-bundle": "2.18.2",
         "league/oauth2-google": "4.0.1",
         "lexik/jwt-authentication-bundle": "3.1.0",
         "nelmio/cors-bundle": "2.5.0",
diff --git a/api/composer.lock b/api/composer.lock
index e2d596dd2f..8a91386393 100644
--- a/api/composer.lock
+++ b/api/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": "af3fd2ea17209489263546c36ab2aade",
+    "content-hash": "3d2d3db80400cda01539c618ffd4919e",
     "packages": [
         {
             "name": "api-platform/core",
@@ -2755,32 +2755,31 @@
         },
         {
             "name": "knpuniversity/oauth2-client-bundle",
-            "version": "v2.18.1",
+            "version": "v2.18.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/knpuniversity/oauth2-client-bundle.git",
-                "reference": "1d59f49f164805b45f95f92cf743781bc2ba7d2b"
+                "reference": "0f8db87efa064bc1800315c027a80b53ef935524"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/1d59f49f164805b45f95f92cf743781bc2ba7d2b",
-                "reference": "1d59f49f164805b45f95f92cf743781bc2ba7d2b",
+                "url": "https://api.github.com/repos/knpuniversity/oauth2-client-bundle/zipball/0f8db87efa064bc1800315c027a80b53ef935524",
+                "reference": "0f8db87efa064bc1800315c027a80b53ef935524",
                 "shasum": ""
             },
             "require": {
                 "league/oauth2-client": "^2.0",
                 "php": ">=8.1",
-                "symfony/dependency-injection": "^4.4|^5.0|^6.0|^7.0",
-                "symfony/framework-bundle": "^4.4|^5.0|^6.0|^7.0",
-                "symfony/http-foundation": "^4.4|^5.0|^6.0|^7.0",
-                "symfony/routing": "^4.4|^5.0|^6.0|^7.0"
+                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+                "symfony/framework-bundle": "^5.4|^6.0|^7.0",
+                "symfony/http-foundation": "^5.4|^6.0|^7.0",
+                "symfony/routing": "^5.4|^6.0|^7.0"
             },
             "require-dev": {
                 "league/oauth2-facebook": "^1.1|^2.0",
-                "phpstan/phpstan": "^1.0",
-                "symfony/phpunit-bridge": "^5.3.1|^6.0|^7.0",
-                "symfony/security-guard": "^4.4|^5.0|^6.0|^7.0",
-                "symfony/yaml": "^4.4|^5.0|^6.0|^7.0"
+                "symfony/phpunit-bridge": "^5.4|^6.0|^7.0",
+                "symfony/security-guard": "^5.4",
+                "symfony/yaml": "^5.4|^6.0|^7.0"
             },
             "suggest": {
                 "symfony/security-guard": "For integration with Symfony's Guard Security layer"
@@ -2809,9 +2808,9 @@
             ],
             "support": {
                 "issues": "https://github.com/knpuniversity/oauth2-client-bundle/issues",
-                "source": "https://github.com/knpuniversity/oauth2-client-bundle/tree/v2.18.1"
+                "source": "https://github.com/knpuniversity/oauth2-client-bundle/tree/v2.18.2"
             },
-            "time": "2024-02-14T17:41:28+00:00"
+            "time": "2024-08-12T15:26:07+00:00"
         },
         {
             "name": "lcobucci/clock",

From 9224740eb6122956a5fa2f3b9a83d655c8486681 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Mon, 12 Aug 2024 23:08:46 +0200
Subject: [PATCH 037/273] pdf: do not lint jsx and cjs files anymore

Because we don't have them anymore.
A mjs file will be added later.
---
 pdf/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/pdf/package.json b/pdf/package.json
index 58a0edffe2..65d063fa59 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -10,10 +10,10 @@
     "preview": "vite preview",
     "test:unit": "vitest --coverage",
     "lint": "npm run lint:eslint && npm run lint:prettier",
-    "lint:eslint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore",
+    "lint:eslint": "eslint . --ext .vue,.js,.mjs --fix --ignore-path .gitignore",
     "lint:prettier": "prettier --write --ignore-path .prettierignore **/*.{css,scss}",
     "lint:check": "npm run lint:check:eslint && npm run lint:check:prettier",
-    "lint:check:eslint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --no-fix --ignore-path .gitignore",
+    "lint:check:eslint": "eslint . --ext .vue,.js,.mjs --no-fix --ignore-path .gitignore",
     "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss}"
   },
   "dependencies": {

From 942196b34ca1fdf2ef914a87e9de8e13f17fac6c Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Mon, 12 Aug 2024 23:11:01 +0200
Subject: [PATCH 038/273] pdf: also format json with prettier

---
 pdf/package.json                                     | 4 ++--
 pdf/src/renderer/__tests__/fullCampStoreContent.json | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/pdf/package.json b/pdf/package.json
index 65d063fa59..0138d512b3 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -11,10 +11,10 @@
     "test:unit": "vitest --coverage",
     "lint": "npm run lint:eslint && npm run lint:prettier",
     "lint:eslint": "eslint . --ext .vue,.js,.mjs --fix --ignore-path .gitignore",
-    "lint:prettier": "prettier --write --ignore-path .prettierignore **/*.{css,scss}",
+    "lint:prettier": "prettier --write --ignore-path .prettierignore **/*.{css,scss,json}",
     "lint:check": "npm run lint:check:eslint && npm run lint:check:prettier",
     "lint:check:eslint": "eslint . --ext .vue,.js,.mjs --no-fix --ignore-path .gitignore",
-    "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss}"
+    "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json}"
   },
   "dependencies": {
     "@vue/runtime-core": "3.4.37",
diff --git a/pdf/src/renderer/__tests__/fullCampStoreContent.json b/pdf/src/renderer/__tests__/fullCampStoreContent.json
index 9b187d465a..523ba317f7 100644
--- a/pdf/src/renderer/__tests__/fullCampStoreContent.json
+++ b/pdf/src/renderer/__tests__/fullCampStoreContent.json
@@ -11875,4 +11875,4 @@
       "load": "{}"
     }
   }
-}
\ No newline at end of file
+}

From 22f63fc6f431bdfd2899c3897e63c0492199dc45 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Mon, 12 Aug 2024 23:14:01 +0200
Subject: [PATCH 039/273] pdf: dump current eslint config

With:

node_modules/.bin/eslint --print-config src/CampPrint.vue | jq '.rules' --sort-keys --raw-output > eslint-config-vue.json

and
node_modules/.bin/eslint --print-config src/index.js | jq '.rules' --sort-keys --raw-output > eslint-config-js.json
---
 pdf/eslint-config-js.json  | 372 +++++++++++++++++++++++++++++++++++++
 pdf/eslint-config-vue.json | 372 +++++++++++++++++++++++++++++++++++++
 2 files changed, 744 insertions(+)
 create mode 100644 pdf/eslint-config-js.json
 create mode 100644 pdf/eslint-config-vue.json

diff --git a/pdf/eslint-config-js.json b/pdf/eslint-config-js.json
new file mode 100644
index 0000000000..1bd0467b04
--- /dev/null
+++ b/pdf/eslint-config-js.json
@@ -0,0 +1,372 @@
+{
+  "@babel/object-curly-spacing": ["off"],
+  "@babel/semi": ["off"],
+  "@typescript-eslint/block-spacing": ["off"],
+  "@typescript-eslint/brace-style": ["off"],
+  "@typescript-eslint/comma-dangle": ["off"],
+  "@typescript-eslint/comma-spacing": ["off"],
+  "@typescript-eslint/func-call-spacing": ["off"],
+  "@typescript-eslint/indent": ["off"],
+  "@typescript-eslint/key-spacing": ["off"],
+  "@typescript-eslint/keyword-spacing": ["off"],
+  "@typescript-eslint/lines-around-comment": [0],
+  "@typescript-eslint/member-delimiter-style": ["off"],
+  "@typescript-eslint/no-extra-parens": ["off"],
+  "@typescript-eslint/no-extra-semi": ["off"],
+  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/quotes": [0],
+  "@typescript-eslint/semi": ["off"],
+  "@typescript-eslint/space-before-blocks": ["off"],
+  "@typescript-eslint/space-before-function-paren": ["off"],
+  "@typescript-eslint/space-infix-ops": ["off"],
+  "@typescript-eslint/type-annotation-spacing": ["off"],
+  "array-bracket-newline": ["off"],
+  "array-bracket-spacing": ["off"],
+  "array-element-newline": ["off"],
+  "arrow-body-style": ["off"],
+  "arrow-parens": ["off"],
+  "arrow-spacing": ["off"],
+  "babel/object-curly-spacing": ["off"],
+  "babel/quotes": [0],
+  "babel/semi": ["off"],
+  "block-spacing": ["off"],
+  "brace-style": ["off"],
+  "comma-dangle": ["off"],
+  "comma-spacing": ["off"],
+  "comma-style": ["off"],
+  "computed-property-spacing": ["off"],
+  "constructor-super": ["error"],
+  "curly": [0],
+  "dot-location": ["off"],
+  "eol-last": ["off"],
+  "flowtype/boolean-style": ["off"],
+  "flowtype/delimiter-dangle": ["off"],
+  "flowtype/generic-spacing": ["off"],
+  "flowtype/object-type-curly-spacing": ["off"],
+  "flowtype/object-type-delimiter": ["off"],
+  "flowtype/quotes": ["off"],
+  "flowtype/semi": ["off"],
+  "flowtype/space-after-type-colon": ["off"],
+  "flowtype/space-before-generic-bracket": ["off"],
+  "flowtype/space-before-type-colon": ["off"],
+  "flowtype/union-intersection-spacing": ["off"],
+  "for-direction": ["error"],
+  "func-call-spacing": ["off"],
+  "function-call-argument-newline": ["off"],
+  "function-paren-newline": ["off"],
+  "generator-star": ["off"],
+  "generator-star-spacing": ["off"],
+  "getter-return": ["error"],
+  "implicit-arrow-linebreak": ["off"],
+  "indent": ["off"],
+  "indent-legacy": ["off"],
+  "jsx-quotes": ["off"],
+  "key-spacing": ["off"],
+  "keyword-spacing": ["off"],
+  "linebreak-style": ["off"],
+  "lines-around-comment": [0],
+  "local-rules/matching-translation-keys": [
+    "error",
+    {
+      "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
+      "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
+    }
+  ],
+  "max-len": [0],
+  "max-statements-per-line": ["off"],
+  "multiline-ternary": ["off"],
+  "new-parens": ["off"],
+  "newline-per-chained-call": ["off"],
+  "no-arrow-condition": ["off"],
+  "no-async-promise-executor": ["error"],
+  "no-case-declarations": ["error"],
+  "no-class-assign": ["error"],
+  "no-comma-dangle": ["off"],
+  "no-compare-neg-zero": ["error"],
+  "no-cond-assign": ["error"],
+  "no-confusing-arrow": [0],
+  "no-const-assign": ["error"],
+  "no-constant-condition": ["error"],
+  "no-control-regex": ["error"],
+  "no-debugger": ["error"],
+  "no-delete-var": ["error"],
+  "no-dupe-args": ["error"],
+  "no-dupe-class-members": ["error"],
+  "no-dupe-else-if": ["error"],
+  "no-dupe-keys": ["error"],
+  "no-duplicate-case": ["error"],
+  "no-empty": ["error"],
+  "no-empty-character-class": ["error"],
+  "no-empty-pattern": ["error"],
+  "no-ex-assign": ["error"],
+  "no-extra-boolean-cast": ["error"],
+  "no-extra-parens": ["off"],
+  "no-extra-semi": ["off"],
+  "no-fallthrough": ["error"],
+  "no-floating-decimal": ["off"],
+  "no-func-assign": ["error"],
+  "no-global-assign": ["error"],
+  "no-import-assign": ["error"],
+  "no-inner-declarations": ["error"],
+  "no-invalid-regexp": ["error"],
+  "no-irregular-whitespace": ["error"],
+  "no-loss-of-precision": ["error"],
+  "no-misleading-character-class": ["error"],
+  "no-mixed-operators": [0],
+  "no-mixed-spaces-and-tabs": ["off"],
+  "no-multi-spaces": ["off"],
+  "no-multiple-empty-lines": ["off"],
+  "no-new-symbol": ["error"],
+  "no-nonoctal-decimal-escape": ["error"],
+  "no-obj-calls": ["error"],
+  "no-octal": ["error"],
+  "no-prototype-builtins": ["error"],
+  "no-redeclare": ["error"],
+  "no-regex-spaces": ["error"],
+  "no-reserved-keys": ["off"],
+  "no-self-assign": ["error"],
+  "no-setter-return": ["error"],
+  "no-shadow-restricted-names": ["error"],
+  "no-space-before-semi": ["off"],
+  "no-spaced-func": ["off"],
+  "no-sparse-arrays": ["error"],
+  "no-tabs": [0],
+  "no-this-before-super": ["error"],
+  "no-trailing-spaces": ["off"],
+  "no-undef": ["error"],
+  "no-unexpected-multiline": [0],
+  "no-unreachable": ["error"],
+  "no-unsafe-finally": ["error"],
+  "no-unsafe-negation": ["error"],
+  "no-unsafe-optional-chaining": ["error"],
+  "no-unused-labels": ["error"],
+  "no-unused-vars": [
+    "error",
+    {
+      "argsIgnorePattern": "^_$"
+    }
+  ],
+  "no-useless-backreference": ["error"],
+  "no-useless-catch": ["error"],
+  "no-useless-escape": ["error"],
+  "no-whitespace-before-property": ["off"],
+  "no-with": ["error"],
+  "no-wrap-func": ["off"],
+  "nonblock-statement-body-position": ["off"],
+  "object-curly-newline": ["off"],
+  "object-curly-spacing": ["off"],
+  "object-property-newline": ["off"],
+  "one-var-declaration-per-line": ["off"],
+  "operator-linebreak": ["off"],
+  "padded-blocks": ["off"],
+  "prefer-arrow-callback": ["off"],
+  "prefer-const": ["error"],
+  "prettier/prettier": ["error"],
+  "quote-props": ["off"],
+  "quotes": [0],
+  "react/jsx-child-element-spacing": ["off"],
+  "react/jsx-closing-bracket-location": ["off"],
+  "react/jsx-closing-tag-location": ["off"],
+  "react/jsx-curly-newline": ["off"],
+  "react/jsx-curly-spacing": ["off"],
+  "react/jsx-equals-spacing": ["off"],
+  "react/jsx-first-prop-new-line": ["off"],
+  "react/jsx-indent": ["off"],
+  "react/jsx-indent-props": ["off"],
+  "react/jsx-max-props-per-line": ["off"],
+  "react/jsx-newline": ["off"],
+  "react/jsx-one-expression-per-line": ["off"],
+  "react/jsx-props-no-multi-spaces": ["off"],
+  "react/jsx-space-before-closing": ["off"],
+  "react/jsx-tag-spacing": ["off"],
+  "react/jsx-wrap-multilines": ["off"],
+  "require-yield": ["error"],
+  "rest-spread-spacing": ["off"],
+  "semi": ["off"],
+  "semi-spacing": ["off"],
+  "semi-style": ["off"],
+  "space-after-function-name": ["off"],
+  "space-after-keywords": ["off"],
+  "space-before-blocks": ["off"],
+  "space-before-function-paren": ["off"],
+  "space-before-function-parentheses": ["off"],
+  "space-before-keywords": ["off"],
+  "space-in-brackets": ["off"],
+  "space-in-parens": ["off"],
+  "space-infix-ops": ["off"],
+  "space-return-throw-case": ["off"],
+  "space-unary-ops": ["off"],
+  "space-unary-word-ops": ["off"],
+  "standard/array-bracket-even-spacing": ["off"],
+  "standard/computed-property-even-spacing": ["off"],
+  "standard/object-curly-even-spacing": ["off"],
+  "switch-colon-spacing": ["off"],
+  "template-curly-spacing": ["off"],
+  "template-tag-spacing": ["off"],
+  "unicorn/empty-brace-spaces": ["off"],
+  "unicorn/no-nested-ternary": ["off"],
+  "unicorn/number-literal-case": ["off"],
+  "unicorn/template-indent": [0],
+  "use-isnan": ["error"],
+  "valid-typeof": ["error"],
+  "vue/array-bracket-newline": ["off"],
+  "vue/array-bracket-spacing": ["off"],
+  "vue/array-element-newline": ["off"],
+  "vue/arrow-spacing": ["off"],
+  "vue/attribute-hyphenation": ["warn"],
+  "vue/attributes-order": ["warn"],
+  "vue/block-spacing": ["off"],
+  "vue/block-tag-newline": ["off"],
+  "vue/brace-style": ["off"],
+  "vue/comma-dangle": ["off"],
+  "vue/comma-spacing": ["off"],
+  "vue/comma-style": ["off"],
+  "vue/comment-directive": ["error"],
+  "vue/component-definition-name-casing": ["warn"],
+  "vue/component-tags-order": [
+    "error",
+    {
+      "order": ["template", "script", "style"]
+    }
+  ],
+  "vue/dot-location": ["off"],
+  "vue/first-attribute-linebreak": ["warn"],
+  "vue/func-call-spacing": ["off"],
+  "vue/html-closing-bracket-newline": ["off"],
+  "vue/html-closing-bracket-spacing": ["off"],
+  "vue/html-end-tags": ["off"],
+  "vue/html-indent": ["off"],
+  "vue/html-quotes": ["off"],
+  "vue/html-self-closing": [0],
+  "vue/jsx-uses-vars": ["error"],
+  "vue/key-spacing": ["off"],
+  "vue/keyword-spacing": ["off"],
+  "vue/max-attributes-per-line": ["off"],
+  "vue/max-len": [0],
+  "vue/multi-word-component-names": ["off"],
+  "vue/multiline-html-element-content-newline": ["off"],
+  "vue/multiline-ternary": ["off"],
+  "vue/mustache-interpolation-spacing": ["off"],
+  "vue/no-arrow-functions-in-watch": ["error"],
+  "vue/no-async-in-computed-properties": ["error"],
+  "vue/no-child-content": ["error"],
+  "vue/no-computed-properties-in-data": ["error"],
+  "vue/no-deprecated-data-object-declaration": ["error"],
+  "vue/no-deprecated-destroyed-lifecycle": ["error"],
+  "vue/no-deprecated-dollar-listeners-api": ["error"],
+  "vue/no-deprecated-dollar-scopedslots-api": ["error"],
+  "vue/no-deprecated-events-api": ["error"],
+  "vue/no-deprecated-filter": ["error"],
+  "vue/no-deprecated-functional-template": ["error"],
+  "vue/no-deprecated-html-element-is": ["error"],
+  "vue/no-deprecated-inline-template": ["error"],
+  "vue/no-deprecated-props-default-this": ["error"],
+  "vue/no-deprecated-router-link-tag-prop": ["error"],
+  "vue/no-deprecated-scope-attribute": ["error"],
+  "vue/no-deprecated-slot-attribute": ["error"],
+  "vue/no-deprecated-slot-scope-attribute": ["error"],
+  "vue/no-deprecated-v-bind-sync": ["error"],
+  "vue/no-deprecated-v-is": ["error"],
+  "vue/no-deprecated-v-on-native-modifier": ["error"],
+  "vue/no-deprecated-v-on-number-modifiers": ["error"],
+  "vue/no-deprecated-vue-config-keycodes": ["error"],
+  "vue/no-dupe-keys": ["error"],
+  "vue/no-dupe-v-else-if": ["error"],
+  "vue/no-duplicate-attributes": ["error"],
+  "vue/no-export-in-script-setup": ["error"],
+  "vue/no-expose-after-await": ["error"],
+  "vue/no-extra-parens": ["off"],
+  "vue/no-lifecycle-after-await": ["error"],
+  "vue/no-lone-template": ["warn"],
+  "vue/no-multi-spaces": ["off"],
+  "vue/no-multiple-slot-args": ["warn"],
+  "vue/no-mutating-props": ["error"],
+  "vue/no-parsing-error": ["error"],
+  "vue/no-ref-as-operand": ["error"],
+  "vue/no-reserved-component-names": ["off"],
+  "vue/no-reserved-keys": ["error"],
+  "vue/no-reserved-props": ["error"],
+  "vue/no-shared-component-data": ["error"],
+  "vue/no-side-effects-in-computed-properties": ["error"],
+  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
+  "vue/no-template-key": ["error"],
+  "vue/no-template-shadow": ["warn"],
+  "vue/no-textarea-mustache": ["error"],
+  "vue/no-unused-components": ["error"],
+  "vue/no-unused-vars": [
+    "error",
+    {
+      "ignorePattern": "^_"
+    }
+  ],
+  "vue/no-use-computed-property-like-method": ["error"],
+  "vue/no-use-v-if-with-v-for": ["error"],
+  "vue/no-useless-template-attributes": ["error"],
+  "vue/no-v-for-template-key-on-child": ["error"],
+  "vue/no-v-html": ["warn"],
+  "vue/no-v-text-v-html-on-component": ["error"],
+  "vue/no-watch-after-await": ["error"],
+  "vue/object-curly-newline": ["off"],
+  "vue/object-curly-spacing": ["off"],
+  "vue/object-property-newline": ["off"],
+  "vue/one-component-per-file": ["warn"],
+  "vue/operator-linebreak": ["off"],
+  "vue/order-in-components": ["warn"],
+  "vue/prefer-import-from-vue": ["error"],
+  "vue/prop-name-casing": ["warn"],
+  "vue/quote-props": ["off"],
+  "vue/require-component-is": ["error"],
+  "vue/require-default-prop": ["warn"],
+  "vue/require-explicit-emits": ["warn"],
+  "vue/require-prop-type-constructor": ["error"],
+  "vue/require-prop-types": ["warn"],
+  "vue/require-render-return": ["error"],
+  "vue/require-slots-as-functions": ["error"],
+  "vue/require-toggle-inside-transition": ["error"],
+  "vue/require-v-for-key": ["error"],
+  "vue/require-valid-default-prop": ["error"],
+  "vue/return-in-computed-property": ["error"],
+  "vue/return-in-emits-validator": ["error"],
+  "vue/script-indent": ["off"],
+  "vue/singleline-html-element-content-newline": ["off"],
+  "vue/space-in-parens": ["off"],
+  "vue/space-infix-ops": ["off"],
+  "vue/space-unary-ops": ["off"],
+  "vue/template-curly-spacing": ["off"],
+  "vue/this-in-template": ["warn"],
+  "vue/use-v-on-exact": ["error"],
+  "vue/v-bind-style": ["warn"],
+  "vue/v-on-event-hyphenation": [
+    "warn",
+    "always",
+    {
+      "autofix": true
+    }
+  ],
+  "vue/v-on-style": ["warn"],
+  "vue/v-slot-style": ["warn"],
+  "vue/valid-attribute-name": ["error"],
+  "vue/valid-define-emits": ["error"],
+  "vue/valid-define-props": ["error"],
+  "vue/valid-next-tick": ["error"],
+  "vue/valid-template-root": ["error"],
+  "vue/valid-v-bind": ["error"],
+  "vue/valid-v-cloak": ["error"],
+  "vue/valid-v-else": ["error"],
+  "vue/valid-v-else-if": ["error"],
+  "vue/valid-v-for": ["off"],
+  "vue/valid-v-html": ["error"],
+  "vue/valid-v-if": ["error"],
+  "vue/valid-v-is": ["error"],
+  "vue/valid-v-memo": ["error"],
+  "vue/valid-v-model": ["error"],
+  "vue/valid-v-on": ["error"],
+  "vue/valid-v-once": ["error"],
+  "vue/valid-v-pre": ["error"],
+  "vue/valid-v-show": ["error"],
+  "vue/valid-v-slot": ["error"],
+  "vue/valid-v-text": ["error"],
+  "wrap-iife": ["off"],
+  "wrap-regex": ["off"],
+  "yield-star-spacing": ["off"]
+}
diff --git a/pdf/eslint-config-vue.json b/pdf/eslint-config-vue.json
new file mode 100644
index 0000000000..1bd0467b04
--- /dev/null
+++ b/pdf/eslint-config-vue.json
@@ -0,0 +1,372 @@
+{
+  "@babel/object-curly-spacing": ["off"],
+  "@babel/semi": ["off"],
+  "@typescript-eslint/block-spacing": ["off"],
+  "@typescript-eslint/brace-style": ["off"],
+  "@typescript-eslint/comma-dangle": ["off"],
+  "@typescript-eslint/comma-spacing": ["off"],
+  "@typescript-eslint/func-call-spacing": ["off"],
+  "@typescript-eslint/indent": ["off"],
+  "@typescript-eslint/key-spacing": ["off"],
+  "@typescript-eslint/keyword-spacing": ["off"],
+  "@typescript-eslint/lines-around-comment": [0],
+  "@typescript-eslint/member-delimiter-style": ["off"],
+  "@typescript-eslint/no-extra-parens": ["off"],
+  "@typescript-eslint/no-extra-semi": ["off"],
+  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/quotes": [0],
+  "@typescript-eslint/semi": ["off"],
+  "@typescript-eslint/space-before-blocks": ["off"],
+  "@typescript-eslint/space-before-function-paren": ["off"],
+  "@typescript-eslint/space-infix-ops": ["off"],
+  "@typescript-eslint/type-annotation-spacing": ["off"],
+  "array-bracket-newline": ["off"],
+  "array-bracket-spacing": ["off"],
+  "array-element-newline": ["off"],
+  "arrow-body-style": ["off"],
+  "arrow-parens": ["off"],
+  "arrow-spacing": ["off"],
+  "babel/object-curly-spacing": ["off"],
+  "babel/quotes": [0],
+  "babel/semi": ["off"],
+  "block-spacing": ["off"],
+  "brace-style": ["off"],
+  "comma-dangle": ["off"],
+  "comma-spacing": ["off"],
+  "comma-style": ["off"],
+  "computed-property-spacing": ["off"],
+  "constructor-super": ["error"],
+  "curly": [0],
+  "dot-location": ["off"],
+  "eol-last": ["off"],
+  "flowtype/boolean-style": ["off"],
+  "flowtype/delimiter-dangle": ["off"],
+  "flowtype/generic-spacing": ["off"],
+  "flowtype/object-type-curly-spacing": ["off"],
+  "flowtype/object-type-delimiter": ["off"],
+  "flowtype/quotes": ["off"],
+  "flowtype/semi": ["off"],
+  "flowtype/space-after-type-colon": ["off"],
+  "flowtype/space-before-generic-bracket": ["off"],
+  "flowtype/space-before-type-colon": ["off"],
+  "flowtype/union-intersection-spacing": ["off"],
+  "for-direction": ["error"],
+  "func-call-spacing": ["off"],
+  "function-call-argument-newline": ["off"],
+  "function-paren-newline": ["off"],
+  "generator-star": ["off"],
+  "generator-star-spacing": ["off"],
+  "getter-return": ["error"],
+  "implicit-arrow-linebreak": ["off"],
+  "indent": ["off"],
+  "indent-legacy": ["off"],
+  "jsx-quotes": ["off"],
+  "key-spacing": ["off"],
+  "keyword-spacing": ["off"],
+  "linebreak-style": ["off"],
+  "lines-around-comment": [0],
+  "local-rules/matching-translation-keys": [
+    "error",
+    {
+      "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
+      "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
+    }
+  ],
+  "max-len": [0],
+  "max-statements-per-line": ["off"],
+  "multiline-ternary": ["off"],
+  "new-parens": ["off"],
+  "newline-per-chained-call": ["off"],
+  "no-arrow-condition": ["off"],
+  "no-async-promise-executor": ["error"],
+  "no-case-declarations": ["error"],
+  "no-class-assign": ["error"],
+  "no-comma-dangle": ["off"],
+  "no-compare-neg-zero": ["error"],
+  "no-cond-assign": ["error"],
+  "no-confusing-arrow": [0],
+  "no-const-assign": ["error"],
+  "no-constant-condition": ["error"],
+  "no-control-regex": ["error"],
+  "no-debugger": ["error"],
+  "no-delete-var": ["error"],
+  "no-dupe-args": ["error"],
+  "no-dupe-class-members": ["error"],
+  "no-dupe-else-if": ["error"],
+  "no-dupe-keys": ["error"],
+  "no-duplicate-case": ["error"],
+  "no-empty": ["error"],
+  "no-empty-character-class": ["error"],
+  "no-empty-pattern": ["error"],
+  "no-ex-assign": ["error"],
+  "no-extra-boolean-cast": ["error"],
+  "no-extra-parens": ["off"],
+  "no-extra-semi": ["off"],
+  "no-fallthrough": ["error"],
+  "no-floating-decimal": ["off"],
+  "no-func-assign": ["error"],
+  "no-global-assign": ["error"],
+  "no-import-assign": ["error"],
+  "no-inner-declarations": ["error"],
+  "no-invalid-regexp": ["error"],
+  "no-irregular-whitespace": ["error"],
+  "no-loss-of-precision": ["error"],
+  "no-misleading-character-class": ["error"],
+  "no-mixed-operators": [0],
+  "no-mixed-spaces-and-tabs": ["off"],
+  "no-multi-spaces": ["off"],
+  "no-multiple-empty-lines": ["off"],
+  "no-new-symbol": ["error"],
+  "no-nonoctal-decimal-escape": ["error"],
+  "no-obj-calls": ["error"],
+  "no-octal": ["error"],
+  "no-prototype-builtins": ["error"],
+  "no-redeclare": ["error"],
+  "no-regex-spaces": ["error"],
+  "no-reserved-keys": ["off"],
+  "no-self-assign": ["error"],
+  "no-setter-return": ["error"],
+  "no-shadow-restricted-names": ["error"],
+  "no-space-before-semi": ["off"],
+  "no-spaced-func": ["off"],
+  "no-sparse-arrays": ["error"],
+  "no-tabs": [0],
+  "no-this-before-super": ["error"],
+  "no-trailing-spaces": ["off"],
+  "no-undef": ["error"],
+  "no-unexpected-multiline": [0],
+  "no-unreachable": ["error"],
+  "no-unsafe-finally": ["error"],
+  "no-unsafe-negation": ["error"],
+  "no-unsafe-optional-chaining": ["error"],
+  "no-unused-labels": ["error"],
+  "no-unused-vars": [
+    "error",
+    {
+      "argsIgnorePattern": "^_$"
+    }
+  ],
+  "no-useless-backreference": ["error"],
+  "no-useless-catch": ["error"],
+  "no-useless-escape": ["error"],
+  "no-whitespace-before-property": ["off"],
+  "no-with": ["error"],
+  "no-wrap-func": ["off"],
+  "nonblock-statement-body-position": ["off"],
+  "object-curly-newline": ["off"],
+  "object-curly-spacing": ["off"],
+  "object-property-newline": ["off"],
+  "one-var-declaration-per-line": ["off"],
+  "operator-linebreak": ["off"],
+  "padded-blocks": ["off"],
+  "prefer-arrow-callback": ["off"],
+  "prefer-const": ["error"],
+  "prettier/prettier": ["error"],
+  "quote-props": ["off"],
+  "quotes": [0],
+  "react/jsx-child-element-spacing": ["off"],
+  "react/jsx-closing-bracket-location": ["off"],
+  "react/jsx-closing-tag-location": ["off"],
+  "react/jsx-curly-newline": ["off"],
+  "react/jsx-curly-spacing": ["off"],
+  "react/jsx-equals-spacing": ["off"],
+  "react/jsx-first-prop-new-line": ["off"],
+  "react/jsx-indent": ["off"],
+  "react/jsx-indent-props": ["off"],
+  "react/jsx-max-props-per-line": ["off"],
+  "react/jsx-newline": ["off"],
+  "react/jsx-one-expression-per-line": ["off"],
+  "react/jsx-props-no-multi-spaces": ["off"],
+  "react/jsx-space-before-closing": ["off"],
+  "react/jsx-tag-spacing": ["off"],
+  "react/jsx-wrap-multilines": ["off"],
+  "require-yield": ["error"],
+  "rest-spread-spacing": ["off"],
+  "semi": ["off"],
+  "semi-spacing": ["off"],
+  "semi-style": ["off"],
+  "space-after-function-name": ["off"],
+  "space-after-keywords": ["off"],
+  "space-before-blocks": ["off"],
+  "space-before-function-paren": ["off"],
+  "space-before-function-parentheses": ["off"],
+  "space-before-keywords": ["off"],
+  "space-in-brackets": ["off"],
+  "space-in-parens": ["off"],
+  "space-infix-ops": ["off"],
+  "space-return-throw-case": ["off"],
+  "space-unary-ops": ["off"],
+  "space-unary-word-ops": ["off"],
+  "standard/array-bracket-even-spacing": ["off"],
+  "standard/computed-property-even-spacing": ["off"],
+  "standard/object-curly-even-spacing": ["off"],
+  "switch-colon-spacing": ["off"],
+  "template-curly-spacing": ["off"],
+  "template-tag-spacing": ["off"],
+  "unicorn/empty-brace-spaces": ["off"],
+  "unicorn/no-nested-ternary": ["off"],
+  "unicorn/number-literal-case": ["off"],
+  "unicorn/template-indent": [0],
+  "use-isnan": ["error"],
+  "valid-typeof": ["error"],
+  "vue/array-bracket-newline": ["off"],
+  "vue/array-bracket-spacing": ["off"],
+  "vue/array-element-newline": ["off"],
+  "vue/arrow-spacing": ["off"],
+  "vue/attribute-hyphenation": ["warn"],
+  "vue/attributes-order": ["warn"],
+  "vue/block-spacing": ["off"],
+  "vue/block-tag-newline": ["off"],
+  "vue/brace-style": ["off"],
+  "vue/comma-dangle": ["off"],
+  "vue/comma-spacing": ["off"],
+  "vue/comma-style": ["off"],
+  "vue/comment-directive": ["error"],
+  "vue/component-definition-name-casing": ["warn"],
+  "vue/component-tags-order": [
+    "error",
+    {
+      "order": ["template", "script", "style"]
+    }
+  ],
+  "vue/dot-location": ["off"],
+  "vue/first-attribute-linebreak": ["warn"],
+  "vue/func-call-spacing": ["off"],
+  "vue/html-closing-bracket-newline": ["off"],
+  "vue/html-closing-bracket-spacing": ["off"],
+  "vue/html-end-tags": ["off"],
+  "vue/html-indent": ["off"],
+  "vue/html-quotes": ["off"],
+  "vue/html-self-closing": [0],
+  "vue/jsx-uses-vars": ["error"],
+  "vue/key-spacing": ["off"],
+  "vue/keyword-spacing": ["off"],
+  "vue/max-attributes-per-line": ["off"],
+  "vue/max-len": [0],
+  "vue/multi-word-component-names": ["off"],
+  "vue/multiline-html-element-content-newline": ["off"],
+  "vue/multiline-ternary": ["off"],
+  "vue/mustache-interpolation-spacing": ["off"],
+  "vue/no-arrow-functions-in-watch": ["error"],
+  "vue/no-async-in-computed-properties": ["error"],
+  "vue/no-child-content": ["error"],
+  "vue/no-computed-properties-in-data": ["error"],
+  "vue/no-deprecated-data-object-declaration": ["error"],
+  "vue/no-deprecated-destroyed-lifecycle": ["error"],
+  "vue/no-deprecated-dollar-listeners-api": ["error"],
+  "vue/no-deprecated-dollar-scopedslots-api": ["error"],
+  "vue/no-deprecated-events-api": ["error"],
+  "vue/no-deprecated-filter": ["error"],
+  "vue/no-deprecated-functional-template": ["error"],
+  "vue/no-deprecated-html-element-is": ["error"],
+  "vue/no-deprecated-inline-template": ["error"],
+  "vue/no-deprecated-props-default-this": ["error"],
+  "vue/no-deprecated-router-link-tag-prop": ["error"],
+  "vue/no-deprecated-scope-attribute": ["error"],
+  "vue/no-deprecated-slot-attribute": ["error"],
+  "vue/no-deprecated-slot-scope-attribute": ["error"],
+  "vue/no-deprecated-v-bind-sync": ["error"],
+  "vue/no-deprecated-v-is": ["error"],
+  "vue/no-deprecated-v-on-native-modifier": ["error"],
+  "vue/no-deprecated-v-on-number-modifiers": ["error"],
+  "vue/no-deprecated-vue-config-keycodes": ["error"],
+  "vue/no-dupe-keys": ["error"],
+  "vue/no-dupe-v-else-if": ["error"],
+  "vue/no-duplicate-attributes": ["error"],
+  "vue/no-export-in-script-setup": ["error"],
+  "vue/no-expose-after-await": ["error"],
+  "vue/no-extra-parens": ["off"],
+  "vue/no-lifecycle-after-await": ["error"],
+  "vue/no-lone-template": ["warn"],
+  "vue/no-multi-spaces": ["off"],
+  "vue/no-multiple-slot-args": ["warn"],
+  "vue/no-mutating-props": ["error"],
+  "vue/no-parsing-error": ["error"],
+  "vue/no-ref-as-operand": ["error"],
+  "vue/no-reserved-component-names": ["off"],
+  "vue/no-reserved-keys": ["error"],
+  "vue/no-reserved-props": ["error"],
+  "vue/no-shared-component-data": ["error"],
+  "vue/no-side-effects-in-computed-properties": ["error"],
+  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
+  "vue/no-template-key": ["error"],
+  "vue/no-template-shadow": ["warn"],
+  "vue/no-textarea-mustache": ["error"],
+  "vue/no-unused-components": ["error"],
+  "vue/no-unused-vars": [
+    "error",
+    {
+      "ignorePattern": "^_"
+    }
+  ],
+  "vue/no-use-computed-property-like-method": ["error"],
+  "vue/no-use-v-if-with-v-for": ["error"],
+  "vue/no-useless-template-attributes": ["error"],
+  "vue/no-v-for-template-key-on-child": ["error"],
+  "vue/no-v-html": ["warn"],
+  "vue/no-v-text-v-html-on-component": ["error"],
+  "vue/no-watch-after-await": ["error"],
+  "vue/object-curly-newline": ["off"],
+  "vue/object-curly-spacing": ["off"],
+  "vue/object-property-newline": ["off"],
+  "vue/one-component-per-file": ["warn"],
+  "vue/operator-linebreak": ["off"],
+  "vue/order-in-components": ["warn"],
+  "vue/prefer-import-from-vue": ["error"],
+  "vue/prop-name-casing": ["warn"],
+  "vue/quote-props": ["off"],
+  "vue/require-component-is": ["error"],
+  "vue/require-default-prop": ["warn"],
+  "vue/require-explicit-emits": ["warn"],
+  "vue/require-prop-type-constructor": ["error"],
+  "vue/require-prop-types": ["warn"],
+  "vue/require-render-return": ["error"],
+  "vue/require-slots-as-functions": ["error"],
+  "vue/require-toggle-inside-transition": ["error"],
+  "vue/require-v-for-key": ["error"],
+  "vue/require-valid-default-prop": ["error"],
+  "vue/return-in-computed-property": ["error"],
+  "vue/return-in-emits-validator": ["error"],
+  "vue/script-indent": ["off"],
+  "vue/singleline-html-element-content-newline": ["off"],
+  "vue/space-in-parens": ["off"],
+  "vue/space-infix-ops": ["off"],
+  "vue/space-unary-ops": ["off"],
+  "vue/template-curly-spacing": ["off"],
+  "vue/this-in-template": ["warn"],
+  "vue/use-v-on-exact": ["error"],
+  "vue/v-bind-style": ["warn"],
+  "vue/v-on-event-hyphenation": [
+    "warn",
+    "always",
+    {
+      "autofix": true
+    }
+  ],
+  "vue/v-on-style": ["warn"],
+  "vue/v-slot-style": ["warn"],
+  "vue/valid-attribute-name": ["error"],
+  "vue/valid-define-emits": ["error"],
+  "vue/valid-define-props": ["error"],
+  "vue/valid-next-tick": ["error"],
+  "vue/valid-template-root": ["error"],
+  "vue/valid-v-bind": ["error"],
+  "vue/valid-v-cloak": ["error"],
+  "vue/valid-v-else": ["error"],
+  "vue/valid-v-else-if": ["error"],
+  "vue/valid-v-for": ["off"],
+  "vue/valid-v-html": ["error"],
+  "vue/valid-v-if": ["error"],
+  "vue/valid-v-is": ["error"],
+  "vue/valid-v-memo": ["error"],
+  "vue/valid-v-model": ["error"],
+  "vue/valid-v-on": ["error"],
+  "vue/valid-v-once": ["error"],
+  "vue/valid-v-pre": ["error"],
+  "vue/valid-v-show": ["error"],
+  "vue/valid-v-slot": ["error"],
+  "vue/valid-v-text": ["error"],
+  "wrap-iife": ["off"],
+  "wrap-regex": ["off"],
+  "yield-star-spacing": ["off"]
+}

From ab11a90f8c1080fc371b8a965ad99c355ef7e84f Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Mon, 12 Aug 2024 23:16:03 +0200
Subject: [PATCH 040/273] pdf: move eslint config to .eslintrc.json

The config migrator needs the configuration to
be in a separate file.
https://eslint.org/blog/2024/05/eslint-configuration-migrator/
---
 pdf/.eslintrc.json | 49 +++++++++++++++++++++++++++++++++++++++++
 pdf/package.json   | 55 ----------------------------------------------
 2 files changed, 49 insertions(+), 55 deletions(-)
 create mode 100644 pdf/.eslintrc.json

diff --git a/pdf/.eslintrc.json b/pdf/.eslintrc.json
new file mode 100644
index 0000000000..80a8eda4fc
--- /dev/null
+++ b/pdf/.eslintrc.json
@@ -0,0 +1,49 @@
+{
+  "root": true,
+  "env": {
+    "node": true,
+    "jest": true
+  },
+  "extends": [
+    "plugin:vue/vue3-recommended",
+    "eslint:recommended",
+    "plugin:prettier/recommended",
+    "@vue/eslint-config-prettier"
+  ],
+  "rules": {
+    "prefer-const": "error",
+    "prettier/prettier": "error",
+    "vue/component-tags-order": [
+      "error",
+      {
+        "order": ["template", "script", "style"]
+      }
+    ],
+    "vue/multi-word-component-names": "off",
+    "vue/valid-v-for": "off",
+    "vue/no-reserved-component-names": "off",
+    "vue/no-unused-vars": [
+      "error",
+      {
+        "ignorePattern": "^_"
+      }
+    ],
+    "no-unused-vars": [
+      "error",
+      {
+        "argsIgnorePattern": "^_$"
+      }
+    ],
+    "local-rules/matching-translation-keys": [
+      "error",
+      {
+        "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
+        "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
+      }
+    ]
+  },
+  "parserOptions": {
+    "parser": "@babel/eslint-parser"
+  },
+  "plugins": ["eslint-plugin-local-rules"]
+}
diff --git a/pdf/package.json b/pdf/package.json
index 0138d512b3..dd6a9371eb 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -54,60 +54,5 @@
     "url-template": "3.1.1",
     "vite": "5.4.0",
     "vitest": "2.0.5"
-  },
-  "eslintConfig": {
-    "root": true,
-    "env": {
-      "node": true,
-      "jest": true
-    },
-    "extends": [
-      "plugin:vue/vue3-recommended",
-      "eslint:recommended",
-      "plugin:prettier/recommended",
-      "@vue/eslint-config-prettier"
-    ],
-    "rules": {
-      "prefer-const": "error",
-      "prettier/prettier": "error",
-      "vue/component-tags-order": [
-        "error",
-        {
-          "order": [
-            "template",
-            "script",
-            "style"
-          ]
-        }
-      ],
-      "vue/multi-word-component-names": "off",
-      "vue/valid-v-for": "off",
-      "vue/no-reserved-component-names": "off",
-      "vue/no-unused-vars": [
-        "error",
-        {
-          "ignorePattern": "^_"
-        }
-      ],
-      "no-unused-vars": [
-        "error",
-        {
-          "argsIgnorePattern": "^_$"
-        }
-      ],
-      "local-rules/matching-translation-keys": [
-        "error",
-        {
-          "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
-          "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
-        }
-      ]
-    },
-    "parserOptions": {
-      "parser": "@babel/eslint-parser"
-    },
-    "plugins": [
-      "eslint-plugin-local-rules"
-    ]
   }
 }

From 57c39e1a3e510f7f9f6f408e8ac3de2822ee87f8 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Mon, 12 Aug 2024 23:24:17 +0200
Subject: [PATCH 041/273] pdf: migrate to flat config

Using npx @eslint/migrate-config .eslintrc.json
Then add the additional packages needed
(@eslint/compat, globals, @eslint/eslintrc, @eslint/js)
Add paths from the .gitignore file to the ignored patterns.
Remove the options from the call to eslint which are not
supported anymore in the package.json.
Also run mjs files through the prettier.

Issue: #5282
---
 pdf/.eslintrc.json         |  49 ---
 pdf/eslint-config-js.json  | 660 +++++++++++++++++++------------------
 pdf/eslint-config-vue.json | 660 +++++++++++++++++++------------------
 pdf/eslint.config.mjs      |  86 +++++
 pdf/package-lock.json      | 141 ++++++--
 pdf/package.json           |  12 +-
 6 files changed, 876 insertions(+), 732 deletions(-)
 delete mode 100644 pdf/.eslintrc.json
 create mode 100644 pdf/eslint.config.mjs

diff --git a/pdf/.eslintrc.json b/pdf/.eslintrc.json
deleted file mode 100644
index 80a8eda4fc..0000000000
--- a/pdf/.eslintrc.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-  "root": true,
-  "env": {
-    "node": true,
-    "jest": true
-  },
-  "extends": [
-    "plugin:vue/vue3-recommended",
-    "eslint:recommended",
-    "plugin:prettier/recommended",
-    "@vue/eslint-config-prettier"
-  ],
-  "rules": {
-    "prefer-const": "error",
-    "prettier/prettier": "error",
-    "vue/component-tags-order": [
-      "error",
-      {
-        "order": ["template", "script", "style"]
-      }
-    ],
-    "vue/multi-word-component-names": "off",
-    "vue/valid-v-for": "off",
-    "vue/no-reserved-component-names": "off",
-    "vue/no-unused-vars": [
-      "error",
-      {
-        "ignorePattern": "^_"
-      }
-    ],
-    "no-unused-vars": [
-      "error",
-      {
-        "argsIgnorePattern": "^_$"
-      }
-    ],
-    "local-rules/matching-translation-keys": [
-      "error",
-      {
-        "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
-        "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
-      }
-    ]
-  },
-  "parserOptions": {
-    "parser": "@babel/eslint-parser"
-  },
-  "plugins": ["eslint-plugin-local-rules"]
-}
diff --git a/pdf/eslint-config-js.json b/pdf/eslint-config-js.json
index 1bd0467b04..762afc124f 100644
--- a/pdf/eslint-config-js.json
+++ b/pdf/eslint-config-js.json
@@ -1,372 +1,374 @@
 {
-  "@babel/object-curly-spacing": ["off"],
-  "@babel/semi": ["off"],
-  "@typescript-eslint/block-spacing": ["off"],
-  "@typescript-eslint/brace-style": ["off"],
-  "@typescript-eslint/comma-dangle": ["off"],
-  "@typescript-eslint/comma-spacing": ["off"],
-  "@typescript-eslint/func-call-spacing": ["off"],
-  "@typescript-eslint/indent": ["off"],
-  "@typescript-eslint/key-spacing": ["off"],
-  "@typescript-eslint/keyword-spacing": ["off"],
+  "@babel/object-curly-spacing": [0],
+  "@babel/semi": [0],
+  "@typescript-eslint/block-spacing": [0],
+  "@typescript-eslint/brace-style": [0],
+  "@typescript-eslint/comma-dangle": [0],
+  "@typescript-eslint/comma-spacing": [0],
+  "@typescript-eslint/func-call-spacing": [0],
+  "@typescript-eslint/indent": [0],
+  "@typescript-eslint/key-spacing": [0],
+  "@typescript-eslint/keyword-spacing": [0],
   "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": ["off"],
-  "@typescript-eslint/no-extra-parens": ["off"],
-  "@typescript-eslint/no-extra-semi": ["off"],
-  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/member-delimiter-style": [0],
+  "@typescript-eslint/no-extra-parens": [0],
+  "@typescript-eslint/no-extra-semi": [0],
+  "@typescript-eslint/object-curly-spacing": [0],
   "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": ["off"],
-  "@typescript-eslint/space-before-blocks": ["off"],
-  "@typescript-eslint/space-before-function-paren": ["off"],
-  "@typescript-eslint/space-infix-ops": ["off"],
-  "@typescript-eslint/type-annotation-spacing": ["off"],
-  "array-bracket-newline": ["off"],
-  "array-bracket-spacing": ["off"],
-  "array-element-newline": ["off"],
-  "arrow-body-style": ["off"],
-  "arrow-parens": ["off"],
-  "arrow-spacing": ["off"],
-  "babel/object-curly-spacing": ["off"],
+  "@typescript-eslint/semi": [0],
+  "@typescript-eslint/space-before-blocks": [0],
+  "@typescript-eslint/space-before-function-paren": [0],
+  "@typescript-eslint/space-infix-ops": [0],
+  "@typescript-eslint/type-annotation-spacing": [0],
+  "array-bracket-newline": [0],
+  "array-bracket-spacing": [0],
+  "array-element-newline": [0],
+  "arrow-body-style": [0],
+  "arrow-parens": [0],
+  "arrow-spacing": [0],
+  "babel/object-curly-spacing": [0],
   "babel/quotes": [0],
-  "babel/semi": ["off"],
-  "block-spacing": ["off"],
-  "brace-style": ["off"],
-  "comma-dangle": ["off"],
-  "comma-spacing": ["off"],
-  "comma-style": ["off"],
-  "computed-property-spacing": ["off"],
-  "constructor-super": ["error"],
+  "babel/semi": [0],
+  "block-spacing": [0],
+  "brace-style": [0],
+  "comma-dangle": [0],
+  "comma-spacing": [0],
+  "comma-style": [0],
+  "computed-property-spacing": [0],
+  "constructor-super": [2],
   "curly": [0],
-  "dot-location": ["off"],
-  "eol-last": ["off"],
-  "flowtype/boolean-style": ["off"],
-  "flowtype/delimiter-dangle": ["off"],
-  "flowtype/generic-spacing": ["off"],
-  "flowtype/object-type-curly-spacing": ["off"],
-  "flowtype/object-type-delimiter": ["off"],
-  "flowtype/quotes": ["off"],
-  "flowtype/semi": ["off"],
-  "flowtype/space-after-type-colon": ["off"],
-  "flowtype/space-before-generic-bracket": ["off"],
-  "flowtype/space-before-type-colon": ["off"],
-  "flowtype/union-intersection-spacing": ["off"],
-  "for-direction": ["error"],
-  "func-call-spacing": ["off"],
-  "function-call-argument-newline": ["off"],
-  "function-paren-newline": ["off"],
-  "generator-star": ["off"],
-  "generator-star-spacing": ["off"],
-  "getter-return": ["error"],
-  "implicit-arrow-linebreak": ["off"],
-  "indent": ["off"],
-  "indent-legacy": ["off"],
-  "jsx-quotes": ["off"],
-  "key-spacing": ["off"],
-  "keyword-spacing": ["off"],
-  "linebreak-style": ["off"],
+  "dot-location": [0],
+  "eol-last": [0],
+  "flowtype/boolean-style": [0],
+  "flowtype/delimiter-dangle": [0],
+  "flowtype/generic-spacing": [0],
+  "flowtype/object-type-curly-spacing": [0],
+  "flowtype/object-type-delimiter": [0],
+  "flowtype/quotes": [0],
+  "flowtype/semi": [0],
+  "flowtype/space-after-type-colon": [0],
+  "flowtype/space-before-generic-bracket": [0],
+  "flowtype/space-before-type-colon": [0],
+  "flowtype/union-intersection-spacing": [0],
+  "for-direction": [2],
+  "func-call-spacing": [0],
+  "function-call-argument-newline": [0],
+  "function-paren-newline": [0],
+  "generator-star": [0],
+  "generator-star-spacing": [0],
+  "getter-return": [2],
+  "implicit-arrow-linebreak": [0],
+  "indent": [0],
+  "indent-legacy": [0],
+  "jsx-quotes": [0],
+  "key-spacing": [0],
+  "keyword-spacing": [0],
+  "linebreak-style": [0],
   "lines-around-comment": [0],
   "local-rules/matching-translation-keys": [
-    "error",
+    2,
     {
       "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
       "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
     }
   ],
   "max-len": [0],
-  "max-statements-per-line": ["off"],
-  "multiline-ternary": ["off"],
-  "new-parens": ["off"],
-  "newline-per-chained-call": ["off"],
-  "no-arrow-condition": ["off"],
-  "no-async-promise-executor": ["error"],
-  "no-case-declarations": ["error"],
-  "no-class-assign": ["error"],
-  "no-comma-dangle": ["off"],
-  "no-compare-neg-zero": ["error"],
-  "no-cond-assign": ["error"],
+  "max-statements-per-line": [0],
+  "multiline-ternary": [0],
+  "new-parens": [0],
+  "newline-per-chained-call": [0],
+  "no-arrow-condition": [0],
+  "no-async-promise-executor": [2],
+  "no-case-declarations": [2],
+  "no-class-assign": [2],
+  "no-comma-dangle": [0],
+  "no-compare-neg-zero": [2],
+  "no-cond-assign": [2],
   "no-confusing-arrow": [0],
-  "no-const-assign": ["error"],
-  "no-constant-condition": ["error"],
-  "no-control-regex": ["error"],
-  "no-debugger": ["error"],
-  "no-delete-var": ["error"],
-  "no-dupe-args": ["error"],
-  "no-dupe-class-members": ["error"],
-  "no-dupe-else-if": ["error"],
-  "no-dupe-keys": ["error"],
-  "no-duplicate-case": ["error"],
-  "no-empty": ["error"],
-  "no-empty-character-class": ["error"],
-  "no-empty-pattern": ["error"],
-  "no-ex-assign": ["error"],
-  "no-extra-boolean-cast": ["error"],
-  "no-extra-parens": ["off"],
-  "no-extra-semi": ["off"],
-  "no-fallthrough": ["error"],
-  "no-floating-decimal": ["off"],
-  "no-func-assign": ["error"],
-  "no-global-assign": ["error"],
-  "no-import-assign": ["error"],
-  "no-inner-declarations": ["error"],
-  "no-invalid-regexp": ["error"],
-  "no-irregular-whitespace": ["error"],
-  "no-loss-of-precision": ["error"],
-  "no-misleading-character-class": ["error"],
+  "no-const-assign": [2],
+  "no-constant-binary-expression": [2],
+  "no-constant-condition": [2],
+  "no-control-regex": [2],
+  "no-debugger": [2],
+  "no-delete-var": [2],
+  "no-dupe-args": [2],
+  "no-dupe-class-members": [2],
+  "no-dupe-else-if": [2],
+  "no-dupe-keys": [2],
+  "no-duplicate-case": [2],
+  "no-empty": [2],
+  "no-empty-character-class": [2],
+  "no-empty-pattern": [2],
+  "no-empty-static-block": [2],
+  "no-ex-assign": [2],
+  "no-extra-boolean-cast": [2],
+  "no-extra-parens": [0],
+  "no-extra-semi": [0],
+  "no-fallthrough": [2],
+  "no-floating-decimal": [0],
+  "no-func-assign": [2],
+  "no-global-assign": [2],
+  "no-import-assign": [2],
+  "no-invalid-regexp": [2],
+  "no-irregular-whitespace": [2],
+  "no-loss-of-precision": [2],
+  "no-misleading-character-class": [2],
   "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": ["off"],
-  "no-multi-spaces": ["off"],
-  "no-multiple-empty-lines": ["off"],
-  "no-new-symbol": ["error"],
-  "no-nonoctal-decimal-escape": ["error"],
-  "no-obj-calls": ["error"],
-  "no-octal": ["error"],
-  "no-prototype-builtins": ["error"],
-  "no-redeclare": ["error"],
-  "no-regex-spaces": ["error"],
-  "no-reserved-keys": ["off"],
-  "no-self-assign": ["error"],
-  "no-setter-return": ["error"],
-  "no-shadow-restricted-names": ["error"],
-  "no-space-before-semi": ["off"],
-  "no-spaced-func": ["off"],
-  "no-sparse-arrays": ["error"],
+  "no-mixed-spaces-and-tabs": [0],
+  "no-multi-spaces": [0],
+  "no-multiple-empty-lines": [0],
+  "no-new-native-nonconstructor": [2],
+  "no-nonoctal-decimal-escape": [2],
+  "no-obj-calls": [2],
+  "no-octal": [2],
+  "no-prototype-builtins": [2],
+  "no-redeclare": [2],
+  "no-regex-spaces": [2],
+  "no-reserved-keys": [0],
+  "no-self-assign": [2],
+  "no-setter-return": [2],
+  "no-shadow-restricted-names": [2],
+  "no-space-before-semi": [0],
+  "no-spaced-func": [0],
+  "no-sparse-arrays": [2],
   "no-tabs": [0],
-  "no-this-before-super": ["error"],
-  "no-trailing-spaces": ["off"],
-  "no-undef": ["error"],
+  "no-this-before-super": [2],
+  "no-trailing-spaces": [0],
+  "no-undef": [2],
   "no-unexpected-multiline": [0],
-  "no-unreachable": ["error"],
-  "no-unsafe-finally": ["error"],
-  "no-unsafe-negation": ["error"],
-  "no-unsafe-optional-chaining": ["error"],
-  "no-unused-labels": ["error"],
+  "no-unreachable": [2],
+  "no-unsafe-finally": [2],
+  "no-unsafe-negation": [2],
+  "no-unsafe-optional-chaining": [2],
+  "no-unused-labels": [2],
+  "no-unused-private-class-members": [2],
   "no-unused-vars": [
-    "error",
+    2,
     {
       "argsIgnorePattern": "^_$"
     }
   ],
-  "no-useless-backreference": ["error"],
-  "no-useless-catch": ["error"],
-  "no-useless-escape": ["error"],
-  "no-whitespace-before-property": ["off"],
-  "no-with": ["error"],
-  "no-wrap-func": ["off"],
-  "nonblock-statement-body-position": ["off"],
-  "object-curly-newline": ["off"],
-  "object-curly-spacing": ["off"],
-  "object-property-newline": ["off"],
-  "one-var-declaration-per-line": ["off"],
-  "operator-linebreak": ["off"],
-  "padded-blocks": ["off"],
-  "prefer-arrow-callback": ["off"],
-  "prefer-const": ["error"],
-  "prettier/prettier": ["error"],
-  "quote-props": ["off"],
+  "no-useless-backreference": [2],
+  "no-useless-catch": [2],
+  "no-useless-escape": [2],
+  "no-whitespace-before-property": [0],
+  "no-with": [2],
+  "no-wrap-func": [0],
+  "nonblock-statement-body-position": [0],
+  "object-curly-newline": [0],
+  "object-curly-spacing": [0],
+  "object-property-newline": [0],
+  "one-var-declaration-per-line": [0],
+  "operator-linebreak": [0],
+  "padded-blocks": [0],
+  "prefer-arrow-callback": [0],
+  "prefer-const": [2],
+  "prettier/prettier": [2],
+  "quote-props": [0],
   "quotes": [0],
-  "react/jsx-child-element-spacing": ["off"],
-  "react/jsx-closing-bracket-location": ["off"],
-  "react/jsx-closing-tag-location": ["off"],
-  "react/jsx-curly-newline": ["off"],
-  "react/jsx-curly-spacing": ["off"],
-  "react/jsx-equals-spacing": ["off"],
-  "react/jsx-first-prop-new-line": ["off"],
-  "react/jsx-indent": ["off"],
-  "react/jsx-indent-props": ["off"],
-  "react/jsx-max-props-per-line": ["off"],
-  "react/jsx-newline": ["off"],
-  "react/jsx-one-expression-per-line": ["off"],
-  "react/jsx-props-no-multi-spaces": ["off"],
-  "react/jsx-space-before-closing": ["off"],
-  "react/jsx-tag-spacing": ["off"],
-  "react/jsx-wrap-multilines": ["off"],
-  "require-yield": ["error"],
-  "rest-spread-spacing": ["off"],
-  "semi": ["off"],
-  "semi-spacing": ["off"],
-  "semi-style": ["off"],
-  "space-after-function-name": ["off"],
-  "space-after-keywords": ["off"],
-  "space-before-blocks": ["off"],
-  "space-before-function-paren": ["off"],
-  "space-before-function-parentheses": ["off"],
-  "space-before-keywords": ["off"],
-  "space-in-brackets": ["off"],
-  "space-in-parens": ["off"],
-  "space-infix-ops": ["off"],
-  "space-return-throw-case": ["off"],
-  "space-unary-ops": ["off"],
-  "space-unary-word-ops": ["off"],
-  "standard/array-bracket-even-spacing": ["off"],
-  "standard/computed-property-even-spacing": ["off"],
-  "standard/object-curly-even-spacing": ["off"],
-  "switch-colon-spacing": ["off"],
-  "template-curly-spacing": ["off"],
-  "template-tag-spacing": ["off"],
-  "unicorn/empty-brace-spaces": ["off"],
-  "unicorn/no-nested-ternary": ["off"],
-  "unicorn/number-literal-case": ["off"],
+  "react/jsx-child-element-spacing": [0],
+  "react/jsx-closing-bracket-location": [0],
+  "react/jsx-closing-tag-location": [0],
+  "react/jsx-curly-newline": [0],
+  "react/jsx-curly-spacing": [0],
+  "react/jsx-equals-spacing": [0],
+  "react/jsx-first-prop-new-line": [0],
+  "react/jsx-indent": [0],
+  "react/jsx-indent-props": [0],
+  "react/jsx-max-props-per-line": [0],
+  "react/jsx-newline": [0],
+  "react/jsx-one-expression-per-line": [0],
+  "react/jsx-props-no-multi-spaces": [0],
+  "react/jsx-space-before-closing": [0],
+  "react/jsx-tag-spacing": [0],
+  "react/jsx-wrap-multilines": [0],
+  "require-yield": [2],
+  "rest-spread-spacing": [0],
+  "semi": [0],
+  "semi-spacing": [0],
+  "semi-style": [0],
+  "space-after-function-name": [0],
+  "space-after-keywords": [0],
+  "space-before-blocks": [0],
+  "space-before-function-paren": [0],
+  "space-before-function-parentheses": [0],
+  "space-before-keywords": [0],
+  "space-in-brackets": [0],
+  "space-in-parens": [0],
+  "space-infix-ops": [0],
+  "space-return-throw-case": [0],
+  "space-unary-ops": [0],
+  "space-unary-word-ops": [0],
+  "standard/array-bracket-even-spacing": [0],
+  "standard/computed-property-even-spacing": [0],
+  "standard/object-curly-even-spacing": [0],
+  "switch-colon-spacing": [0],
+  "template-curly-spacing": [0],
+  "template-tag-spacing": [0],
+  "unicorn/empty-brace-spaces": [0],
+  "unicorn/no-nested-ternary": [0],
+  "unicorn/number-literal-case": [0],
   "unicorn/template-indent": [0],
-  "use-isnan": ["error"],
-  "valid-typeof": ["error"],
-  "vue/array-bracket-newline": ["off"],
-  "vue/array-bracket-spacing": ["off"],
-  "vue/array-element-newline": ["off"],
-  "vue/arrow-spacing": ["off"],
-  "vue/attribute-hyphenation": ["warn"],
-  "vue/attributes-order": ["warn"],
-  "vue/block-spacing": ["off"],
-  "vue/block-tag-newline": ["off"],
-  "vue/brace-style": ["off"],
-  "vue/comma-dangle": ["off"],
-  "vue/comma-spacing": ["off"],
-  "vue/comma-style": ["off"],
-  "vue/comment-directive": ["error"],
-  "vue/component-definition-name-casing": ["warn"],
+  "use-isnan": [2],
+  "valid-typeof": [2],
+  "vue/array-bracket-newline": [0],
+  "vue/array-bracket-spacing": [0],
+  "vue/array-element-newline": [0],
+  "vue/arrow-spacing": [0],
+  "vue/attribute-hyphenation": [1],
+  "vue/attributes-order": [1],
+  "vue/block-spacing": [0],
+  "vue/block-tag-newline": [0],
+  "vue/brace-style": [0],
+  "vue/comma-dangle": [0],
+  "vue/comma-spacing": [0],
+  "vue/comma-style": [0],
+  "vue/comment-directive": [2],
+  "vue/component-definition-name-casing": [1],
   "vue/component-tags-order": [
-    "error",
+    2,
     {
       "order": ["template", "script", "style"]
     }
   ],
-  "vue/dot-location": ["off"],
-  "vue/first-attribute-linebreak": ["warn"],
-  "vue/func-call-spacing": ["off"],
-  "vue/html-closing-bracket-newline": ["off"],
-  "vue/html-closing-bracket-spacing": ["off"],
-  "vue/html-end-tags": ["off"],
-  "vue/html-indent": ["off"],
-  "vue/html-quotes": ["off"],
+  "vue/dot-location": [0],
+  "vue/first-attribute-linebreak": [1],
+  "vue/func-call-spacing": [0],
+  "vue/html-closing-bracket-newline": [0],
+  "vue/html-closing-bracket-spacing": [0],
+  "vue/html-end-tags": [0],
+  "vue/html-indent": [0],
+  "vue/html-quotes": [0],
   "vue/html-self-closing": [0],
-  "vue/jsx-uses-vars": ["error"],
-  "vue/key-spacing": ["off"],
-  "vue/keyword-spacing": ["off"],
-  "vue/max-attributes-per-line": ["off"],
+  "vue/jsx-uses-vars": [2],
+  "vue/key-spacing": [0],
+  "vue/keyword-spacing": [0],
+  "vue/max-attributes-per-line": [0],
   "vue/max-len": [0],
-  "vue/multi-word-component-names": ["off"],
-  "vue/multiline-html-element-content-newline": ["off"],
-  "vue/multiline-ternary": ["off"],
-  "vue/mustache-interpolation-spacing": ["off"],
-  "vue/no-arrow-functions-in-watch": ["error"],
-  "vue/no-async-in-computed-properties": ["error"],
-  "vue/no-child-content": ["error"],
-  "vue/no-computed-properties-in-data": ["error"],
-  "vue/no-deprecated-data-object-declaration": ["error"],
-  "vue/no-deprecated-destroyed-lifecycle": ["error"],
-  "vue/no-deprecated-dollar-listeners-api": ["error"],
-  "vue/no-deprecated-dollar-scopedslots-api": ["error"],
-  "vue/no-deprecated-events-api": ["error"],
-  "vue/no-deprecated-filter": ["error"],
-  "vue/no-deprecated-functional-template": ["error"],
-  "vue/no-deprecated-html-element-is": ["error"],
-  "vue/no-deprecated-inline-template": ["error"],
-  "vue/no-deprecated-props-default-this": ["error"],
-  "vue/no-deprecated-router-link-tag-prop": ["error"],
-  "vue/no-deprecated-scope-attribute": ["error"],
-  "vue/no-deprecated-slot-attribute": ["error"],
-  "vue/no-deprecated-slot-scope-attribute": ["error"],
-  "vue/no-deprecated-v-bind-sync": ["error"],
-  "vue/no-deprecated-v-is": ["error"],
-  "vue/no-deprecated-v-on-native-modifier": ["error"],
-  "vue/no-deprecated-v-on-number-modifiers": ["error"],
-  "vue/no-deprecated-vue-config-keycodes": ["error"],
-  "vue/no-dupe-keys": ["error"],
-  "vue/no-dupe-v-else-if": ["error"],
-  "vue/no-duplicate-attributes": ["error"],
-  "vue/no-export-in-script-setup": ["error"],
-  "vue/no-expose-after-await": ["error"],
-  "vue/no-extra-parens": ["off"],
-  "vue/no-lifecycle-after-await": ["error"],
-  "vue/no-lone-template": ["warn"],
-  "vue/no-multi-spaces": ["off"],
-  "vue/no-multiple-slot-args": ["warn"],
-  "vue/no-mutating-props": ["error"],
-  "vue/no-parsing-error": ["error"],
-  "vue/no-ref-as-operand": ["error"],
-  "vue/no-reserved-component-names": ["off"],
-  "vue/no-reserved-keys": ["error"],
-  "vue/no-reserved-props": ["error"],
-  "vue/no-shared-component-data": ["error"],
-  "vue/no-side-effects-in-computed-properties": ["error"],
-  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
-  "vue/no-template-key": ["error"],
-  "vue/no-template-shadow": ["warn"],
-  "vue/no-textarea-mustache": ["error"],
-  "vue/no-unused-components": ["error"],
+  "vue/multi-word-component-names": [0],
+  "vue/multiline-html-element-content-newline": [0],
+  "vue/multiline-ternary": [0],
+  "vue/mustache-interpolation-spacing": [0],
+  "vue/no-arrow-functions-in-watch": [2],
+  "vue/no-async-in-computed-properties": [2],
+  "vue/no-child-content": [2],
+  "vue/no-computed-properties-in-data": [2],
+  "vue/no-deprecated-data-object-declaration": [2],
+  "vue/no-deprecated-destroyed-lifecycle": [2],
+  "vue/no-deprecated-dollar-listeners-api": [2],
+  "vue/no-deprecated-dollar-scopedslots-api": [2],
+  "vue/no-deprecated-events-api": [2],
+  "vue/no-deprecated-filter": [2],
+  "vue/no-deprecated-functional-template": [2],
+  "vue/no-deprecated-html-element-is": [2],
+  "vue/no-deprecated-inline-template": [2],
+  "vue/no-deprecated-props-default-this": [2],
+  "vue/no-deprecated-router-link-tag-prop": [2],
+  "vue/no-deprecated-scope-attribute": [2],
+  "vue/no-deprecated-slot-attribute": [2],
+  "vue/no-deprecated-slot-scope-attribute": [2],
+  "vue/no-deprecated-v-bind-sync": [2],
+  "vue/no-deprecated-v-is": [2],
+  "vue/no-deprecated-v-on-native-modifier": [2],
+  "vue/no-deprecated-v-on-number-modifiers": [2],
+  "vue/no-deprecated-vue-config-keycodes": [2],
+  "vue/no-dupe-keys": [2],
+  "vue/no-dupe-v-else-if": [2],
+  "vue/no-duplicate-attributes": [2],
+  "vue/no-export-in-script-setup": [2],
+  "vue/no-expose-after-await": [2],
+  "vue/no-extra-parens": [0],
+  "vue/no-lifecycle-after-await": [2],
+  "vue/no-lone-template": [1],
+  "vue/no-multi-spaces": [0],
+  "vue/no-multiple-slot-args": [1],
+  "vue/no-mutating-props": [2],
+  "vue/no-parsing-error": [2],
+  "vue/no-ref-as-operand": [2],
+  "vue/no-reserved-component-names": [0],
+  "vue/no-reserved-keys": [2],
+  "vue/no-reserved-props": [2],
+  "vue/no-shared-component-data": [2],
+  "vue/no-side-effects-in-computed-properties": [2],
+  "vue/no-spaces-around-equal-signs-in-attribute": [0],
+  "vue/no-template-key": [2],
+  "vue/no-template-shadow": [1],
+  "vue/no-textarea-mustache": [2],
+  "vue/no-unused-components": [2],
   "vue/no-unused-vars": [
-    "error",
+    2,
     {
       "ignorePattern": "^_"
     }
   ],
-  "vue/no-use-computed-property-like-method": ["error"],
-  "vue/no-use-v-if-with-v-for": ["error"],
-  "vue/no-useless-template-attributes": ["error"],
-  "vue/no-v-for-template-key-on-child": ["error"],
-  "vue/no-v-html": ["warn"],
-  "vue/no-v-text-v-html-on-component": ["error"],
-  "vue/no-watch-after-await": ["error"],
-  "vue/object-curly-newline": ["off"],
-  "vue/object-curly-spacing": ["off"],
-  "vue/object-property-newline": ["off"],
-  "vue/one-component-per-file": ["warn"],
-  "vue/operator-linebreak": ["off"],
-  "vue/order-in-components": ["warn"],
-  "vue/prefer-import-from-vue": ["error"],
-  "vue/prop-name-casing": ["warn"],
-  "vue/quote-props": ["off"],
-  "vue/require-component-is": ["error"],
-  "vue/require-default-prop": ["warn"],
-  "vue/require-explicit-emits": ["warn"],
-  "vue/require-prop-type-constructor": ["error"],
-  "vue/require-prop-types": ["warn"],
-  "vue/require-render-return": ["error"],
-  "vue/require-slots-as-functions": ["error"],
-  "vue/require-toggle-inside-transition": ["error"],
-  "vue/require-v-for-key": ["error"],
-  "vue/require-valid-default-prop": ["error"],
-  "vue/return-in-computed-property": ["error"],
-  "vue/return-in-emits-validator": ["error"],
-  "vue/script-indent": ["off"],
-  "vue/singleline-html-element-content-newline": ["off"],
-  "vue/space-in-parens": ["off"],
-  "vue/space-infix-ops": ["off"],
-  "vue/space-unary-ops": ["off"],
-  "vue/template-curly-spacing": ["off"],
-  "vue/this-in-template": ["warn"],
-  "vue/use-v-on-exact": ["error"],
-  "vue/v-bind-style": ["warn"],
+  "vue/no-use-computed-property-like-method": [2],
+  "vue/no-use-v-if-with-v-for": [2],
+  "vue/no-useless-template-attributes": [2],
+  "vue/no-v-for-template-key-on-child": [2],
+  "vue/no-v-html": [1],
+  "vue/no-v-text-v-html-on-component": [2],
+  "vue/no-watch-after-await": [2],
+  "vue/object-curly-newline": [0],
+  "vue/object-curly-spacing": [0],
+  "vue/object-property-newline": [0],
+  "vue/one-component-per-file": [1],
+  "vue/operator-linebreak": [0],
+  "vue/order-in-components": [1],
+  "vue/prefer-import-from-vue": [2],
+  "vue/prop-name-casing": [1],
+  "vue/quote-props": [0],
+  "vue/require-component-is": [2],
+  "vue/require-default-prop": [1],
+  "vue/require-explicit-emits": [1],
+  "vue/require-prop-type-constructor": [2],
+  "vue/require-prop-types": [1],
+  "vue/require-render-return": [2],
+  "vue/require-slots-as-functions": [2],
+  "vue/require-toggle-inside-transition": [2],
+  "vue/require-v-for-key": [2],
+  "vue/require-valid-default-prop": [2],
+  "vue/return-in-computed-property": [2],
+  "vue/return-in-emits-validator": [2],
+  "vue/script-indent": [0],
+  "vue/singleline-html-element-content-newline": [0],
+  "vue/space-in-parens": [0],
+  "vue/space-infix-ops": [0],
+  "vue/space-unary-ops": [0],
+  "vue/template-curly-spacing": [0],
+  "vue/this-in-template": [1],
+  "vue/use-v-on-exact": [2],
+  "vue/v-bind-style": [1],
   "vue/v-on-event-hyphenation": [
-    "warn",
+    1,
     "always",
     {
       "autofix": true
     }
   ],
-  "vue/v-on-style": ["warn"],
-  "vue/v-slot-style": ["warn"],
-  "vue/valid-attribute-name": ["error"],
-  "vue/valid-define-emits": ["error"],
-  "vue/valid-define-props": ["error"],
-  "vue/valid-next-tick": ["error"],
-  "vue/valid-template-root": ["error"],
-  "vue/valid-v-bind": ["error"],
-  "vue/valid-v-cloak": ["error"],
-  "vue/valid-v-else": ["error"],
-  "vue/valid-v-else-if": ["error"],
-  "vue/valid-v-for": ["off"],
-  "vue/valid-v-html": ["error"],
-  "vue/valid-v-if": ["error"],
-  "vue/valid-v-is": ["error"],
-  "vue/valid-v-memo": ["error"],
-  "vue/valid-v-model": ["error"],
-  "vue/valid-v-on": ["error"],
-  "vue/valid-v-once": ["error"],
-  "vue/valid-v-pre": ["error"],
-  "vue/valid-v-show": ["error"],
-  "vue/valid-v-slot": ["error"],
-  "vue/valid-v-text": ["error"],
-  "wrap-iife": ["off"],
-  "wrap-regex": ["off"],
-  "yield-star-spacing": ["off"]
+  "vue/v-on-style": [1],
+  "vue/v-slot-style": [1],
+  "vue/valid-attribute-name": [2],
+  "vue/valid-define-emits": [2],
+  "vue/valid-define-props": [2],
+  "vue/valid-next-tick": [2],
+  "vue/valid-template-root": [2],
+  "vue/valid-v-bind": [2],
+  "vue/valid-v-cloak": [2],
+  "vue/valid-v-else": [2],
+  "vue/valid-v-else-if": [2],
+  "vue/valid-v-for": [0],
+  "vue/valid-v-html": [2],
+  "vue/valid-v-if": [2],
+  "vue/valid-v-is": [2],
+  "vue/valid-v-memo": [2],
+  "vue/valid-v-model": [2],
+  "vue/valid-v-on": [2],
+  "vue/valid-v-once": [2],
+  "vue/valid-v-pre": [2],
+  "vue/valid-v-show": [2],
+  "vue/valid-v-slot": [2],
+  "vue/valid-v-text": [2],
+  "wrap-iife": [0],
+  "wrap-regex": [0],
+  "yield-star-spacing": [0]
 }
diff --git a/pdf/eslint-config-vue.json b/pdf/eslint-config-vue.json
index 1bd0467b04..762afc124f 100644
--- a/pdf/eslint-config-vue.json
+++ b/pdf/eslint-config-vue.json
@@ -1,372 +1,374 @@
 {
-  "@babel/object-curly-spacing": ["off"],
-  "@babel/semi": ["off"],
-  "@typescript-eslint/block-spacing": ["off"],
-  "@typescript-eslint/brace-style": ["off"],
-  "@typescript-eslint/comma-dangle": ["off"],
-  "@typescript-eslint/comma-spacing": ["off"],
-  "@typescript-eslint/func-call-spacing": ["off"],
-  "@typescript-eslint/indent": ["off"],
-  "@typescript-eslint/key-spacing": ["off"],
-  "@typescript-eslint/keyword-spacing": ["off"],
+  "@babel/object-curly-spacing": [0],
+  "@babel/semi": [0],
+  "@typescript-eslint/block-spacing": [0],
+  "@typescript-eslint/brace-style": [0],
+  "@typescript-eslint/comma-dangle": [0],
+  "@typescript-eslint/comma-spacing": [0],
+  "@typescript-eslint/func-call-spacing": [0],
+  "@typescript-eslint/indent": [0],
+  "@typescript-eslint/key-spacing": [0],
+  "@typescript-eslint/keyword-spacing": [0],
   "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": ["off"],
-  "@typescript-eslint/no-extra-parens": ["off"],
-  "@typescript-eslint/no-extra-semi": ["off"],
-  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/member-delimiter-style": [0],
+  "@typescript-eslint/no-extra-parens": [0],
+  "@typescript-eslint/no-extra-semi": [0],
+  "@typescript-eslint/object-curly-spacing": [0],
   "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": ["off"],
-  "@typescript-eslint/space-before-blocks": ["off"],
-  "@typescript-eslint/space-before-function-paren": ["off"],
-  "@typescript-eslint/space-infix-ops": ["off"],
-  "@typescript-eslint/type-annotation-spacing": ["off"],
-  "array-bracket-newline": ["off"],
-  "array-bracket-spacing": ["off"],
-  "array-element-newline": ["off"],
-  "arrow-body-style": ["off"],
-  "arrow-parens": ["off"],
-  "arrow-spacing": ["off"],
-  "babel/object-curly-spacing": ["off"],
+  "@typescript-eslint/semi": [0],
+  "@typescript-eslint/space-before-blocks": [0],
+  "@typescript-eslint/space-before-function-paren": [0],
+  "@typescript-eslint/space-infix-ops": [0],
+  "@typescript-eslint/type-annotation-spacing": [0],
+  "array-bracket-newline": [0],
+  "array-bracket-spacing": [0],
+  "array-element-newline": [0],
+  "arrow-body-style": [0],
+  "arrow-parens": [0],
+  "arrow-spacing": [0],
+  "babel/object-curly-spacing": [0],
   "babel/quotes": [0],
-  "babel/semi": ["off"],
-  "block-spacing": ["off"],
-  "brace-style": ["off"],
-  "comma-dangle": ["off"],
-  "comma-spacing": ["off"],
-  "comma-style": ["off"],
-  "computed-property-spacing": ["off"],
-  "constructor-super": ["error"],
+  "babel/semi": [0],
+  "block-spacing": [0],
+  "brace-style": [0],
+  "comma-dangle": [0],
+  "comma-spacing": [0],
+  "comma-style": [0],
+  "computed-property-spacing": [0],
+  "constructor-super": [2],
   "curly": [0],
-  "dot-location": ["off"],
-  "eol-last": ["off"],
-  "flowtype/boolean-style": ["off"],
-  "flowtype/delimiter-dangle": ["off"],
-  "flowtype/generic-spacing": ["off"],
-  "flowtype/object-type-curly-spacing": ["off"],
-  "flowtype/object-type-delimiter": ["off"],
-  "flowtype/quotes": ["off"],
-  "flowtype/semi": ["off"],
-  "flowtype/space-after-type-colon": ["off"],
-  "flowtype/space-before-generic-bracket": ["off"],
-  "flowtype/space-before-type-colon": ["off"],
-  "flowtype/union-intersection-spacing": ["off"],
-  "for-direction": ["error"],
-  "func-call-spacing": ["off"],
-  "function-call-argument-newline": ["off"],
-  "function-paren-newline": ["off"],
-  "generator-star": ["off"],
-  "generator-star-spacing": ["off"],
-  "getter-return": ["error"],
-  "implicit-arrow-linebreak": ["off"],
-  "indent": ["off"],
-  "indent-legacy": ["off"],
-  "jsx-quotes": ["off"],
-  "key-spacing": ["off"],
-  "keyword-spacing": ["off"],
-  "linebreak-style": ["off"],
+  "dot-location": [0],
+  "eol-last": [0],
+  "flowtype/boolean-style": [0],
+  "flowtype/delimiter-dangle": [0],
+  "flowtype/generic-spacing": [0],
+  "flowtype/object-type-curly-spacing": [0],
+  "flowtype/object-type-delimiter": [0],
+  "flowtype/quotes": [0],
+  "flowtype/semi": [0],
+  "flowtype/space-after-type-colon": [0],
+  "flowtype/space-before-generic-bracket": [0],
+  "flowtype/space-before-type-colon": [0],
+  "flowtype/union-intersection-spacing": [0],
+  "for-direction": [2],
+  "func-call-spacing": [0],
+  "function-call-argument-newline": [0],
+  "function-paren-newline": [0],
+  "generator-star": [0],
+  "generator-star-spacing": [0],
+  "getter-return": [2],
+  "implicit-arrow-linebreak": [0],
+  "indent": [0],
+  "indent-legacy": [0],
+  "jsx-quotes": [0],
+  "key-spacing": [0],
+  "keyword-spacing": [0],
+  "linebreak-style": [0],
   "lines-around-comment": [0],
   "local-rules/matching-translation-keys": [
-    "error",
+    2,
     {
       "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
       "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
     }
   ],
   "max-len": [0],
-  "max-statements-per-line": ["off"],
-  "multiline-ternary": ["off"],
-  "new-parens": ["off"],
-  "newline-per-chained-call": ["off"],
-  "no-arrow-condition": ["off"],
-  "no-async-promise-executor": ["error"],
-  "no-case-declarations": ["error"],
-  "no-class-assign": ["error"],
-  "no-comma-dangle": ["off"],
-  "no-compare-neg-zero": ["error"],
-  "no-cond-assign": ["error"],
+  "max-statements-per-line": [0],
+  "multiline-ternary": [0],
+  "new-parens": [0],
+  "newline-per-chained-call": [0],
+  "no-arrow-condition": [0],
+  "no-async-promise-executor": [2],
+  "no-case-declarations": [2],
+  "no-class-assign": [2],
+  "no-comma-dangle": [0],
+  "no-compare-neg-zero": [2],
+  "no-cond-assign": [2],
   "no-confusing-arrow": [0],
-  "no-const-assign": ["error"],
-  "no-constant-condition": ["error"],
-  "no-control-regex": ["error"],
-  "no-debugger": ["error"],
-  "no-delete-var": ["error"],
-  "no-dupe-args": ["error"],
-  "no-dupe-class-members": ["error"],
-  "no-dupe-else-if": ["error"],
-  "no-dupe-keys": ["error"],
-  "no-duplicate-case": ["error"],
-  "no-empty": ["error"],
-  "no-empty-character-class": ["error"],
-  "no-empty-pattern": ["error"],
-  "no-ex-assign": ["error"],
-  "no-extra-boolean-cast": ["error"],
-  "no-extra-parens": ["off"],
-  "no-extra-semi": ["off"],
-  "no-fallthrough": ["error"],
-  "no-floating-decimal": ["off"],
-  "no-func-assign": ["error"],
-  "no-global-assign": ["error"],
-  "no-import-assign": ["error"],
-  "no-inner-declarations": ["error"],
-  "no-invalid-regexp": ["error"],
-  "no-irregular-whitespace": ["error"],
-  "no-loss-of-precision": ["error"],
-  "no-misleading-character-class": ["error"],
+  "no-const-assign": [2],
+  "no-constant-binary-expression": [2],
+  "no-constant-condition": [2],
+  "no-control-regex": [2],
+  "no-debugger": [2],
+  "no-delete-var": [2],
+  "no-dupe-args": [2],
+  "no-dupe-class-members": [2],
+  "no-dupe-else-if": [2],
+  "no-dupe-keys": [2],
+  "no-duplicate-case": [2],
+  "no-empty": [2],
+  "no-empty-character-class": [2],
+  "no-empty-pattern": [2],
+  "no-empty-static-block": [2],
+  "no-ex-assign": [2],
+  "no-extra-boolean-cast": [2],
+  "no-extra-parens": [0],
+  "no-extra-semi": [0],
+  "no-fallthrough": [2],
+  "no-floating-decimal": [0],
+  "no-func-assign": [2],
+  "no-global-assign": [2],
+  "no-import-assign": [2],
+  "no-invalid-regexp": [2],
+  "no-irregular-whitespace": [2],
+  "no-loss-of-precision": [2],
+  "no-misleading-character-class": [2],
   "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": ["off"],
-  "no-multi-spaces": ["off"],
-  "no-multiple-empty-lines": ["off"],
-  "no-new-symbol": ["error"],
-  "no-nonoctal-decimal-escape": ["error"],
-  "no-obj-calls": ["error"],
-  "no-octal": ["error"],
-  "no-prototype-builtins": ["error"],
-  "no-redeclare": ["error"],
-  "no-regex-spaces": ["error"],
-  "no-reserved-keys": ["off"],
-  "no-self-assign": ["error"],
-  "no-setter-return": ["error"],
-  "no-shadow-restricted-names": ["error"],
-  "no-space-before-semi": ["off"],
-  "no-spaced-func": ["off"],
-  "no-sparse-arrays": ["error"],
+  "no-mixed-spaces-and-tabs": [0],
+  "no-multi-spaces": [0],
+  "no-multiple-empty-lines": [0],
+  "no-new-native-nonconstructor": [2],
+  "no-nonoctal-decimal-escape": [2],
+  "no-obj-calls": [2],
+  "no-octal": [2],
+  "no-prototype-builtins": [2],
+  "no-redeclare": [2],
+  "no-regex-spaces": [2],
+  "no-reserved-keys": [0],
+  "no-self-assign": [2],
+  "no-setter-return": [2],
+  "no-shadow-restricted-names": [2],
+  "no-space-before-semi": [0],
+  "no-spaced-func": [0],
+  "no-sparse-arrays": [2],
   "no-tabs": [0],
-  "no-this-before-super": ["error"],
-  "no-trailing-spaces": ["off"],
-  "no-undef": ["error"],
+  "no-this-before-super": [2],
+  "no-trailing-spaces": [0],
+  "no-undef": [2],
   "no-unexpected-multiline": [0],
-  "no-unreachable": ["error"],
-  "no-unsafe-finally": ["error"],
-  "no-unsafe-negation": ["error"],
-  "no-unsafe-optional-chaining": ["error"],
-  "no-unused-labels": ["error"],
+  "no-unreachable": [2],
+  "no-unsafe-finally": [2],
+  "no-unsafe-negation": [2],
+  "no-unsafe-optional-chaining": [2],
+  "no-unused-labels": [2],
+  "no-unused-private-class-members": [2],
   "no-unused-vars": [
-    "error",
+    2,
     {
       "argsIgnorePattern": "^_$"
     }
   ],
-  "no-useless-backreference": ["error"],
-  "no-useless-catch": ["error"],
-  "no-useless-escape": ["error"],
-  "no-whitespace-before-property": ["off"],
-  "no-with": ["error"],
-  "no-wrap-func": ["off"],
-  "nonblock-statement-body-position": ["off"],
-  "object-curly-newline": ["off"],
-  "object-curly-spacing": ["off"],
-  "object-property-newline": ["off"],
-  "one-var-declaration-per-line": ["off"],
-  "operator-linebreak": ["off"],
-  "padded-blocks": ["off"],
-  "prefer-arrow-callback": ["off"],
-  "prefer-const": ["error"],
-  "prettier/prettier": ["error"],
-  "quote-props": ["off"],
+  "no-useless-backreference": [2],
+  "no-useless-catch": [2],
+  "no-useless-escape": [2],
+  "no-whitespace-before-property": [0],
+  "no-with": [2],
+  "no-wrap-func": [0],
+  "nonblock-statement-body-position": [0],
+  "object-curly-newline": [0],
+  "object-curly-spacing": [0],
+  "object-property-newline": [0],
+  "one-var-declaration-per-line": [0],
+  "operator-linebreak": [0],
+  "padded-blocks": [0],
+  "prefer-arrow-callback": [0],
+  "prefer-const": [2],
+  "prettier/prettier": [2],
+  "quote-props": [0],
   "quotes": [0],
-  "react/jsx-child-element-spacing": ["off"],
-  "react/jsx-closing-bracket-location": ["off"],
-  "react/jsx-closing-tag-location": ["off"],
-  "react/jsx-curly-newline": ["off"],
-  "react/jsx-curly-spacing": ["off"],
-  "react/jsx-equals-spacing": ["off"],
-  "react/jsx-first-prop-new-line": ["off"],
-  "react/jsx-indent": ["off"],
-  "react/jsx-indent-props": ["off"],
-  "react/jsx-max-props-per-line": ["off"],
-  "react/jsx-newline": ["off"],
-  "react/jsx-one-expression-per-line": ["off"],
-  "react/jsx-props-no-multi-spaces": ["off"],
-  "react/jsx-space-before-closing": ["off"],
-  "react/jsx-tag-spacing": ["off"],
-  "react/jsx-wrap-multilines": ["off"],
-  "require-yield": ["error"],
-  "rest-spread-spacing": ["off"],
-  "semi": ["off"],
-  "semi-spacing": ["off"],
-  "semi-style": ["off"],
-  "space-after-function-name": ["off"],
-  "space-after-keywords": ["off"],
-  "space-before-blocks": ["off"],
-  "space-before-function-paren": ["off"],
-  "space-before-function-parentheses": ["off"],
-  "space-before-keywords": ["off"],
-  "space-in-brackets": ["off"],
-  "space-in-parens": ["off"],
-  "space-infix-ops": ["off"],
-  "space-return-throw-case": ["off"],
-  "space-unary-ops": ["off"],
-  "space-unary-word-ops": ["off"],
-  "standard/array-bracket-even-spacing": ["off"],
-  "standard/computed-property-even-spacing": ["off"],
-  "standard/object-curly-even-spacing": ["off"],
-  "switch-colon-spacing": ["off"],
-  "template-curly-spacing": ["off"],
-  "template-tag-spacing": ["off"],
-  "unicorn/empty-brace-spaces": ["off"],
-  "unicorn/no-nested-ternary": ["off"],
-  "unicorn/number-literal-case": ["off"],
+  "react/jsx-child-element-spacing": [0],
+  "react/jsx-closing-bracket-location": [0],
+  "react/jsx-closing-tag-location": [0],
+  "react/jsx-curly-newline": [0],
+  "react/jsx-curly-spacing": [0],
+  "react/jsx-equals-spacing": [0],
+  "react/jsx-first-prop-new-line": [0],
+  "react/jsx-indent": [0],
+  "react/jsx-indent-props": [0],
+  "react/jsx-max-props-per-line": [0],
+  "react/jsx-newline": [0],
+  "react/jsx-one-expression-per-line": [0],
+  "react/jsx-props-no-multi-spaces": [0],
+  "react/jsx-space-before-closing": [0],
+  "react/jsx-tag-spacing": [0],
+  "react/jsx-wrap-multilines": [0],
+  "require-yield": [2],
+  "rest-spread-spacing": [0],
+  "semi": [0],
+  "semi-spacing": [0],
+  "semi-style": [0],
+  "space-after-function-name": [0],
+  "space-after-keywords": [0],
+  "space-before-blocks": [0],
+  "space-before-function-paren": [0],
+  "space-before-function-parentheses": [0],
+  "space-before-keywords": [0],
+  "space-in-brackets": [0],
+  "space-in-parens": [0],
+  "space-infix-ops": [0],
+  "space-return-throw-case": [0],
+  "space-unary-ops": [0],
+  "space-unary-word-ops": [0],
+  "standard/array-bracket-even-spacing": [0],
+  "standard/computed-property-even-spacing": [0],
+  "standard/object-curly-even-spacing": [0],
+  "switch-colon-spacing": [0],
+  "template-curly-spacing": [0],
+  "template-tag-spacing": [0],
+  "unicorn/empty-brace-spaces": [0],
+  "unicorn/no-nested-ternary": [0],
+  "unicorn/number-literal-case": [0],
   "unicorn/template-indent": [0],
-  "use-isnan": ["error"],
-  "valid-typeof": ["error"],
-  "vue/array-bracket-newline": ["off"],
-  "vue/array-bracket-spacing": ["off"],
-  "vue/array-element-newline": ["off"],
-  "vue/arrow-spacing": ["off"],
-  "vue/attribute-hyphenation": ["warn"],
-  "vue/attributes-order": ["warn"],
-  "vue/block-spacing": ["off"],
-  "vue/block-tag-newline": ["off"],
-  "vue/brace-style": ["off"],
-  "vue/comma-dangle": ["off"],
-  "vue/comma-spacing": ["off"],
-  "vue/comma-style": ["off"],
-  "vue/comment-directive": ["error"],
-  "vue/component-definition-name-casing": ["warn"],
+  "use-isnan": [2],
+  "valid-typeof": [2],
+  "vue/array-bracket-newline": [0],
+  "vue/array-bracket-spacing": [0],
+  "vue/array-element-newline": [0],
+  "vue/arrow-spacing": [0],
+  "vue/attribute-hyphenation": [1],
+  "vue/attributes-order": [1],
+  "vue/block-spacing": [0],
+  "vue/block-tag-newline": [0],
+  "vue/brace-style": [0],
+  "vue/comma-dangle": [0],
+  "vue/comma-spacing": [0],
+  "vue/comma-style": [0],
+  "vue/comment-directive": [2],
+  "vue/component-definition-name-casing": [1],
   "vue/component-tags-order": [
-    "error",
+    2,
     {
       "order": ["template", "script", "style"]
     }
   ],
-  "vue/dot-location": ["off"],
-  "vue/first-attribute-linebreak": ["warn"],
-  "vue/func-call-spacing": ["off"],
-  "vue/html-closing-bracket-newline": ["off"],
-  "vue/html-closing-bracket-spacing": ["off"],
-  "vue/html-end-tags": ["off"],
-  "vue/html-indent": ["off"],
-  "vue/html-quotes": ["off"],
+  "vue/dot-location": [0],
+  "vue/first-attribute-linebreak": [1],
+  "vue/func-call-spacing": [0],
+  "vue/html-closing-bracket-newline": [0],
+  "vue/html-closing-bracket-spacing": [0],
+  "vue/html-end-tags": [0],
+  "vue/html-indent": [0],
+  "vue/html-quotes": [0],
   "vue/html-self-closing": [0],
-  "vue/jsx-uses-vars": ["error"],
-  "vue/key-spacing": ["off"],
-  "vue/keyword-spacing": ["off"],
-  "vue/max-attributes-per-line": ["off"],
+  "vue/jsx-uses-vars": [2],
+  "vue/key-spacing": [0],
+  "vue/keyword-spacing": [0],
+  "vue/max-attributes-per-line": [0],
   "vue/max-len": [0],
-  "vue/multi-word-component-names": ["off"],
-  "vue/multiline-html-element-content-newline": ["off"],
-  "vue/multiline-ternary": ["off"],
-  "vue/mustache-interpolation-spacing": ["off"],
-  "vue/no-arrow-functions-in-watch": ["error"],
-  "vue/no-async-in-computed-properties": ["error"],
-  "vue/no-child-content": ["error"],
-  "vue/no-computed-properties-in-data": ["error"],
-  "vue/no-deprecated-data-object-declaration": ["error"],
-  "vue/no-deprecated-destroyed-lifecycle": ["error"],
-  "vue/no-deprecated-dollar-listeners-api": ["error"],
-  "vue/no-deprecated-dollar-scopedslots-api": ["error"],
-  "vue/no-deprecated-events-api": ["error"],
-  "vue/no-deprecated-filter": ["error"],
-  "vue/no-deprecated-functional-template": ["error"],
-  "vue/no-deprecated-html-element-is": ["error"],
-  "vue/no-deprecated-inline-template": ["error"],
-  "vue/no-deprecated-props-default-this": ["error"],
-  "vue/no-deprecated-router-link-tag-prop": ["error"],
-  "vue/no-deprecated-scope-attribute": ["error"],
-  "vue/no-deprecated-slot-attribute": ["error"],
-  "vue/no-deprecated-slot-scope-attribute": ["error"],
-  "vue/no-deprecated-v-bind-sync": ["error"],
-  "vue/no-deprecated-v-is": ["error"],
-  "vue/no-deprecated-v-on-native-modifier": ["error"],
-  "vue/no-deprecated-v-on-number-modifiers": ["error"],
-  "vue/no-deprecated-vue-config-keycodes": ["error"],
-  "vue/no-dupe-keys": ["error"],
-  "vue/no-dupe-v-else-if": ["error"],
-  "vue/no-duplicate-attributes": ["error"],
-  "vue/no-export-in-script-setup": ["error"],
-  "vue/no-expose-after-await": ["error"],
-  "vue/no-extra-parens": ["off"],
-  "vue/no-lifecycle-after-await": ["error"],
-  "vue/no-lone-template": ["warn"],
-  "vue/no-multi-spaces": ["off"],
-  "vue/no-multiple-slot-args": ["warn"],
-  "vue/no-mutating-props": ["error"],
-  "vue/no-parsing-error": ["error"],
-  "vue/no-ref-as-operand": ["error"],
-  "vue/no-reserved-component-names": ["off"],
-  "vue/no-reserved-keys": ["error"],
-  "vue/no-reserved-props": ["error"],
-  "vue/no-shared-component-data": ["error"],
-  "vue/no-side-effects-in-computed-properties": ["error"],
-  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
-  "vue/no-template-key": ["error"],
-  "vue/no-template-shadow": ["warn"],
-  "vue/no-textarea-mustache": ["error"],
-  "vue/no-unused-components": ["error"],
+  "vue/multi-word-component-names": [0],
+  "vue/multiline-html-element-content-newline": [0],
+  "vue/multiline-ternary": [0],
+  "vue/mustache-interpolation-spacing": [0],
+  "vue/no-arrow-functions-in-watch": [2],
+  "vue/no-async-in-computed-properties": [2],
+  "vue/no-child-content": [2],
+  "vue/no-computed-properties-in-data": [2],
+  "vue/no-deprecated-data-object-declaration": [2],
+  "vue/no-deprecated-destroyed-lifecycle": [2],
+  "vue/no-deprecated-dollar-listeners-api": [2],
+  "vue/no-deprecated-dollar-scopedslots-api": [2],
+  "vue/no-deprecated-events-api": [2],
+  "vue/no-deprecated-filter": [2],
+  "vue/no-deprecated-functional-template": [2],
+  "vue/no-deprecated-html-element-is": [2],
+  "vue/no-deprecated-inline-template": [2],
+  "vue/no-deprecated-props-default-this": [2],
+  "vue/no-deprecated-router-link-tag-prop": [2],
+  "vue/no-deprecated-scope-attribute": [2],
+  "vue/no-deprecated-slot-attribute": [2],
+  "vue/no-deprecated-slot-scope-attribute": [2],
+  "vue/no-deprecated-v-bind-sync": [2],
+  "vue/no-deprecated-v-is": [2],
+  "vue/no-deprecated-v-on-native-modifier": [2],
+  "vue/no-deprecated-v-on-number-modifiers": [2],
+  "vue/no-deprecated-vue-config-keycodes": [2],
+  "vue/no-dupe-keys": [2],
+  "vue/no-dupe-v-else-if": [2],
+  "vue/no-duplicate-attributes": [2],
+  "vue/no-export-in-script-setup": [2],
+  "vue/no-expose-after-await": [2],
+  "vue/no-extra-parens": [0],
+  "vue/no-lifecycle-after-await": [2],
+  "vue/no-lone-template": [1],
+  "vue/no-multi-spaces": [0],
+  "vue/no-multiple-slot-args": [1],
+  "vue/no-mutating-props": [2],
+  "vue/no-parsing-error": [2],
+  "vue/no-ref-as-operand": [2],
+  "vue/no-reserved-component-names": [0],
+  "vue/no-reserved-keys": [2],
+  "vue/no-reserved-props": [2],
+  "vue/no-shared-component-data": [2],
+  "vue/no-side-effects-in-computed-properties": [2],
+  "vue/no-spaces-around-equal-signs-in-attribute": [0],
+  "vue/no-template-key": [2],
+  "vue/no-template-shadow": [1],
+  "vue/no-textarea-mustache": [2],
+  "vue/no-unused-components": [2],
   "vue/no-unused-vars": [
-    "error",
+    2,
     {
       "ignorePattern": "^_"
     }
   ],
-  "vue/no-use-computed-property-like-method": ["error"],
-  "vue/no-use-v-if-with-v-for": ["error"],
-  "vue/no-useless-template-attributes": ["error"],
-  "vue/no-v-for-template-key-on-child": ["error"],
-  "vue/no-v-html": ["warn"],
-  "vue/no-v-text-v-html-on-component": ["error"],
-  "vue/no-watch-after-await": ["error"],
-  "vue/object-curly-newline": ["off"],
-  "vue/object-curly-spacing": ["off"],
-  "vue/object-property-newline": ["off"],
-  "vue/one-component-per-file": ["warn"],
-  "vue/operator-linebreak": ["off"],
-  "vue/order-in-components": ["warn"],
-  "vue/prefer-import-from-vue": ["error"],
-  "vue/prop-name-casing": ["warn"],
-  "vue/quote-props": ["off"],
-  "vue/require-component-is": ["error"],
-  "vue/require-default-prop": ["warn"],
-  "vue/require-explicit-emits": ["warn"],
-  "vue/require-prop-type-constructor": ["error"],
-  "vue/require-prop-types": ["warn"],
-  "vue/require-render-return": ["error"],
-  "vue/require-slots-as-functions": ["error"],
-  "vue/require-toggle-inside-transition": ["error"],
-  "vue/require-v-for-key": ["error"],
-  "vue/require-valid-default-prop": ["error"],
-  "vue/return-in-computed-property": ["error"],
-  "vue/return-in-emits-validator": ["error"],
-  "vue/script-indent": ["off"],
-  "vue/singleline-html-element-content-newline": ["off"],
-  "vue/space-in-parens": ["off"],
-  "vue/space-infix-ops": ["off"],
-  "vue/space-unary-ops": ["off"],
-  "vue/template-curly-spacing": ["off"],
-  "vue/this-in-template": ["warn"],
-  "vue/use-v-on-exact": ["error"],
-  "vue/v-bind-style": ["warn"],
+  "vue/no-use-computed-property-like-method": [2],
+  "vue/no-use-v-if-with-v-for": [2],
+  "vue/no-useless-template-attributes": [2],
+  "vue/no-v-for-template-key-on-child": [2],
+  "vue/no-v-html": [1],
+  "vue/no-v-text-v-html-on-component": [2],
+  "vue/no-watch-after-await": [2],
+  "vue/object-curly-newline": [0],
+  "vue/object-curly-spacing": [0],
+  "vue/object-property-newline": [0],
+  "vue/one-component-per-file": [1],
+  "vue/operator-linebreak": [0],
+  "vue/order-in-components": [1],
+  "vue/prefer-import-from-vue": [2],
+  "vue/prop-name-casing": [1],
+  "vue/quote-props": [0],
+  "vue/require-component-is": [2],
+  "vue/require-default-prop": [1],
+  "vue/require-explicit-emits": [1],
+  "vue/require-prop-type-constructor": [2],
+  "vue/require-prop-types": [1],
+  "vue/require-render-return": [2],
+  "vue/require-slots-as-functions": [2],
+  "vue/require-toggle-inside-transition": [2],
+  "vue/require-v-for-key": [2],
+  "vue/require-valid-default-prop": [2],
+  "vue/return-in-computed-property": [2],
+  "vue/return-in-emits-validator": [2],
+  "vue/script-indent": [0],
+  "vue/singleline-html-element-content-newline": [0],
+  "vue/space-in-parens": [0],
+  "vue/space-infix-ops": [0],
+  "vue/space-unary-ops": [0],
+  "vue/template-curly-spacing": [0],
+  "vue/this-in-template": [1],
+  "vue/use-v-on-exact": [2],
+  "vue/v-bind-style": [1],
   "vue/v-on-event-hyphenation": [
-    "warn",
+    1,
     "always",
     {
       "autofix": true
     }
   ],
-  "vue/v-on-style": ["warn"],
-  "vue/v-slot-style": ["warn"],
-  "vue/valid-attribute-name": ["error"],
-  "vue/valid-define-emits": ["error"],
-  "vue/valid-define-props": ["error"],
-  "vue/valid-next-tick": ["error"],
-  "vue/valid-template-root": ["error"],
-  "vue/valid-v-bind": ["error"],
-  "vue/valid-v-cloak": ["error"],
-  "vue/valid-v-else": ["error"],
-  "vue/valid-v-else-if": ["error"],
-  "vue/valid-v-for": ["off"],
-  "vue/valid-v-html": ["error"],
-  "vue/valid-v-if": ["error"],
-  "vue/valid-v-is": ["error"],
-  "vue/valid-v-memo": ["error"],
-  "vue/valid-v-model": ["error"],
-  "vue/valid-v-on": ["error"],
-  "vue/valid-v-once": ["error"],
-  "vue/valid-v-pre": ["error"],
-  "vue/valid-v-show": ["error"],
-  "vue/valid-v-slot": ["error"],
-  "vue/valid-v-text": ["error"],
-  "wrap-iife": ["off"],
-  "wrap-regex": ["off"],
-  "yield-star-spacing": ["off"]
+  "vue/v-on-style": [1],
+  "vue/v-slot-style": [1],
+  "vue/valid-attribute-name": [2],
+  "vue/valid-define-emits": [2],
+  "vue/valid-define-props": [2],
+  "vue/valid-next-tick": [2],
+  "vue/valid-template-root": [2],
+  "vue/valid-v-bind": [2],
+  "vue/valid-v-cloak": [2],
+  "vue/valid-v-else": [2],
+  "vue/valid-v-else-if": [2],
+  "vue/valid-v-for": [0],
+  "vue/valid-v-html": [2],
+  "vue/valid-v-if": [2],
+  "vue/valid-v-is": [2],
+  "vue/valid-v-memo": [2],
+  "vue/valid-v-model": [2],
+  "vue/valid-v-on": [2],
+  "vue/valid-v-once": [2],
+  "vue/valid-v-pre": [2],
+  "vue/valid-v-show": [2],
+  "vue/valid-v-slot": [2],
+  "vue/valid-v-text": [2],
+  "wrap-iife": [0],
+  "wrap-regex": [0],
+  "yield-star-spacing": [0]
 }
diff --git a/pdf/eslint.config.mjs b/pdf/eslint.config.mjs
new file mode 100644
index 0000000000..873d16ca72
--- /dev/null
+++ b/pdf/eslint.config.mjs
@@ -0,0 +1,86 @@
+import { includeIgnoreFile } from '@eslint/compat'
+import localRules from 'eslint-plugin-local-rules'
+import globals from 'globals'
+import path from 'node:path'
+import { fileURLToPath } from 'node:url'
+import js from '@eslint/js'
+import { FlatCompat } from '@eslint/eslintrc'
+
+const __filename = fileURLToPath(import.meta.url)
+const __dirname = path.dirname(__filename)
+const compat = new FlatCompat({
+  baseDirectory: __dirname,
+  recommendedConfig: js.configs.recommended,
+  allConfig: js.configs.all,
+})
+const gitignorePath = path.resolve(__dirname, '.gitignore')
+
+export default [
+  ...compat.extends(
+    'plugin:vue/vue3-recommended',
+    'eslint:recommended',
+    'plugin:prettier/recommended',
+    '@vue/eslint-config-prettier'
+  ),
+
+  includeIgnoreFile(gitignorePath),
+
+  {
+    plugins: {
+      'local-rules': localRules,
+    },
+
+    languageOptions: {
+      globals: {
+        ...globals.node,
+        ...globals.jest,
+      },
+
+      ecmaVersion: 5,
+      sourceType: 'commonjs',
+
+      parserOptions: {
+        parser: '@babel/eslint-parser',
+      },
+    },
+
+    rules: {
+      'prefer-const': 'error',
+      'prettier/prettier': 'error',
+
+      'vue/component-tags-order': [
+        'error',
+        {
+          order: ['template', 'script', 'style'],
+        },
+      ],
+
+      'vue/multi-word-component-names': 'off',
+      'vue/valid-v-for': 'off',
+      'vue/no-reserved-component-names': 'off',
+
+      'vue/no-unused-vars': [
+        'error',
+        {
+          ignorePattern: '^_',
+        },
+      ],
+
+      'no-unused-vars': [
+        'error',
+        {
+          argsIgnorePattern: '^_$',
+        },
+      ],
+
+      'local-rules/matching-translation-keys': [
+        'error',
+        {
+          ignoreKeysRegex:
+            '^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+',
+          translationKeyPropRegex: '[a-zA-Z0-9]-i18n-key$',
+        },
+      ],
+    },
+  },
+]
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index 0da40d1a0f..a03a4bcb17 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -12,6 +12,9 @@
       },
       "devDependencies": {
         "@babel/eslint-parser": "7.25.1",
+        "@eslint/compat": "1.1.1",
+        "@eslint/eslintrc": "3.1.0",
+        "@eslint/js": "9.9.0",
         "@intlify/core": "^9.10.2",
         "@rushstack/eslint-patch": "1.10.4",
         "@vitejs/plugin-vue": "5.1.2",
@@ -29,6 +32,7 @@
         "eslint": "8.57.0",
         "eslint-plugin-local-rules": "3.0.2",
         "eslint-plugin-vue": "9.27.0",
+        "globals": "15.9.0",
         "jsdom": "24.1.1",
         "prettier": "3.3.3",
         "url-template": "3.1.1",
@@ -1031,6 +1035,16 @@
         "@babel/core": "^7.0.0-0"
       }
     },
+    "node_modules/@babel/plugin-transform-classes/node_modules/globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/@babel/plugin-transform-computed-properties": {
       "version": "7.24.7",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
@@ -1911,6 +1925,16 @@
         "node": ">=6.9.0"
       }
     },
+    "node_modules/@babel/traverse/node_modules/globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/@babel/types": {
       "version": "7.25.2",
       "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
@@ -2363,17 +2387,27 @@
         "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
+    "node_modules/@eslint/compat": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.1.1.tgz",
+      "integrity": "sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
     "node_modules/@eslint/eslintrc": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
-      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+      "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "ajv": "^6.12.4",
         "debug": "^4.3.2",
-        "espree": "^9.6.0",
-        "globals": "^13.19.0",
+        "espree": "^10.0.1",
+        "globals": "^14.0.0",
         "ignore": "^5.2.0",
         "import-fresh": "^3.2.1",
         "js-yaml": "^4.1.0",
@@ -2381,36 +2415,64 @@
         "strip-json-comments": "^3.1.1"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/globals": {
-      "version": "13.24.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+    "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+      "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
       "dev": true,
-      "license": "MIT",
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/espree": {
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+      "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
+      "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
-        "type-fest": "^0.20.2"
+        "acorn": "^8.12.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^4.0.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/globals": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/@eslint/js": {
-      "version": "8.57.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
-      "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+      "version": "9.9.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.0.tgz",
+      "integrity": "sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
     "node_modules/@humanwhocodes/config-array": {
@@ -4800,6 +4862,40 @@
         "node": ">=10"
       }
     },
+    "node_modules/eslint/node_modules/@eslint/eslintrc": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.6.0",
+        "globals": "^13.19.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint/node_modules/@eslint/js": {
+      "version": "8.57.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+      "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
     "node_modules/eslint/node_modules/ansi-styles": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -5358,13 +5454,16 @@
       }
     },
     "node_modules/globals": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "version": "15.9.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
+      "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=4"
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/gopd": {
diff --git a/pdf/package.json b/pdf/package.json
index dd6a9371eb..375a846c09 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -10,11 +10,11 @@
     "preview": "vite preview",
     "test:unit": "vitest --coverage",
     "lint": "npm run lint:eslint && npm run lint:prettier",
-    "lint:eslint": "eslint . --ext .vue,.js,.mjs --fix --ignore-path .gitignore",
-    "lint:prettier": "prettier --write --ignore-path .prettierignore **/*.{css,scss,json}",
+    "lint:eslint": "eslint --fix",
+    "lint:prettier": "prettier --write --ignore-path .prettierignore **/*.{css,scss,json,mjs}",
     "lint:check": "npm run lint:check:eslint && npm run lint:check:prettier",
-    "lint:check:eslint": "eslint . --ext .vue,.js,.mjs --no-fix --ignore-path .gitignore",
-    "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json}"
+    "lint:check:eslint": "eslint",
+    "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json,mjs}"
   },
   "dependencies": {
     "@vue/runtime-core": "3.4.37",
@@ -32,6 +32,9 @@
   },
   "devDependencies": {
     "@babel/eslint-parser": "7.25.1",
+    "@eslint/compat": "1.1.1",
+    "@eslint/eslintrc": "3.1.0",
+    "@eslint/js": "9.9.0",
     "@intlify/core": "^9.10.2",
     "@rushstack/eslint-patch": "1.10.4",
     "@vitejs/plugin-vue": "5.1.2",
@@ -49,6 +52,7 @@
     "eslint": "8.57.0",
     "eslint-plugin-local-rules": "3.0.2",
     "eslint-plugin-vue": "9.27.0",
+    "globals": "15.9.0",
     "jsdom": "24.1.1",
     "prettier": "3.3.3",
     "url-template": "3.1.1",

From 037d15d2ef57b3db02bcd658ba03b4ff3a89363a Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Mon, 12 Aug 2024 23:25:16 +0200
Subject: [PATCH 042/273] pdf: delete eslint-config-(js,vue).json again

Was only needed for the migration

Issue: #5282
---
 pdf/eslint-config-js.json  | 374 -------------------------------------
 pdf/eslint-config-vue.json | 374 -------------------------------------
 2 files changed, 748 deletions(-)
 delete mode 100644 pdf/eslint-config-js.json
 delete mode 100644 pdf/eslint-config-vue.json

diff --git a/pdf/eslint-config-js.json b/pdf/eslint-config-js.json
deleted file mode 100644
index 762afc124f..0000000000
--- a/pdf/eslint-config-js.json
+++ /dev/null
@@ -1,374 +0,0 @@
-{
-  "@babel/object-curly-spacing": [0],
-  "@babel/semi": [0],
-  "@typescript-eslint/block-spacing": [0],
-  "@typescript-eslint/brace-style": [0],
-  "@typescript-eslint/comma-dangle": [0],
-  "@typescript-eslint/comma-spacing": [0],
-  "@typescript-eslint/func-call-spacing": [0],
-  "@typescript-eslint/indent": [0],
-  "@typescript-eslint/key-spacing": [0],
-  "@typescript-eslint/keyword-spacing": [0],
-  "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": [0],
-  "@typescript-eslint/no-extra-parens": [0],
-  "@typescript-eslint/no-extra-semi": [0],
-  "@typescript-eslint/object-curly-spacing": [0],
-  "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": [0],
-  "@typescript-eslint/space-before-blocks": [0],
-  "@typescript-eslint/space-before-function-paren": [0],
-  "@typescript-eslint/space-infix-ops": [0],
-  "@typescript-eslint/type-annotation-spacing": [0],
-  "array-bracket-newline": [0],
-  "array-bracket-spacing": [0],
-  "array-element-newline": [0],
-  "arrow-body-style": [0],
-  "arrow-parens": [0],
-  "arrow-spacing": [0],
-  "babel/object-curly-spacing": [0],
-  "babel/quotes": [0],
-  "babel/semi": [0],
-  "block-spacing": [0],
-  "brace-style": [0],
-  "comma-dangle": [0],
-  "comma-spacing": [0],
-  "comma-style": [0],
-  "computed-property-spacing": [0],
-  "constructor-super": [2],
-  "curly": [0],
-  "dot-location": [0],
-  "eol-last": [0],
-  "flowtype/boolean-style": [0],
-  "flowtype/delimiter-dangle": [0],
-  "flowtype/generic-spacing": [0],
-  "flowtype/object-type-curly-spacing": [0],
-  "flowtype/object-type-delimiter": [0],
-  "flowtype/quotes": [0],
-  "flowtype/semi": [0],
-  "flowtype/space-after-type-colon": [0],
-  "flowtype/space-before-generic-bracket": [0],
-  "flowtype/space-before-type-colon": [0],
-  "flowtype/union-intersection-spacing": [0],
-  "for-direction": [2],
-  "func-call-spacing": [0],
-  "function-call-argument-newline": [0],
-  "function-paren-newline": [0],
-  "generator-star": [0],
-  "generator-star-spacing": [0],
-  "getter-return": [2],
-  "implicit-arrow-linebreak": [0],
-  "indent": [0],
-  "indent-legacy": [0],
-  "jsx-quotes": [0],
-  "key-spacing": [0],
-  "keyword-spacing": [0],
-  "linebreak-style": [0],
-  "lines-around-comment": [0],
-  "local-rules/matching-translation-keys": [
-    2,
-    {
-      "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
-      "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
-    }
-  ],
-  "max-len": [0],
-  "max-statements-per-line": [0],
-  "multiline-ternary": [0],
-  "new-parens": [0],
-  "newline-per-chained-call": [0],
-  "no-arrow-condition": [0],
-  "no-async-promise-executor": [2],
-  "no-case-declarations": [2],
-  "no-class-assign": [2],
-  "no-comma-dangle": [0],
-  "no-compare-neg-zero": [2],
-  "no-cond-assign": [2],
-  "no-confusing-arrow": [0],
-  "no-const-assign": [2],
-  "no-constant-binary-expression": [2],
-  "no-constant-condition": [2],
-  "no-control-regex": [2],
-  "no-debugger": [2],
-  "no-delete-var": [2],
-  "no-dupe-args": [2],
-  "no-dupe-class-members": [2],
-  "no-dupe-else-if": [2],
-  "no-dupe-keys": [2],
-  "no-duplicate-case": [2],
-  "no-empty": [2],
-  "no-empty-character-class": [2],
-  "no-empty-pattern": [2],
-  "no-empty-static-block": [2],
-  "no-ex-assign": [2],
-  "no-extra-boolean-cast": [2],
-  "no-extra-parens": [0],
-  "no-extra-semi": [0],
-  "no-fallthrough": [2],
-  "no-floating-decimal": [0],
-  "no-func-assign": [2],
-  "no-global-assign": [2],
-  "no-import-assign": [2],
-  "no-invalid-regexp": [2],
-  "no-irregular-whitespace": [2],
-  "no-loss-of-precision": [2],
-  "no-misleading-character-class": [2],
-  "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": [0],
-  "no-multi-spaces": [0],
-  "no-multiple-empty-lines": [0],
-  "no-new-native-nonconstructor": [2],
-  "no-nonoctal-decimal-escape": [2],
-  "no-obj-calls": [2],
-  "no-octal": [2],
-  "no-prototype-builtins": [2],
-  "no-redeclare": [2],
-  "no-regex-spaces": [2],
-  "no-reserved-keys": [0],
-  "no-self-assign": [2],
-  "no-setter-return": [2],
-  "no-shadow-restricted-names": [2],
-  "no-space-before-semi": [0],
-  "no-spaced-func": [0],
-  "no-sparse-arrays": [2],
-  "no-tabs": [0],
-  "no-this-before-super": [2],
-  "no-trailing-spaces": [0],
-  "no-undef": [2],
-  "no-unexpected-multiline": [0],
-  "no-unreachable": [2],
-  "no-unsafe-finally": [2],
-  "no-unsafe-negation": [2],
-  "no-unsafe-optional-chaining": [2],
-  "no-unused-labels": [2],
-  "no-unused-private-class-members": [2],
-  "no-unused-vars": [
-    2,
-    {
-      "argsIgnorePattern": "^_$"
-    }
-  ],
-  "no-useless-backreference": [2],
-  "no-useless-catch": [2],
-  "no-useless-escape": [2],
-  "no-whitespace-before-property": [0],
-  "no-with": [2],
-  "no-wrap-func": [0],
-  "nonblock-statement-body-position": [0],
-  "object-curly-newline": [0],
-  "object-curly-spacing": [0],
-  "object-property-newline": [0],
-  "one-var-declaration-per-line": [0],
-  "operator-linebreak": [0],
-  "padded-blocks": [0],
-  "prefer-arrow-callback": [0],
-  "prefer-const": [2],
-  "prettier/prettier": [2],
-  "quote-props": [0],
-  "quotes": [0],
-  "react/jsx-child-element-spacing": [0],
-  "react/jsx-closing-bracket-location": [0],
-  "react/jsx-closing-tag-location": [0],
-  "react/jsx-curly-newline": [0],
-  "react/jsx-curly-spacing": [0],
-  "react/jsx-equals-spacing": [0],
-  "react/jsx-first-prop-new-line": [0],
-  "react/jsx-indent": [0],
-  "react/jsx-indent-props": [0],
-  "react/jsx-max-props-per-line": [0],
-  "react/jsx-newline": [0],
-  "react/jsx-one-expression-per-line": [0],
-  "react/jsx-props-no-multi-spaces": [0],
-  "react/jsx-space-before-closing": [0],
-  "react/jsx-tag-spacing": [0],
-  "react/jsx-wrap-multilines": [0],
-  "require-yield": [2],
-  "rest-spread-spacing": [0],
-  "semi": [0],
-  "semi-spacing": [0],
-  "semi-style": [0],
-  "space-after-function-name": [0],
-  "space-after-keywords": [0],
-  "space-before-blocks": [0],
-  "space-before-function-paren": [0],
-  "space-before-function-parentheses": [0],
-  "space-before-keywords": [0],
-  "space-in-brackets": [0],
-  "space-in-parens": [0],
-  "space-infix-ops": [0],
-  "space-return-throw-case": [0],
-  "space-unary-ops": [0],
-  "space-unary-word-ops": [0],
-  "standard/array-bracket-even-spacing": [0],
-  "standard/computed-property-even-spacing": [0],
-  "standard/object-curly-even-spacing": [0],
-  "switch-colon-spacing": [0],
-  "template-curly-spacing": [0],
-  "template-tag-spacing": [0],
-  "unicorn/empty-brace-spaces": [0],
-  "unicorn/no-nested-ternary": [0],
-  "unicorn/number-literal-case": [0],
-  "unicorn/template-indent": [0],
-  "use-isnan": [2],
-  "valid-typeof": [2],
-  "vue/array-bracket-newline": [0],
-  "vue/array-bracket-spacing": [0],
-  "vue/array-element-newline": [0],
-  "vue/arrow-spacing": [0],
-  "vue/attribute-hyphenation": [1],
-  "vue/attributes-order": [1],
-  "vue/block-spacing": [0],
-  "vue/block-tag-newline": [0],
-  "vue/brace-style": [0],
-  "vue/comma-dangle": [0],
-  "vue/comma-spacing": [0],
-  "vue/comma-style": [0],
-  "vue/comment-directive": [2],
-  "vue/component-definition-name-casing": [1],
-  "vue/component-tags-order": [
-    2,
-    {
-      "order": ["template", "script", "style"]
-    }
-  ],
-  "vue/dot-location": [0],
-  "vue/first-attribute-linebreak": [1],
-  "vue/func-call-spacing": [0],
-  "vue/html-closing-bracket-newline": [0],
-  "vue/html-closing-bracket-spacing": [0],
-  "vue/html-end-tags": [0],
-  "vue/html-indent": [0],
-  "vue/html-quotes": [0],
-  "vue/html-self-closing": [0],
-  "vue/jsx-uses-vars": [2],
-  "vue/key-spacing": [0],
-  "vue/keyword-spacing": [0],
-  "vue/max-attributes-per-line": [0],
-  "vue/max-len": [0],
-  "vue/multi-word-component-names": [0],
-  "vue/multiline-html-element-content-newline": [0],
-  "vue/multiline-ternary": [0],
-  "vue/mustache-interpolation-spacing": [0],
-  "vue/no-arrow-functions-in-watch": [2],
-  "vue/no-async-in-computed-properties": [2],
-  "vue/no-child-content": [2],
-  "vue/no-computed-properties-in-data": [2],
-  "vue/no-deprecated-data-object-declaration": [2],
-  "vue/no-deprecated-destroyed-lifecycle": [2],
-  "vue/no-deprecated-dollar-listeners-api": [2],
-  "vue/no-deprecated-dollar-scopedslots-api": [2],
-  "vue/no-deprecated-events-api": [2],
-  "vue/no-deprecated-filter": [2],
-  "vue/no-deprecated-functional-template": [2],
-  "vue/no-deprecated-html-element-is": [2],
-  "vue/no-deprecated-inline-template": [2],
-  "vue/no-deprecated-props-default-this": [2],
-  "vue/no-deprecated-router-link-tag-prop": [2],
-  "vue/no-deprecated-scope-attribute": [2],
-  "vue/no-deprecated-slot-attribute": [2],
-  "vue/no-deprecated-slot-scope-attribute": [2],
-  "vue/no-deprecated-v-bind-sync": [2],
-  "vue/no-deprecated-v-is": [2],
-  "vue/no-deprecated-v-on-native-modifier": [2],
-  "vue/no-deprecated-v-on-number-modifiers": [2],
-  "vue/no-deprecated-vue-config-keycodes": [2],
-  "vue/no-dupe-keys": [2],
-  "vue/no-dupe-v-else-if": [2],
-  "vue/no-duplicate-attributes": [2],
-  "vue/no-export-in-script-setup": [2],
-  "vue/no-expose-after-await": [2],
-  "vue/no-extra-parens": [0],
-  "vue/no-lifecycle-after-await": [2],
-  "vue/no-lone-template": [1],
-  "vue/no-multi-spaces": [0],
-  "vue/no-multiple-slot-args": [1],
-  "vue/no-mutating-props": [2],
-  "vue/no-parsing-error": [2],
-  "vue/no-ref-as-operand": [2],
-  "vue/no-reserved-component-names": [0],
-  "vue/no-reserved-keys": [2],
-  "vue/no-reserved-props": [2],
-  "vue/no-shared-component-data": [2],
-  "vue/no-side-effects-in-computed-properties": [2],
-  "vue/no-spaces-around-equal-signs-in-attribute": [0],
-  "vue/no-template-key": [2],
-  "vue/no-template-shadow": [1],
-  "vue/no-textarea-mustache": [2],
-  "vue/no-unused-components": [2],
-  "vue/no-unused-vars": [
-    2,
-    {
-      "ignorePattern": "^_"
-    }
-  ],
-  "vue/no-use-computed-property-like-method": [2],
-  "vue/no-use-v-if-with-v-for": [2],
-  "vue/no-useless-template-attributes": [2],
-  "vue/no-v-for-template-key-on-child": [2],
-  "vue/no-v-html": [1],
-  "vue/no-v-text-v-html-on-component": [2],
-  "vue/no-watch-after-await": [2],
-  "vue/object-curly-newline": [0],
-  "vue/object-curly-spacing": [0],
-  "vue/object-property-newline": [0],
-  "vue/one-component-per-file": [1],
-  "vue/operator-linebreak": [0],
-  "vue/order-in-components": [1],
-  "vue/prefer-import-from-vue": [2],
-  "vue/prop-name-casing": [1],
-  "vue/quote-props": [0],
-  "vue/require-component-is": [2],
-  "vue/require-default-prop": [1],
-  "vue/require-explicit-emits": [1],
-  "vue/require-prop-type-constructor": [2],
-  "vue/require-prop-types": [1],
-  "vue/require-render-return": [2],
-  "vue/require-slots-as-functions": [2],
-  "vue/require-toggle-inside-transition": [2],
-  "vue/require-v-for-key": [2],
-  "vue/require-valid-default-prop": [2],
-  "vue/return-in-computed-property": [2],
-  "vue/return-in-emits-validator": [2],
-  "vue/script-indent": [0],
-  "vue/singleline-html-element-content-newline": [0],
-  "vue/space-in-parens": [0],
-  "vue/space-infix-ops": [0],
-  "vue/space-unary-ops": [0],
-  "vue/template-curly-spacing": [0],
-  "vue/this-in-template": [1],
-  "vue/use-v-on-exact": [2],
-  "vue/v-bind-style": [1],
-  "vue/v-on-event-hyphenation": [
-    1,
-    "always",
-    {
-      "autofix": true
-    }
-  ],
-  "vue/v-on-style": [1],
-  "vue/v-slot-style": [1],
-  "vue/valid-attribute-name": [2],
-  "vue/valid-define-emits": [2],
-  "vue/valid-define-props": [2],
-  "vue/valid-next-tick": [2],
-  "vue/valid-template-root": [2],
-  "vue/valid-v-bind": [2],
-  "vue/valid-v-cloak": [2],
-  "vue/valid-v-else": [2],
-  "vue/valid-v-else-if": [2],
-  "vue/valid-v-for": [0],
-  "vue/valid-v-html": [2],
-  "vue/valid-v-if": [2],
-  "vue/valid-v-is": [2],
-  "vue/valid-v-memo": [2],
-  "vue/valid-v-model": [2],
-  "vue/valid-v-on": [2],
-  "vue/valid-v-once": [2],
-  "vue/valid-v-pre": [2],
-  "vue/valid-v-show": [2],
-  "vue/valid-v-slot": [2],
-  "vue/valid-v-text": [2],
-  "wrap-iife": [0],
-  "wrap-regex": [0],
-  "yield-star-spacing": [0]
-}
diff --git a/pdf/eslint-config-vue.json b/pdf/eslint-config-vue.json
deleted file mode 100644
index 762afc124f..0000000000
--- a/pdf/eslint-config-vue.json
+++ /dev/null
@@ -1,374 +0,0 @@
-{
-  "@babel/object-curly-spacing": [0],
-  "@babel/semi": [0],
-  "@typescript-eslint/block-spacing": [0],
-  "@typescript-eslint/brace-style": [0],
-  "@typescript-eslint/comma-dangle": [0],
-  "@typescript-eslint/comma-spacing": [0],
-  "@typescript-eslint/func-call-spacing": [0],
-  "@typescript-eslint/indent": [0],
-  "@typescript-eslint/key-spacing": [0],
-  "@typescript-eslint/keyword-spacing": [0],
-  "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": [0],
-  "@typescript-eslint/no-extra-parens": [0],
-  "@typescript-eslint/no-extra-semi": [0],
-  "@typescript-eslint/object-curly-spacing": [0],
-  "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": [0],
-  "@typescript-eslint/space-before-blocks": [0],
-  "@typescript-eslint/space-before-function-paren": [0],
-  "@typescript-eslint/space-infix-ops": [0],
-  "@typescript-eslint/type-annotation-spacing": [0],
-  "array-bracket-newline": [0],
-  "array-bracket-spacing": [0],
-  "array-element-newline": [0],
-  "arrow-body-style": [0],
-  "arrow-parens": [0],
-  "arrow-spacing": [0],
-  "babel/object-curly-spacing": [0],
-  "babel/quotes": [0],
-  "babel/semi": [0],
-  "block-spacing": [0],
-  "brace-style": [0],
-  "comma-dangle": [0],
-  "comma-spacing": [0],
-  "comma-style": [0],
-  "computed-property-spacing": [0],
-  "constructor-super": [2],
-  "curly": [0],
-  "dot-location": [0],
-  "eol-last": [0],
-  "flowtype/boolean-style": [0],
-  "flowtype/delimiter-dangle": [0],
-  "flowtype/generic-spacing": [0],
-  "flowtype/object-type-curly-spacing": [0],
-  "flowtype/object-type-delimiter": [0],
-  "flowtype/quotes": [0],
-  "flowtype/semi": [0],
-  "flowtype/space-after-type-colon": [0],
-  "flowtype/space-before-generic-bracket": [0],
-  "flowtype/space-before-type-colon": [0],
-  "flowtype/union-intersection-spacing": [0],
-  "for-direction": [2],
-  "func-call-spacing": [0],
-  "function-call-argument-newline": [0],
-  "function-paren-newline": [0],
-  "generator-star": [0],
-  "generator-star-spacing": [0],
-  "getter-return": [2],
-  "implicit-arrow-linebreak": [0],
-  "indent": [0],
-  "indent-legacy": [0],
-  "jsx-quotes": [0],
-  "key-spacing": [0],
-  "keyword-spacing": [0],
-  "linebreak-style": [0],
-  "lines-around-comment": [0],
-  "local-rules/matching-translation-keys": [
-    2,
-    {
-      "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
-      "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
-    }
-  ],
-  "max-len": [0],
-  "max-statements-per-line": [0],
-  "multiline-ternary": [0],
-  "new-parens": [0],
-  "newline-per-chained-call": [0],
-  "no-arrow-condition": [0],
-  "no-async-promise-executor": [2],
-  "no-case-declarations": [2],
-  "no-class-assign": [2],
-  "no-comma-dangle": [0],
-  "no-compare-neg-zero": [2],
-  "no-cond-assign": [2],
-  "no-confusing-arrow": [0],
-  "no-const-assign": [2],
-  "no-constant-binary-expression": [2],
-  "no-constant-condition": [2],
-  "no-control-regex": [2],
-  "no-debugger": [2],
-  "no-delete-var": [2],
-  "no-dupe-args": [2],
-  "no-dupe-class-members": [2],
-  "no-dupe-else-if": [2],
-  "no-dupe-keys": [2],
-  "no-duplicate-case": [2],
-  "no-empty": [2],
-  "no-empty-character-class": [2],
-  "no-empty-pattern": [2],
-  "no-empty-static-block": [2],
-  "no-ex-assign": [2],
-  "no-extra-boolean-cast": [2],
-  "no-extra-parens": [0],
-  "no-extra-semi": [0],
-  "no-fallthrough": [2],
-  "no-floating-decimal": [0],
-  "no-func-assign": [2],
-  "no-global-assign": [2],
-  "no-import-assign": [2],
-  "no-invalid-regexp": [2],
-  "no-irregular-whitespace": [2],
-  "no-loss-of-precision": [2],
-  "no-misleading-character-class": [2],
-  "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": [0],
-  "no-multi-spaces": [0],
-  "no-multiple-empty-lines": [0],
-  "no-new-native-nonconstructor": [2],
-  "no-nonoctal-decimal-escape": [2],
-  "no-obj-calls": [2],
-  "no-octal": [2],
-  "no-prototype-builtins": [2],
-  "no-redeclare": [2],
-  "no-regex-spaces": [2],
-  "no-reserved-keys": [0],
-  "no-self-assign": [2],
-  "no-setter-return": [2],
-  "no-shadow-restricted-names": [2],
-  "no-space-before-semi": [0],
-  "no-spaced-func": [0],
-  "no-sparse-arrays": [2],
-  "no-tabs": [0],
-  "no-this-before-super": [2],
-  "no-trailing-spaces": [0],
-  "no-undef": [2],
-  "no-unexpected-multiline": [0],
-  "no-unreachable": [2],
-  "no-unsafe-finally": [2],
-  "no-unsafe-negation": [2],
-  "no-unsafe-optional-chaining": [2],
-  "no-unused-labels": [2],
-  "no-unused-private-class-members": [2],
-  "no-unused-vars": [
-    2,
-    {
-      "argsIgnorePattern": "^_$"
-    }
-  ],
-  "no-useless-backreference": [2],
-  "no-useless-catch": [2],
-  "no-useless-escape": [2],
-  "no-whitespace-before-property": [0],
-  "no-with": [2],
-  "no-wrap-func": [0],
-  "nonblock-statement-body-position": [0],
-  "object-curly-newline": [0],
-  "object-curly-spacing": [0],
-  "object-property-newline": [0],
-  "one-var-declaration-per-line": [0],
-  "operator-linebreak": [0],
-  "padded-blocks": [0],
-  "prefer-arrow-callback": [0],
-  "prefer-const": [2],
-  "prettier/prettier": [2],
-  "quote-props": [0],
-  "quotes": [0],
-  "react/jsx-child-element-spacing": [0],
-  "react/jsx-closing-bracket-location": [0],
-  "react/jsx-closing-tag-location": [0],
-  "react/jsx-curly-newline": [0],
-  "react/jsx-curly-spacing": [0],
-  "react/jsx-equals-spacing": [0],
-  "react/jsx-first-prop-new-line": [0],
-  "react/jsx-indent": [0],
-  "react/jsx-indent-props": [0],
-  "react/jsx-max-props-per-line": [0],
-  "react/jsx-newline": [0],
-  "react/jsx-one-expression-per-line": [0],
-  "react/jsx-props-no-multi-spaces": [0],
-  "react/jsx-space-before-closing": [0],
-  "react/jsx-tag-spacing": [0],
-  "react/jsx-wrap-multilines": [0],
-  "require-yield": [2],
-  "rest-spread-spacing": [0],
-  "semi": [0],
-  "semi-spacing": [0],
-  "semi-style": [0],
-  "space-after-function-name": [0],
-  "space-after-keywords": [0],
-  "space-before-blocks": [0],
-  "space-before-function-paren": [0],
-  "space-before-function-parentheses": [0],
-  "space-before-keywords": [0],
-  "space-in-brackets": [0],
-  "space-in-parens": [0],
-  "space-infix-ops": [0],
-  "space-return-throw-case": [0],
-  "space-unary-ops": [0],
-  "space-unary-word-ops": [0],
-  "standard/array-bracket-even-spacing": [0],
-  "standard/computed-property-even-spacing": [0],
-  "standard/object-curly-even-spacing": [0],
-  "switch-colon-spacing": [0],
-  "template-curly-spacing": [0],
-  "template-tag-spacing": [0],
-  "unicorn/empty-brace-spaces": [0],
-  "unicorn/no-nested-ternary": [0],
-  "unicorn/number-literal-case": [0],
-  "unicorn/template-indent": [0],
-  "use-isnan": [2],
-  "valid-typeof": [2],
-  "vue/array-bracket-newline": [0],
-  "vue/array-bracket-spacing": [0],
-  "vue/array-element-newline": [0],
-  "vue/arrow-spacing": [0],
-  "vue/attribute-hyphenation": [1],
-  "vue/attributes-order": [1],
-  "vue/block-spacing": [0],
-  "vue/block-tag-newline": [0],
-  "vue/brace-style": [0],
-  "vue/comma-dangle": [0],
-  "vue/comma-spacing": [0],
-  "vue/comma-style": [0],
-  "vue/comment-directive": [2],
-  "vue/component-definition-name-casing": [1],
-  "vue/component-tags-order": [
-    2,
-    {
-      "order": ["template", "script", "style"]
-    }
-  ],
-  "vue/dot-location": [0],
-  "vue/first-attribute-linebreak": [1],
-  "vue/func-call-spacing": [0],
-  "vue/html-closing-bracket-newline": [0],
-  "vue/html-closing-bracket-spacing": [0],
-  "vue/html-end-tags": [0],
-  "vue/html-indent": [0],
-  "vue/html-quotes": [0],
-  "vue/html-self-closing": [0],
-  "vue/jsx-uses-vars": [2],
-  "vue/key-spacing": [0],
-  "vue/keyword-spacing": [0],
-  "vue/max-attributes-per-line": [0],
-  "vue/max-len": [0],
-  "vue/multi-word-component-names": [0],
-  "vue/multiline-html-element-content-newline": [0],
-  "vue/multiline-ternary": [0],
-  "vue/mustache-interpolation-spacing": [0],
-  "vue/no-arrow-functions-in-watch": [2],
-  "vue/no-async-in-computed-properties": [2],
-  "vue/no-child-content": [2],
-  "vue/no-computed-properties-in-data": [2],
-  "vue/no-deprecated-data-object-declaration": [2],
-  "vue/no-deprecated-destroyed-lifecycle": [2],
-  "vue/no-deprecated-dollar-listeners-api": [2],
-  "vue/no-deprecated-dollar-scopedslots-api": [2],
-  "vue/no-deprecated-events-api": [2],
-  "vue/no-deprecated-filter": [2],
-  "vue/no-deprecated-functional-template": [2],
-  "vue/no-deprecated-html-element-is": [2],
-  "vue/no-deprecated-inline-template": [2],
-  "vue/no-deprecated-props-default-this": [2],
-  "vue/no-deprecated-router-link-tag-prop": [2],
-  "vue/no-deprecated-scope-attribute": [2],
-  "vue/no-deprecated-slot-attribute": [2],
-  "vue/no-deprecated-slot-scope-attribute": [2],
-  "vue/no-deprecated-v-bind-sync": [2],
-  "vue/no-deprecated-v-is": [2],
-  "vue/no-deprecated-v-on-native-modifier": [2],
-  "vue/no-deprecated-v-on-number-modifiers": [2],
-  "vue/no-deprecated-vue-config-keycodes": [2],
-  "vue/no-dupe-keys": [2],
-  "vue/no-dupe-v-else-if": [2],
-  "vue/no-duplicate-attributes": [2],
-  "vue/no-export-in-script-setup": [2],
-  "vue/no-expose-after-await": [2],
-  "vue/no-extra-parens": [0],
-  "vue/no-lifecycle-after-await": [2],
-  "vue/no-lone-template": [1],
-  "vue/no-multi-spaces": [0],
-  "vue/no-multiple-slot-args": [1],
-  "vue/no-mutating-props": [2],
-  "vue/no-parsing-error": [2],
-  "vue/no-ref-as-operand": [2],
-  "vue/no-reserved-component-names": [0],
-  "vue/no-reserved-keys": [2],
-  "vue/no-reserved-props": [2],
-  "vue/no-shared-component-data": [2],
-  "vue/no-side-effects-in-computed-properties": [2],
-  "vue/no-spaces-around-equal-signs-in-attribute": [0],
-  "vue/no-template-key": [2],
-  "vue/no-template-shadow": [1],
-  "vue/no-textarea-mustache": [2],
-  "vue/no-unused-components": [2],
-  "vue/no-unused-vars": [
-    2,
-    {
-      "ignorePattern": "^_"
-    }
-  ],
-  "vue/no-use-computed-property-like-method": [2],
-  "vue/no-use-v-if-with-v-for": [2],
-  "vue/no-useless-template-attributes": [2],
-  "vue/no-v-for-template-key-on-child": [2],
-  "vue/no-v-html": [1],
-  "vue/no-v-text-v-html-on-component": [2],
-  "vue/no-watch-after-await": [2],
-  "vue/object-curly-newline": [0],
-  "vue/object-curly-spacing": [0],
-  "vue/object-property-newline": [0],
-  "vue/one-component-per-file": [1],
-  "vue/operator-linebreak": [0],
-  "vue/order-in-components": [1],
-  "vue/prefer-import-from-vue": [2],
-  "vue/prop-name-casing": [1],
-  "vue/quote-props": [0],
-  "vue/require-component-is": [2],
-  "vue/require-default-prop": [1],
-  "vue/require-explicit-emits": [1],
-  "vue/require-prop-type-constructor": [2],
-  "vue/require-prop-types": [1],
-  "vue/require-render-return": [2],
-  "vue/require-slots-as-functions": [2],
-  "vue/require-toggle-inside-transition": [2],
-  "vue/require-v-for-key": [2],
-  "vue/require-valid-default-prop": [2],
-  "vue/return-in-computed-property": [2],
-  "vue/return-in-emits-validator": [2],
-  "vue/script-indent": [0],
-  "vue/singleline-html-element-content-newline": [0],
-  "vue/space-in-parens": [0],
-  "vue/space-infix-ops": [0],
-  "vue/space-unary-ops": [0],
-  "vue/template-curly-spacing": [0],
-  "vue/this-in-template": [1],
-  "vue/use-v-on-exact": [2],
-  "vue/v-bind-style": [1],
-  "vue/v-on-event-hyphenation": [
-    1,
-    "always",
-    {
-      "autofix": true
-    }
-  ],
-  "vue/v-on-style": [1],
-  "vue/v-slot-style": [1],
-  "vue/valid-attribute-name": [2],
-  "vue/valid-define-emits": [2],
-  "vue/valid-define-props": [2],
-  "vue/valid-next-tick": [2],
-  "vue/valid-template-root": [2],
-  "vue/valid-v-bind": [2],
-  "vue/valid-v-cloak": [2],
-  "vue/valid-v-else": [2],
-  "vue/valid-v-else-if": [2],
-  "vue/valid-v-for": [0],
-  "vue/valid-v-html": [2],
-  "vue/valid-v-if": [2],
-  "vue/valid-v-is": [2],
-  "vue/valid-v-memo": [2],
-  "vue/valid-v-model": [2],
-  "vue/valid-v-on": [2],
-  "vue/valid-v-once": [2],
-  "vue/valid-v-pre": [2],
-  "vue/valid-v-show": [2],
-  "vue/valid-v-slot": [2],
-  "vue/valid-v-text": [2],
-  "wrap-iife": [0],
-  "wrap-regex": [0],
-  "yield-star-spacing": [0]
-}

From 27f19de8fa18e48f6db319aad58e1673616a401a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 12 Aug 2024 23:13:58 +0000
Subject: [PATCH 043/273] chore(deps): update pulumi/pulumi-nodejs docker tag
 to v3.129.0

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 96e39f8730..4ad8bc9de1 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -1,6 +1,6 @@
 services:
   aws-setup:
-    image: pulumi/pulumi-nodejs:3.127.0
+    image: pulumi/pulumi-nodejs:3.129.0
     container_name: 'ecamp3-aws-setup'
     volumes:
       - ../../.prettierrc:/.prettierrc:delegated

From bf9818502782a5b69d9344b4c1ce220c67a5d2a6 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 12 Aug 2024 23:20:22 +0000
Subject: [PATCH 044/273] fix(deps): update dependency @pulumi/pulumi to
 v3.129.0

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index 5e0092e1a9..695ab3f39c 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -8,7 +8,7 @@
             "dependencies": {
                 "@pulumi/aws": "6.49.0",
                 "@pulumi/awsx": "2.14.0",
-                "@pulumi/pulumi": "3.128.0"
+                "@pulumi/pulumi": "3.129.0"
             },
             "devDependencies": {
                 "@babel/eslint-parser": "7.25.1",
@@ -2060,9 +2060,9 @@
             }
         },
         "node_modules/@pulumi/pulumi": {
-            "version": "3.128.0",
-            "resolved": "https://registry.npmjs.org/@pulumi/pulumi/-/pulumi-3.128.0.tgz",
-            "integrity": "sha512-Xqe5uYp1RpDihK3VbdBFR4q1h+ICg/2Xgg1d7aYWmPqBCIUG4jWddLS0REQO60EsgKBNarXhLeQSmaWXLgiq9w==",
+            "version": "3.129.0",
+            "resolved": "https://registry.npmjs.org/@pulumi/pulumi/-/pulumi-3.129.0.tgz",
+            "integrity": "sha512-kjdO81GzEBwFHTYBUg/nz63RLuJ2T4SwObTKBgrfLsyYiPxvTaWdS7Y/N5ww6d4GgnmRNr/dh5mb1LuhlL41fQ==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@grpc/grpc-js": "^1.10.1",
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index e5ce38d51a..040a4b5d01 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -10,7 +10,7 @@
         "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json,md}"
     },
     "dependencies": {
-        "@pulumi/pulumi": "3.128.0",
+        "@pulumi/pulumi": "3.129.0",
         "@pulumi/aws": "6.49.0",
         "@pulumi/awsx": "2.14.0"
     },

From af50211239c0617c5eb73b61ca81b66d30af4c26 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 13 Aug 2024 01:19:26 +0000
Subject: [PATCH 045/273] chore(deps): lock file maintenance

---
 .ops/aws-setup/package-lock.json |  294 +++---
 api/composer.lock                |   56 +-
 e2e/package-lock.json            |   18 +-
 frontend/package-lock.json       |  523 +++++-----
 pdf/package-lock.json            |  303 +++---
 print/package-lock.json          | 1576 +++++++++++++-----------------
 translation/package-lock.json    |   20 +-
 7 files changed, 1311 insertions(+), 1479 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index 695ab3f39c..c56e9d0c7a 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -163,17 +163,17 @@
             }
         },
         "node_modules/@aws-sdk/client-ecs": {
-            "version": "3.620.1",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecs/-/client-ecs-3.620.1.tgz",
-            "integrity": "sha512-5d24INktG/r5yEX/hlPRTLwoz1KByYBNAKG+BtGw3FRm9C4G7uGE77gPp3MR8Wq5MftmpLlOaFg7MalykYUYuw==",
+            "version": "3.629.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecs/-/client-ecs-3.629.0.tgz",
+            "integrity": "sha512-yZP0bPzZgpYPdDRNPYTZY0p5D/GTLZzhxpt3Os9kWZmyRtk/JXR69aaFPf1urTAjQAezQyRG38x/kzyRMYPmzw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
                 "@aws-crypto/sha256-js": "5.2.0",
-                "@aws-sdk/client-sso-oidc": "3.620.1",
-                "@aws-sdk/client-sts": "3.620.1",
-                "@aws-sdk/core": "3.620.1",
-                "@aws-sdk/credential-provider-node": "3.620.1",
+                "@aws-sdk/client-sso-oidc": "3.629.0",
+                "@aws-sdk/client-sts": "3.629.0",
+                "@aws-sdk/core": "3.629.0",
+                "@aws-sdk/credential-provider-node": "3.629.0",
                 "@aws-sdk/middleware-host-header": "3.620.0",
                 "@aws-sdk/middleware-logger": "3.609.0",
                 "@aws-sdk/middleware-recursion-detection": "3.620.0",
@@ -184,26 +184,26 @@
                 "@aws-sdk/util-user-agent-browser": "3.609.0",
                 "@aws-sdk/util-user-agent-node": "3.614.0",
                 "@smithy/config-resolver": "^3.0.5",
-                "@smithy/core": "^2.3.0",
-                "@smithy/fetch-http-handler": "^3.2.3",
+                "@smithy/core": "^2.3.2",
+                "@smithy/fetch-http-handler": "^3.2.4",
                 "@smithy/hash-node": "^3.0.3",
                 "@smithy/invalid-dependency": "^3.0.3",
                 "@smithy/middleware-content-length": "^3.0.5",
                 "@smithy/middleware-endpoint": "^3.1.0",
-                "@smithy/middleware-retry": "^3.0.12",
+                "@smithy/middleware-retry": "^3.0.14",
                 "@smithy/middleware-serde": "^3.0.3",
                 "@smithy/middleware-stack": "^3.0.3",
                 "@smithy/node-config-provider": "^3.1.4",
                 "@smithy/node-http-handler": "^3.1.4",
                 "@smithy/protocol-http": "^4.1.0",
-                "@smithy/smithy-client": "^3.1.10",
+                "@smithy/smithy-client": "^3.1.12",
                 "@smithy/types": "^3.3.0",
                 "@smithy/url-parser": "^3.0.3",
                 "@smithy/util-base64": "^3.0.0",
                 "@smithy/util-body-length-browser": "^3.0.0",
                 "@smithy/util-body-length-node": "^3.0.0",
-                "@smithy/util-defaults-mode-browser": "^3.0.12",
-                "@smithy/util-defaults-mode-node": "^3.0.12",
+                "@smithy/util-defaults-mode-browser": "^3.0.14",
+                "@smithy/util-defaults-mode-node": "^3.0.14",
                 "@smithy/util-endpoints": "^2.0.5",
                 "@smithy/util-middleware": "^3.0.3",
                 "@smithy/util-retry": "^3.0.3",
@@ -217,14 +217,14 @@
             }
         },
         "node_modules/@aws-sdk/client-sso": {
-            "version": "3.620.1",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.620.1.tgz",
-            "integrity": "sha512-4Ox0BSs+atrAhLvjNHN2uiYvSTdpMv//IS4l4XRoQG0cJKIPLs3OU3PL5H0X1NfZehz9/8FTWl5Lv81uw4j1eA==",
+            "version": "3.629.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.629.0.tgz",
+            "integrity": "sha512-2w8xU4O0Grca5HmT2dXZ5fF0g39RxODtmoqHJDsK5DSt750LqDG4w3ktmBvQs3+SrpkkJOjlX5v/hb2PCxVbww==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
                 "@aws-crypto/sha256-js": "5.2.0",
-                "@aws-sdk/core": "3.620.1",
+                "@aws-sdk/core": "3.629.0",
                 "@aws-sdk/middleware-host-header": "3.620.0",
                 "@aws-sdk/middleware-logger": "3.609.0",
                 "@aws-sdk/middleware-recursion-detection": "3.620.0",
@@ -235,26 +235,26 @@
                 "@aws-sdk/util-user-agent-browser": "3.609.0",
                 "@aws-sdk/util-user-agent-node": "3.614.0",
                 "@smithy/config-resolver": "^3.0.5",
-                "@smithy/core": "^2.3.0",
-                "@smithy/fetch-http-handler": "^3.2.3",
+                "@smithy/core": "^2.3.2",
+                "@smithy/fetch-http-handler": "^3.2.4",
                 "@smithy/hash-node": "^3.0.3",
                 "@smithy/invalid-dependency": "^3.0.3",
                 "@smithy/middleware-content-length": "^3.0.5",
                 "@smithy/middleware-endpoint": "^3.1.0",
-                "@smithy/middleware-retry": "^3.0.12",
+                "@smithy/middleware-retry": "^3.0.14",
                 "@smithy/middleware-serde": "^3.0.3",
                 "@smithy/middleware-stack": "^3.0.3",
                 "@smithy/node-config-provider": "^3.1.4",
                 "@smithy/node-http-handler": "^3.1.4",
                 "@smithy/protocol-http": "^4.1.0",
-                "@smithy/smithy-client": "^3.1.10",
+                "@smithy/smithy-client": "^3.1.12",
                 "@smithy/types": "^3.3.0",
                 "@smithy/url-parser": "^3.0.3",
                 "@smithy/util-base64": "^3.0.0",
                 "@smithy/util-body-length-browser": "^3.0.0",
                 "@smithy/util-body-length-node": "^3.0.0",
-                "@smithy/util-defaults-mode-browser": "^3.0.12",
-                "@smithy/util-defaults-mode-node": "^3.0.12",
+                "@smithy/util-defaults-mode-browser": "^3.0.14",
+                "@smithy/util-defaults-mode-node": "^3.0.14",
                 "@smithy/util-endpoints": "^2.0.5",
                 "@smithy/util-middleware": "^3.0.3",
                 "@smithy/util-retry": "^3.0.3",
@@ -266,15 +266,15 @@
             }
         },
         "node_modules/@aws-sdk/client-sso-oidc": {
-            "version": "3.620.1",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.620.1.tgz",
-            "integrity": "sha512-gm69ttbkr7Kbg/Zzr3SczyLWkLgmK3bEZtkvbM/40ZW5ItYhDzJE48Ovs2lyA64h2YsOftDqqwcbJirAAdTgSg==",
+            "version": "3.629.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.629.0.tgz",
+            "integrity": "sha512-3if0LauNJPqubGYf8vnlkp+B3yAeKRuRNxfNbHlE6l510xWGcKK/ZsEmiFmfePzKKSRrDh/cxMFMScgOrXptNg==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
                 "@aws-crypto/sha256-js": "5.2.0",
-                "@aws-sdk/core": "3.620.1",
-                "@aws-sdk/credential-provider-node": "3.620.1",
+                "@aws-sdk/core": "3.629.0",
+                "@aws-sdk/credential-provider-node": "3.629.0",
                 "@aws-sdk/middleware-host-header": "3.620.0",
                 "@aws-sdk/middleware-logger": "3.609.0",
                 "@aws-sdk/middleware-recursion-detection": "3.620.0",
@@ -285,26 +285,26 @@
                 "@aws-sdk/util-user-agent-browser": "3.609.0",
                 "@aws-sdk/util-user-agent-node": "3.614.0",
                 "@smithy/config-resolver": "^3.0.5",
-                "@smithy/core": "^2.3.0",
-                "@smithy/fetch-http-handler": "^3.2.3",
+                "@smithy/core": "^2.3.2",
+                "@smithy/fetch-http-handler": "^3.2.4",
                 "@smithy/hash-node": "^3.0.3",
                 "@smithy/invalid-dependency": "^3.0.3",
                 "@smithy/middleware-content-length": "^3.0.5",
                 "@smithy/middleware-endpoint": "^3.1.0",
-                "@smithy/middleware-retry": "^3.0.12",
+                "@smithy/middleware-retry": "^3.0.14",
                 "@smithy/middleware-serde": "^3.0.3",
                 "@smithy/middleware-stack": "^3.0.3",
                 "@smithy/node-config-provider": "^3.1.4",
                 "@smithy/node-http-handler": "^3.1.4",
                 "@smithy/protocol-http": "^4.1.0",
-                "@smithy/smithy-client": "^3.1.10",
+                "@smithy/smithy-client": "^3.1.12",
                 "@smithy/types": "^3.3.0",
                 "@smithy/url-parser": "^3.0.3",
                 "@smithy/util-base64": "^3.0.0",
                 "@smithy/util-body-length-browser": "^3.0.0",
                 "@smithy/util-body-length-node": "^3.0.0",
-                "@smithy/util-defaults-mode-browser": "^3.0.12",
-                "@smithy/util-defaults-mode-node": "^3.0.12",
+                "@smithy/util-defaults-mode-browser": "^3.0.14",
+                "@smithy/util-defaults-mode-node": "^3.0.14",
                 "@smithy/util-endpoints": "^2.0.5",
                 "@smithy/util-middleware": "^3.0.3",
                 "@smithy/util-retry": "^3.0.3",
@@ -315,20 +315,20 @@
                 "node": ">=16.0.0"
             },
             "peerDependencies": {
-                "@aws-sdk/client-sts": "^3.620.1"
+                "@aws-sdk/client-sts": "^3.629.0"
             }
         },
         "node_modules/@aws-sdk/client-sts": {
-            "version": "3.620.1",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.620.1.tgz",
-            "integrity": "sha512-d+ECGFDg0IsDdmfKU2O0VeMYKZcmbfBaA9HkZnZ39wu1BlXGI73xJe8cfmzbobvu+Ly+bAfHdLCpgIY+pD4D7g==",
+            "version": "3.629.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.629.0.tgz",
+            "integrity": "sha512-RjOs371YwnSVGxhPjuluJKaxl4gcPYTAky0nPjwBime0i9/iS9nI8R8l5j7k7ec9tpFWjBPvNnThCU07pvjdzw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
                 "@aws-crypto/sha256-js": "5.2.0",
-                "@aws-sdk/client-sso-oidc": "3.620.1",
-                "@aws-sdk/core": "3.620.1",
-                "@aws-sdk/credential-provider-node": "3.620.1",
+                "@aws-sdk/client-sso-oidc": "3.629.0",
+                "@aws-sdk/core": "3.629.0",
+                "@aws-sdk/credential-provider-node": "3.629.0",
                 "@aws-sdk/middleware-host-header": "3.620.0",
                 "@aws-sdk/middleware-logger": "3.609.0",
                 "@aws-sdk/middleware-recursion-detection": "3.620.0",
@@ -339,26 +339,26 @@
                 "@aws-sdk/util-user-agent-browser": "3.609.0",
                 "@aws-sdk/util-user-agent-node": "3.614.0",
                 "@smithy/config-resolver": "^3.0.5",
-                "@smithy/core": "^2.3.0",
-                "@smithy/fetch-http-handler": "^3.2.3",
+                "@smithy/core": "^2.3.2",
+                "@smithy/fetch-http-handler": "^3.2.4",
                 "@smithy/hash-node": "^3.0.3",
                 "@smithy/invalid-dependency": "^3.0.3",
                 "@smithy/middleware-content-length": "^3.0.5",
                 "@smithy/middleware-endpoint": "^3.1.0",
-                "@smithy/middleware-retry": "^3.0.12",
+                "@smithy/middleware-retry": "^3.0.14",
                 "@smithy/middleware-serde": "^3.0.3",
                 "@smithy/middleware-stack": "^3.0.3",
                 "@smithy/node-config-provider": "^3.1.4",
                 "@smithy/node-http-handler": "^3.1.4",
                 "@smithy/protocol-http": "^4.1.0",
-                "@smithy/smithy-client": "^3.1.10",
+                "@smithy/smithy-client": "^3.1.12",
                 "@smithy/types": "^3.3.0",
                 "@smithy/url-parser": "^3.0.3",
                 "@smithy/util-base64": "^3.0.0",
                 "@smithy/util-body-length-browser": "^3.0.0",
                 "@smithy/util-body-length-node": "^3.0.0",
-                "@smithy/util-defaults-mode-browser": "^3.0.12",
-                "@smithy/util-defaults-mode-node": "^3.0.12",
+                "@smithy/util-defaults-mode-browser": "^3.0.14",
+                "@smithy/util-defaults-mode-node": "^3.0.14",
                 "@smithy/util-endpoints": "^2.0.5",
                 "@smithy/util-middleware": "^3.0.3",
                 "@smithy/util-retry": "^3.0.3",
@@ -370,19 +370,20 @@
             }
         },
         "node_modules/@aws-sdk/core": {
-            "version": "3.620.1",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.620.1.tgz",
-            "integrity": "sha512-6Ejce93dDlDnovl6oYtxj3I/SJMOQoFdmmtM4+4W/cgMWH+l00T5aszVxDLjjPfu3Ryt7dNhrXaYeK2Ue1ZBmg==",
+            "version": "3.629.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.629.0.tgz",
+            "integrity": "sha512-+/ShPU/tyIBM3oY1cnjgNA/tFyHtlWq+wXF9xEKRv19NOpYbWQ+xzNwVjGq8vR07cCRqy/sDQLWPhxjtuV/FiQ==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/core": "^2.3.0",
+                "@smithy/core": "^2.3.2",
                 "@smithy/node-config-provider": "^3.1.4",
+                "@smithy/property-provider": "^3.1.3",
                 "@smithy/protocol-http": "^4.1.0",
                 "@smithy/signature-v4": "^4.1.0",
-                "@smithy/smithy-client": "^3.1.10",
+                "@smithy/smithy-client": "^3.1.12",
                 "@smithy/types": "^3.3.0",
                 "@smithy/util-middleware": "^3.0.3",
-                "fast-xml-parser": "4.2.5",
+                "fast-xml-parser": "4.4.1",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -405,19 +406,19 @@
             }
         },
         "node_modules/@aws-sdk/credential-provider-http": {
-            "version": "3.620.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.620.0.tgz",
-            "integrity": "sha512-BI2BdrSKDmB/2ouB/NJR0PT0x/+5fmoF6XOE78hFBb4F5w/yynGgcJY936dF+oREfpME6ehjB2b0okGg78Scpw==",
+            "version": "3.622.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.622.0.tgz",
+            "integrity": "sha512-VUHbr24Oll1RK3WR8XLUugLpgK9ZuxEm/NVeVqyFts1Ck9gsKpRg1x4eH7L7tW3SJ4TDEQNMbD7/7J+eoL2svg==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/types": "3.609.0",
-                "@smithy/fetch-http-handler": "^3.2.3",
+                "@smithy/fetch-http-handler": "^3.2.4",
                 "@smithy/node-http-handler": "^3.1.4",
                 "@smithy/property-provider": "^3.1.3",
                 "@smithy/protocol-http": "^4.1.0",
-                "@smithy/smithy-client": "^3.1.10",
+                "@smithy/smithy-client": "^3.1.12",
                 "@smithy/types": "^3.3.0",
-                "@smithy/util-stream": "^3.1.2",
+                "@smithy/util-stream": "^3.1.3",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -425,16 +426,16 @@
             }
         },
         "node_modules/@aws-sdk/credential-provider-ini": {
-            "version": "3.620.1",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.620.1.tgz",
-            "integrity": "sha512-m9jwigMPRlRRhoPxCQZMOwQUd6imEJbksF6tSMYNae76DIvrCi4z2Jhp6RJ9Mij8cnewUZCAmvu2FlK9+n9M7A==",
+            "version": "3.629.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.629.0.tgz",
+            "integrity": "sha512-r9fI7BABARvVDp77DBUImQzYdvarAIdhbvpCEZib0rlpvfWu3zxE9KZcapCAAi0MPjxeDfb7RMehFQIkAP7mYw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/credential-provider-env": "3.620.1",
-                "@aws-sdk/credential-provider-http": "3.620.0",
+                "@aws-sdk/credential-provider-http": "3.622.0",
                 "@aws-sdk/credential-provider-process": "3.620.1",
-                "@aws-sdk/credential-provider-sso": "3.620.1",
-                "@aws-sdk/credential-provider-web-identity": "3.609.0",
+                "@aws-sdk/credential-provider-sso": "3.629.0",
+                "@aws-sdk/credential-provider-web-identity": "3.621.0",
                 "@aws-sdk/types": "3.609.0",
                 "@smithy/credential-provider-imds": "^3.2.0",
                 "@smithy/property-provider": "^3.1.3",
@@ -446,21 +447,21 @@
                 "node": ">=16.0.0"
             },
             "peerDependencies": {
-                "@aws-sdk/client-sts": "^3.620.1"
+                "@aws-sdk/client-sts": "^3.629.0"
             }
         },
         "node_modules/@aws-sdk/credential-provider-node": {
-            "version": "3.620.1",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.620.1.tgz",
-            "integrity": "sha512-KaprIJW2azM+oTIHi7S1ayJ3oQqoFwpMBWFpZM1nvSzaPucrZIUmX2m4uVrMM4LfXsfUsgMkrme2rBI1fGAjCg==",
+            "version": "3.629.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.629.0.tgz",
+            "integrity": "sha512-868hnVOLlXOBHk91Rl0jZIRgr/M4WJCa0nOrW9A9yidsQxuZp9P0vshDmm4hMvNZadmPIfo0Rra2MpA4RELoCw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/credential-provider-env": "3.620.1",
-                "@aws-sdk/credential-provider-http": "3.620.0",
-                "@aws-sdk/credential-provider-ini": "3.620.1",
+                "@aws-sdk/credential-provider-http": "3.622.0",
+                "@aws-sdk/credential-provider-ini": "3.629.0",
                 "@aws-sdk/credential-provider-process": "3.620.1",
-                "@aws-sdk/credential-provider-sso": "3.620.1",
-                "@aws-sdk/credential-provider-web-identity": "3.609.0",
+                "@aws-sdk/credential-provider-sso": "3.629.0",
+                "@aws-sdk/credential-provider-web-identity": "3.621.0",
                 "@aws-sdk/types": "3.609.0",
                 "@smithy/credential-provider-imds": "^3.2.0",
                 "@smithy/property-provider": "^3.1.3",
@@ -489,12 +490,12 @@
             }
         },
         "node_modules/@aws-sdk/credential-provider-sso": {
-            "version": "3.620.1",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.620.1.tgz",
-            "integrity": "sha512-cFU8e6ctdkWR8BRCnHFzs37N+ilbHf1OT2EeMjt1ZDE9FgTD5L5BTgVWDxnPmyQnEoBs1p4PyNPHkpHY5EmswQ==",
+            "version": "3.629.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.629.0.tgz",
+            "integrity": "sha512-Lf4XOuj6jamxgGZGrVojERh5S+NS2t2S4CUOnAu6tJ5U0GPlpjhINUKlcVxJBpsIXudMGW1nkumAd3+kazCPig==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@aws-sdk/client-sso": "3.620.1",
+                "@aws-sdk/client-sso": "3.629.0",
                 "@aws-sdk/token-providers": "3.614.0",
                 "@aws-sdk/types": "3.609.0",
                 "@smithy/property-provider": "^3.1.3",
@@ -507,9 +508,9 @@
             }
         },
         "node_modules/@aws-sdk/credential-provider-web-identity": {
-            "version": "3.609.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.609.0.tgz",
-            "integrity": "sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg==",
+            "version": "3.621.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz",
+            "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/types": "3.609.0",
@@ -521,7 +522,7 @@
                 "node": ">=16.0.0"
             },
             "peerDependencies": {
-                "@aws-sdk/client-sts": "^3.609.0"
+                "@aws-sdk/client-sts": "^3.621.0"
             }
         },
         "node_modules/@aws-sdk/middleware-host-header": {
@@ -923,12 +924,15 @@
             }
         },
         "node_modules/@babel/parser": {
-            "version": "7.25.0",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz",
-            "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==",
+            "version": "7.25.3",
+            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
+            "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
             "dev": true,
             "license": "MIT",
             "peer": true,
+            "dependencies": {
+                "@babel/types": "^7.25.2"
+            },
             "bin": {
                 "parser": "bin/babel-parser.js"
             },
@@ -953,16 +957,16 @@
             }
         },
         "node_modules/@babel/traverse": {
-            "version": "7.25.2",
-            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz",
-            "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==",
+            "version": "7.25.3",
+            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
+            "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
             "dev": true,
             "license": "MIT",
             "peer": true,
             "dependencies": {
                 "@babel/code-frame": "^7.24.7",
                 "@babel/generator": "^7.25.0",
-                "@babel/parser": "^7.25.0",
+                "@babel/parser": "^7.25.3",
                 "@babel/template": "^7.25.0",
                 "@babel/types": "^7.25.2",
                 "debug": "^4.3.1",
@@ -2246,16 +2250,16 @@
             }
         },
         "node_modules/@smithy/core": {
-            "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.3.1.tgz",
-            "integrity": "sha512-BC7VMXx/1BCmRPCVzzn4HGWAtsrb7/0758EtwOGFJQrlSwJBEjCcDLNZLFoL/68JexYa2s+KmgL/UfmXdG6v1w==",
+            "version": "2.3.2",
+            "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.3.2.tgz",
+            "integrity": "sha512-in5wwt6chDBcUv1Lw1+QzZxN9fBffi+qOixfb65yK4sDuKG7zAUO9HAFqmVzsZM3N+3tTyvZjtnDXePpvp007Q==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@smithy/middleware-endpoint": "^3.1.0",
-                "@smithy/middleware-retry": "^3.0.13",
+                "@smithy/middleware-retry": "^3.0.14",
                 "@smithy/middleware-serde": "^3.0.3",
                 "@smithy/protocol-http": "^4.1.0",
-                "@smithy/smithy-client": "^3.1.11",
+                "@smithy/smithy-client": "^3.1.12",
                 "@smithy/types": "^3.3.0",
                 "@smithy/util-middleware": "^3.0.3",
                 "tslib": "^2.6.2"
@@ -2363,15 +2367,15 @@
             }
         },
         "node_modules/@smithy/middleware-retry": {
-            "version": "3.0.13",
-            "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.13.tgz",
-            "integrity": "sha512-zvCLfaRYCaUmjbF2yxShGZdolSHft7NNCTA28HVN9hKcEbOH+g5irr1X9s+in8EpambclGnevZY4A3lYpvDCFw==",
+            "version": "3.0.14",
+            "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.14.tgz",
+            "integrity": "sha512-7ZaWZJOjUxa5hgmuMspyt8v/zVsh0GXYuF7OvCmdcbVa/xbnKQoYC+uYKunAqRGTkxjOyuOCw9rmFUFOqqC0eQ==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@smithy/node-config-provider": "^3.1.4",
                 "@smithy/protocol-http": "^4.1.0",
                 "@smithy/service-error-classification": "^3.0.3",
-                "@smithy/smithy-client": "^3.1.11",
+                "@smithy/smithy-client": "^3.1.12",
                 "@smithy/types": "^3.3.0",
                 "@smithy/util-middleware": "^3.0.3",
                 "@smithy/util-retry": "^3.0.3",
@@ -2537,9 +2541,9 @@
             }
         },
         "node_modules/@smithy/smithy-client": {
-            "version": "3.1.11",
-            "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.11.tgz",
-            "integrity": "sha512-l0BpyYkciNyMaS+PnFFz4aO5sBcXvGLoJd7mX9xrMBIm2nIQBVvYgp2ZpPDMzwjKCavsXu06iuCm0F6ZJZc6yQ==",
+            "version": "3.1.12",
+            "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.12.tgz",
+            "integrity": "sha512-wtm8JtsycthkHy1YA4zjIh2thJgIQ9vGkoR639DBx5lLlLNU0v4GARpQZkr2WjXue74nZ7MiTSWfVrLkyD8RkA==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@smithy/middleware-endpoint": "^3.1.0",
@@ -2637,13 +2641,13 @@
             }
         },
         "node_modules/@smithy/util-defaults-mode-browser": {
-            "version": "3.0.13",
-            "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.13.tgz",
-            "integrity": "sha512-ZIRSUsnnMRStOP6OKtW+gCSiVFkwnfQF2xtf32QKAbHR6ACjhbAybDvry+3L5qQYdh3H6+7yD/AiUE45n8mTTw==",
+            "version": "3.0.14",
+            "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.14.tgz",
+            "integrity": "sha512-0iwTgKKmAIf+vFLV8fji21Jb2px11ktKVxbX6LIDPAUJyWQqGqBVfwba7xwa1f2FZUoolYQgLvxQEpJycXuQ5w==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@smithy/property-provider": "^3.1.3",
-                "@smithy/smithy-client": "^3.1.11",
+                "@smithy/smithy-client": "^3.1.12",
                 "@smithy/types": "^3.3.0",
                 "bowser": "^2.11.0",
                 "tslib": "^2.6.2"
@@ -2653,16 +2657,16 @@
             }
         },
         "node_modules/@smithy/util-defaults-mode-node": {
-            "version": "3.0.13",
-            "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.13.tgz",
-            "integrity": "sha512-voUa8TFJGfD+U12tlNNLCDlXibt9vRdNzRX45Onk/WxZe7TS+hTOZouEZRa7oARGicdgeXvt1A0W45qLGYdy+g==",
+            "version": "3.0.14",
+            "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.14.tgz",
+            "integrity": "sha512-e9uQarJKfXApkTMMruIdxHprhcXivH1flYCe8JRDTzkkLx8dA3V5J8GZlST9yfDiRWkJpZJlUXGN9Rc9Ade3OQ==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@smithy/config-resolver": "^3.0.5",
                 "@smithy/credential-provider-imds": "^3.2.0",
                 "@smithy/node-config-provider": "^3.1.4",
                 "@smithy/property-provider": "^3.1.3",
-                "@smithy/smithy-client": "^3.1.11",
+                "@smithy/smithy-client": "^3.1.12",
                 "@smithy/types": "^3.3.0",
                 "tslib": "^2.6.2"
             },
@@ -2816,9 +2820,9 @@
             }
         },
         "node_modules/@types/aws-lambda": {
-            "version": "8.10.142",
-            "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.142.tgz",
-            "integrity": "sha512-wy2y/2hQKrS6myOS++koXg3N1Hg+LLyPjaggCFajczSHZPqBnOMuT2sdH3kiASrmdBYyM3pmjyz5SoWraRllCQ==",
+            "version": "8.10.143",
+            "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.143.tgz",
+            "integrity": "sha512-u5vzlcR14ge/4pMTTMDQr3MF0wEe38B2F9o84uC4F43vN5DGTy63npRrB6jQhyt+C0lGv4ZfiRcRkqJoZuPnmg==",
             "license": "MIT"
         },
         "node_modules/@types/cacheable-request": {
@@ -3154,9 +3158,9 @@
             }
         },
         "node_modules/aws-sdk": {
-            "version": "2.1664.0",
-            "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1664.0.tgz",
-            "integrity": "sha512-S2IA1cCGz38d8ZKsuQGwlK3LE+9cXFt7OFsSGQtKX1Mc40xFXpiqQy7jX1r0vZIiy9ZMnxeTcBPM28G/yYu2kA==",
+            "version": "2.1673.0",
+            "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1673.0.tgz",
+            "integrity": "sha512-7tcc+y7XmCt2aq3vq46xpJTDMNqukFhJOXsQuuwsMZiydZpGG7l7wbpTOtfFhktieSjLg4V9eyznpnZNz5aooA==",
             "hasInstallScript": true,
             "license": "Apache-2.0",
             "dependencies": {
@@ -3241,9 +3245,9 @@
             }
         },
         "node_modules/browserslist": {
-            "version": "4.23.2",
-            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
-            "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
+            "version": "4.23.3",
+            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
+            "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
             "dev": true,
             "funding": [
                 {
@@ -3262,9 +3266,9 @@
             "license": "MIT",
             "peer": true,
             "dependencies": {
-                "caniuse-lite": "^1.0.30001640",
-                "electron-to-chromium": "^1.4.820",
-                "node-releases": "^2.0.14",
+                "caniuse-lite": "^1.0.30001646",
+                "electron-to-chromium": "^1.5.4",
+                "node-releases": "^2.0.18",
                 "update-browserslist-db": "^1.1.0"
             },
             "bin": {
@@ -3401,9 +3405,9 @@
             }
         },
         "node_modules/caniuse-lite": {
-            "version": "1.0.30001644",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001644.tgz",
-            "integrity": "sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==",
+            "version": "1.0.30001651",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
+            "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
             "dev": true,
             "funding": [
                 {
@@ -3844,9 +3848,9 @@
             "license": "MIT"
         },
         "node_modules/electron-to-chromium": {
-            "version": "1.5.3",
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.3.tgz",
-            "integrity": "sha512-QNdYSS5i8D9axWp/6XIezRObRHqaav/ur9z1VzCDUCH1XIFOr9WQk5xmgunhsTpjjgDy3oLxO/WMOVZlpUQrlA==",
+            "version": "1.5.6",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz",
+            "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==",
             "dev": true,
             "license": "ISC",
             "peer": true
@@ -4801,17 +4805,17 @@
             "license": "MIT"
         },
         "node_modules/fast-xml-parser": {
-            "version": "4.2.5",
-            "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz",
-            "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==",
+            "version": "4.4.1",
+            "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz",
+            "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==",
             "funding": [
-                {
-                    "type": "paypal",
-                    "url": "https://paypal.me/naturalintelligence"
-                },
                 {
                     "type": "github",
                     "url": "https://github.com/sponsors/NaturalIntelligence"
+                },
+                {
+                    "type": "paypal",
+                    "url": "https://paypal.me/naturalintelligence"
                 }
             ],
             "license": "MIT",
@@ -4908,9 +4912,9 @@
             }
         },
         "node_modules/foreground-child": {
-            "version": "3.2.1",
-            "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
-            "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
+            "version": "3.3.0",
+            "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+            "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
             "license": "ISC",
             "dependencies": {
                 "cross-spawn": "^7.0.0",
@@ -5367,9 +5371,9 @@
             "license": "BSD-3-Clause"
         },
         "node_modules/ignore": {
-            "version": "5.3.1",
-            "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
-            "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+            "version": "5.3.2",
+            "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+            "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
             "dev": true,
             "license": "MIT",
             "engines": {
@@ -5406,9 +5410,9 @@
             }
         },
         "node_modules/import-in-the-middle": {
-            "version": "1.10.0",
-            "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.10.0.tgz",
-            "integrity": "sha512-Z1jumVdF2GwnnYfM0a/y2ts7mZbwFMgt5rRuVmLgobgahC6iKgN5MBuXjzfTIOUpq5LSU10vJIPpVKe0X89fIw==",
+            "version": "1.11.0",
+            "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.11.0.tgz",
+            "integrity": "sha512-5DimNQGoe0pLUHbR9qK84iWaWjjbsxiqXnw6Qz64+azRgleqv9k2kTt5fw7QsOpmaGYtuxxursnPPsnTKEx10Q==",
             "license": "Apache-2.0",
             "dependencies": {
                 "acorn": "^8.8.2",
@@ -7007,9 +7011,9 @@
             }
         },
         "node_modules/postcss-selector-parser": {
-            "version": "6.1.1",
-            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
-            "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+            "version": "6.1.2",
+            "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+            "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
             "license": "MIT",
             "dependencies": {
                 "cssesc": "^3.0.0",
diff --git a/api/composer.lock b/api/composer.lock
index 8a91386393..c0f39ea91b 100644
--- a/api/composer.lock
+++ b/api/composer.lock
@@ -762,16 +762,16 @@
         },
         {
             "name": "doctrine/dbal",
-            "version": "3.8.6",
+            "version": "3.8.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/dbal.git",
-                "reference": "b7411825cf7efb7e51f9791dea19d86e43b399a1"
+                "reference": "2093d670ca17f634f3c095ec10a20687eccebd99"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/dbal/zipball/b7411825cf7efb7e51f9791dea19d86e43b399a1",
-                "reference": "b7411825cf7efb7e51f9791dea19d86e43b399a1",
+                "url": "https://api.github.com/repos/doctrine/dbal/zipball/2093d670ca17f634f3c095ec10a20687eccebd99",
+                "reference": "2093d670ca17f634f3c095ec10a20687eccebd99",
                 "shasum": ""
             },
             "require": {
@@ -787,12 +787,12 @@
                 "doctrine/coding-standard": "12.0.0",
                 "fig/log-test": "^1",
                 "jetbrains/phpstorm-stubs": "2023.1",
-                "phpstan/phpstan": "1.11.5",
+                "phpstan/phpstan": "1.11.7",
                 "phpstan/phpstan-strict-rules": "^1.6",
-                "phpunit/phpunit": "9.6.19",
+                "phpunit/phpunit": "9.6.20",
                 "psalm/plugin-phpunit": "0.18.4",
                 "slevomat/coding-standard": "8.13.1",
-                "squizlabs/php_codesniffer": "3.10.1",
+                "squizlabs/php_codesniffer": "3.10.2",
                 "symfony/cache": "^5.4|^6.0|^7.0",
                 "symfony/console": "^4.4|^5.4|^6.0|^7.0",
                 "vimeo/psalm": "4.30.0"
@@ -855,7 +855,7 @@
             ],
             "support": {
                 "issues": "https://github.com/doctrine/dbal/issues",
-                "source": "https://github.com/doctrine/dbal/tree/3.8.6"
+                "source": "https://github.com/doctrine/dbal/tree/3.8.7"
             },
             "funding": [
                 {
@@ -871,7 +871,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-06-19T10:38:17+00:00"
+            "time": "2024-08-07T11:57:25+00:00"
         },
         {
             "name": "doctrine/deprecations",
@@ -1763,16 +1763,16 @@
         },
         {
             "name": "doctrine/sql-formatter",
-            "version": "1.4.0",
+            "version": "1.4.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/sql-formatter.git",
-                "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc"
+                "reference": "7f83911cc5eba870de7ebb11283972483f7e2891"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d1ac84aef745c69ea034929eb6d65a6908b675cc",
-                "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc",
+                "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/7f83911cc5eba870de7ebb11283972483f7e2891",
+                "reference": "7f83911cc5eba870de7ebb11283972483f7e2891",
                 "shasum": ""
             },
             "require": {
@@ -1812,9 +1812,9 @@
             ],
             "support": {
                 "issues": "https://github.com/doctrine/sql-formatter/issues",
-                "source": "https://github.com/doctrine/sql-formatter/tree/1.4.0"
+                "source": "https://github.com/doctrine/sql-formatter/tree/1.4.1"
             },
-            "time": "2024-05-08T08:12:09+00:00"
+            "time": "2024-08-05T20:32:22+00:00"
         },
         {
             "name": "egulias/email-validator",
@@ -4791,16 +4791,16 @@
         },
         {
             "name": "sentry/sentry",
-            "version": "4.8.1",
+            "version": "4.9.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/getsentry/sentry-php.git",
-                "reference": "61770efd8b7888e0bdd7d234f0ba67b066e47d04"
+                "reference": "788ec170f51ebb22f2809a1e3f78b19ccd39b70d"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/61770efd8b7888e0bdd7d234f0ba67b066e47d04",
-                "reference": "61770efd8b7888e0bdd7d234f0ba67b066e47d04",
+                "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/788ec170f51ebb22f2809a1e3f78b19ccd39b70d",
+                "reference": "788ec170f51ebb22f2809a1e3f78b19ccd39b70d",
                 "shasum": ""
             },
             "require": {
@@ -4864,7 +4864,7 @@
             ],
             "support": {
                 "issues": "https://github.com/getsentry/sentry-php/issues",
-                "source": "https://github.com/getsentry/sentry-php/tree/4.8.1"
+                "source": "https://github.com/getsentry/sentry-php/tree/4.9.0"
             },
             "funding": [
                 {
@@ -4876,7 +4876,7 @@
                     "type": "custom"
                 }
             ],
-            "time": "2024-07-16T13:45:27+00:00"
+            "time": "2024-08-08T14:40:50+00:00"
         },
         {
             "name": "sentry/sentry-symfony",
@@ -13313,16 +13313,16 @@
         },
         {
             "name": "sebastian/comparator",
-            "version": "5.0.1",
+            "version": "5.0.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/comparator.git",
-                "reference": "2db5010a484d53ebf536087a70b4a5423c102372"
+                "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372",
-                "reference": "2db5010a484d53ebf536087a70b4a5423c102372",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53",
+                "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53",
                 "shasum": ""
             },
             "require": {
@@ -13333,7 +13333,7 @@
                 "sebastian/exporter": "^5.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "^10.3"
+                "phpunit/phpunit": "^10.4"
             },
             "type": "library",
             "extra": {
@@ -13378,7 +13378,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/comparator/issues",
                 "security": "https://github.com/sebastianbergmann/comparator/security/policy",
-                "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1"
+                "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.2"
             },
             "funding": [
                 {
@@ -13386,7 +13386,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2023-08-14T13:18:12+00:00"
+            "time": "2024-08-12T06:03:08+00:00"
         },
         {
             "name": "sebastian/complexity",
diff --git a/e2e/package-lock.json b/e2e/package-lock.json
index 2859b758fd..a3a65ff691 100644
--- a/e2e/package-lock.json
+++ b/e2e/package-lock.json
@@ -253,9 +253,9 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.1.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.1.0.tgz",
-      "integrity": "sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==",
+      "version": "22.2.0",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.2.0.tgz",
+      "integrity": "sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==",
       "dev": true,
       "license": "MIT",
       "optional": true,
@@ -494,9 +494,9 @@
       }
     },
     "node_modules/aws4": {
-      "version": "1.13.0",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.0.tgz",
-      "integrity": "sha512-3AungXC4I8kKsS9PuS4JH2nc+0bVY/mjgrephHTIi8fpEeGsTHBUJeosp0Wc1myYMElmD0B3Oc4XL/HVJ4PV2g==",
+      "version": "1.13.1",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.1.tgz",
+      "integrity": "sha512-u5w79Rd7SU4JaIlA/zFqG+gOiuq25q5VLyZ8E+ijJeILuTxVzZgp2CaGw/UTw6pXYN9XMO9yiqj/nEHmhTG5CA==",
       "dev": true,
       "license": "MIT"
     },
@@ -1920,9 +1920,9 @@
       "license": "BSD-3-Clause"
     },
     "node_modules/ignore": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
-      "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+      "version": "5.3.2",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 06361370d8..9a36f6e104 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -467,7 +467,6 @@
       "version": "7.24.8",
       "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
       "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
-      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
@@ -477,7 +476,6 @@
       "version": "7.24.7",
       "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
       "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
-      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
@@ -539,10 +537,13 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz",
-      "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
+      "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
       "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.2"
+      },
       "bin": {
         "parser": "bin/babel-parser.js"
       },
@@ -551,14 +552,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.0.tgz",
-      "integrity": "sha512-dG0aApncVQwAUJa8tP1VHTnmU67BeIQvKafd3raEx315H54FfkZSz3B/TT+33ZQAjatGJA79gZqTtqL5QZUKXw==",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz",
+      "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.0"
+        "@babel/traverse": "^7.25.3"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1824,9 +1825,9 @@
       }
     },
     "node_modules/@babel/preset-env": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.2.tgz",
-      "integrity": "sha512-Y2Vkwy3ITW4id9c6KXshVV/x5yCGK7VdJmKkzOzNsDZMojRKfSA/033rRbLqlRozmhRXCejxWHLSJOg/wUHfzw==",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz",
+      "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1834,7 +1835,7 @@
         "@babel/helper-compilation-targets": "^7.25.2",
         "@babel/helper-plugin-utils": "^7.24.8",
         "@babel/helper-validator-option": "^7.24.8",
-        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.0",
+        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3",
         "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0",
         "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0",
         "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
@@ -1971,15 +1972,15 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz",
-      "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
+      "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/code-frame": "^7.24.7",
         "@babel/generator": "^7.25.0",
-        "@babel/parser": "^7.25.0",
+        "@babel/parser": "^7.25.3",
         "@babel/template": "^7.25.0",
         "@babel/types": "^7.25.2",
         "debug": "^4.3.1",
@@ -1993,7 +1994,6 @@
       "version": "7.25.2",
       "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
       "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/helper-string-parser": "^7.24.8",
@@ -3016,9 +3016,9 @@
       }
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.1.tgz",
-      "integrity": "sha512-XzqSg714++M+FXhHfXpS1tDnNZNpgxxuGZWlRG/jSj+VEPmZ0yg6jV4E0AL3uyBKxO8mO3xtOsP5mQ+XLfrlww==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz",
+      "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==",
       "cpu": [
         "arm"
       ],
@@ -3030,9 +3030,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.1.tgz",
-      "integrity": "sha512-thFUbkHteM20BGShD6P08aungq4irbIZKUNbG70LN8RkO7YztcGPiKTTGZS7Kw+x5h8hOXs0i4OaHwFxlpQN6A==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz",
+      "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==",
       "cpu": [
         "arm64"
       ],
@@ -3044,9 +3044,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.1.tgz",
-      "integrity": "sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz",
+      "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==",
       "cpu": [
         "arm64"
       ],
@@ -3058,9 +3058,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.1.tgz",
-      "integrity": "sha512-4T42heKsnbjkn7ovYiAdDVRRWZLU9Kmhdt6HafZxFcUdpjlBlxj4wDrt1yFWLk7G4+E+8p2C9tcmSu0KA6auGA==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz",
+      "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==",
       "cpu": [
         "x64"
       ],
@@ -3072,9 +3072,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.1.tgz",
-      "integrity": "sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz",
+      "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==",
       "cpu": [
         "arm"
       ],
@@ -3086,9 +3086,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.1.tgz",
-      "integrity": "sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz",
+      "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==",
       "cpu": [
         "arm"
       ],
@@ -3100,9 +3100,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.1.tgz",
-      "integrity": "sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz",
+      "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==",
       "cpu": [
         "arm64"
       ],
@@ -3114,9 +3114,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.1.tgz",
-      "integrity": "sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz",
+      "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==",
       "cpu": [
         "arm64"
       ],
@@ -3128,9 +3128,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.1.tgz",
-      "integrity": "sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz",
+      "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==",
       "cpu": [
         "ppc64"
       ],
@@ -3142,9 +3142,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.1.tgz",
-      "integrity": "sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz",
+      "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==",
       "cpu": [
         "riscv64"
       ],
@@ -3156,9 +3156,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.1.tgz",
-      "integrity": "sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz",
+      "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==",
       "cpu": [
         "s390x"
       ],
@@ -3170,9 +3170,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.1.tgz",
-      "integrity": "sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz",
+      "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==",
       "cpu": [
         "x64"
       ],
@@ -3184,9 +3184,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.1.tgz",
-      "integrity": "sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz",
+      "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==",
       "cpu": [
         "x64"
       ],
@@ -3198,9 +3198,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.1.tgz",
-      "integrity": "sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz",
+      "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==",
       "cpu": [
         "arm64"
       ],
@@ -3212,9 +3212,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.1.tgz",
-      "integrity": "sha512-LdxxcqRVSXi6k6JUrTah1rHuaupoeuiv38du8Mt4r4IPer3kwlTo+RuvfE8KzZ/tL6BhaPlzJ3835i6CxrFIRQ==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz",
+      "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==",
       "cpu": [
         "ia32"
       ],
@@ -3226,9 +3226,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.1.tgz",
-      "integrity": "sha512-2bIrL28PcK3YCqD9anGxDxamxdiJAxA+l7fWIwM5o8UqNy1t3d1NdAweO2XhA0KTDJ5aH1FsuiT5+7VhtHliXg==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz",
+      "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==",
       "cpu": [
         "x64"
       ],
@@ -3346,9 +3346,9 @@
       }
     },
     "node_modules/@sentry/cli": {
-      "version": "2.33.0",
-      "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.33.0.tgz",
-      "integrity": "sha512-9MOzQy1UunVBhPOfEuO0JH2ofWAMmZVavTTR/Bo2CkJwI1qjyVF0UKLTXE3l4ujiJnFufOoBsVyKmYWXFerbCw==",
+      "version": "2.33.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.33.1.tgz",
+      "integrity": "sha512-dUlZ4EFh98VFRPJ+f6OW3JEYQ7VvqGNMa0AMcmvk07ePNeK/GicAWmSQE4ZfJTTl80ul6HZw1kY01fGQOQlVRA==",
       "dev": true,
       "hasInstallScript": true,
       "license": "BSD-3-Clause",
@@ -3366,19 +3366,19 @@
         "node": ">= 10"
       },
       "optionalDependencies": {
-        "@sentry/cli-darwin": "2.33.0",
-        "@sentry/cli-linux-arm": "2.33.0",
-        "@sentry/cli-linux-arm64": "2.33.0",
-        "@sentry/cli-linux-i686": "2.33.0",
-        "@sentry/cli-linux-x64": "2.33.0",
-        "@sentry/cli-win32-i686": "2.33.0",
-        "@sentry/cli-win32-x64": "2.33.0"
+        "@sentry/cli-darwin": "2.33.1",
+        "@sentry/cli-linux-arm": "2.33.1",
+        "@sentry/cli-linux-arm64": "2.33.1",
+        "@sentry/cli-linux-i686": "2.33.1",
+        "@sentry/cli-linux-x64": "2.33.1",
+        "@sentry/cli-win32-i686": "2.33.1",
+        "@sentry/cli-win32-x64": "2.33.1"
       }
     },
     "node_modules/@sentry/cli-darwin": {
-      "version": "2.33.0",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.33.0.tgz",
-      "integrity": "sha512-LQFvD7uCOQ2P/vYru7IBKqJDHwJ9Rr2vqqkdjbxe2YCQS/N3NPXvi3eVM9hDJ284oyV/BMZ5lrmVTuIicf/hhw==",
+      "version": "2.33.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.33.1.tgz",
+      "integrity": "sha512-+4/VIx/E1L2hChj5nGf5MHyEPHUNHJ/HoG5RY+B+vyEutGily1c1+DM2bum7RbD0xs6wKLIyup5F02guzSzG8A==",
       "dev": true,
       "license": "BSD-3-Clause",
       "optional": true,
@@ -3390,9 +3390,9 @@
       }
     },
     "node_modules/@sentry/cli-linux-arm": {
-      "version": "2.33.0",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.33.0.tgz",
-      "integrity": "sha512-gY1bFE7wjDJc7WiNq1AS0WrILqLLJUw6Ou4pFQS45KjaH3/XJ1eohHhGJNy/UBHJ/Gq32b/BA9vsnWTXClZJ7g==",
+      "version": "2.33.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.33.1.tgz",
+      "integrity": "sha512-zbxEvQju+tgNvzTOt635le4kS/Fbm2XC2RtYbCTs034Vb8xjrAxLnK0z1bQnStUV8BkeBHtsNVrG+NSQDym2wg==",
       "cpu": [
         "arm"
       ],
@@ -3408,9 +3408,9 @@
       }
     },
     "node_modules/@sentry/cli-linux-arm64": {
-      "version": "2.33.0",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.33.0.tgz",
-      "integrity": "sha512-mR2ZhqpU8RBVGLF5Ji19iOmVznk1B7Bzg5VhA8bVPuKsQmFN/3SyqE87IPMhwKoAsSRXyctwmbAkKs4240fxGA==",
+      "version": "2.33.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.33.1.tgz",
+      "integrity": "sha512-DbGV56PRKOLsAZJX27Jt2uZ11QfQEMmWB4cIvxkKcFVE+LJP4MVA+MGGRUL6p+Bs1R9ZUuGbpKGtj0JiG6CoXw==",
       "cpu": [
         "arm64"
       ],
@@ -3426,9 +3426,9 @@
       }
     },
     "node_modules/@sentry/cli-linux-i686": {
-      "version": "2.33.0",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.33.0.tgz",
-      "integrity": "sha512-XPIy0XpqgAposHtWsy58qsX85QnZ8q0ktBuT4skrsCrLMzfhoQg4Ua+YbUr3RvE814Rt8Hzowx2ar2Rl3pyCyw==",
+      "version": "2.33.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.33.1.tgz",
+      "integrity": "sha512-g2LS4oPXkPWOfKWukKzYp4FnXVRRSwBxhuQ9eSw2peeb58ZIObr4YKGOA/8HJRGkooBJIKGaAR2mH2Pk1TKaiA==",
       "cpu": [
         "x86",
         "ia32"
@@ -3445,9 +3445,9 @@
       }
     },
     "node_modules/@sentry/cli-linux-x64": {
-      "version": "2.33.0",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.33.0.tgz",
-      "integrity": "sha512-qe1DdCUv4tmqS03s8RtCkEX9vCW2G+NgOxX6jZ5jN/sKDwjUlquljqo7JHUGSupkoXmymnNPm5By3rNr6VyNHg==",
+      "version": "2.33.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.33.1.tgz",
+      "integrity": "sha512-IV3dcYV/ZcvO+VGu9U6kuxSdbsV2kzxaBwWUQxtzxJ+cOa7J8Hn1t0koKGtU53JVZNBa06qJWIcqgl4/pCuKIg==",
       "cpu": [
         "x64"
       ],
@@ -3463,9 +3463,9 @@
       }
     },
     "node_modules/@sentry/cli-win32-i686": {
-      "version": "2.33.0",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.33.0.tgz",
-      "integrity": "sha512-VEXWtJ69C3b+kuSmXQJRwdQ0ypPGH88hpqyQuosbAOIqh/sv4g9B/u1ETHZc+whLdFDpPcTLVMbLDbXTGug0Yg==",
+      "version": "2.33.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.33.1.tgz",
+      "integrity": "sha512-F7cJySvkpzIu7fnLKNHYwBzZYYwlhoDbAUnaFX0UZCN+5DNp/5LwTp37a5TWOsmCaHMZT4i9IO4SIsnNw16/zQ==",
       "cpu": [
         "x86",
         "ia32"
@@ -3481,9 +3481,9 @@
       }
     },
     "node_modules/@sentry/cli-win32-x64": {
-      "version": "2.33.0",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.33.0.tgz",
-      "integrity": "sha512-GIUKysZ1xbSklY9h1aVaLMSYLsnMSd+JuwQLR+0wKw2wJC4O5kNCPFSGikhiOZM/kvh3GO1WnXNyazFp8nLAzw==",
+      "version": "2.33.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.33.1.tgz",
+      "integrity": "sha512-8VyRoJqtb2uQ8/bFRKNuACYZt7r+Xx0k2wXRGTyH05lCjAiVIXn7DiS2BxHFty7M1QEWUCMNsb/UC/x/Cu2wuA==",
       "cpu": [
         "x64"
       ],
@@ -3564,12 +3564,11 @@
       }
     },
     "node_modules/@swc/helpers": {
-      "version": "0.4.36",
-      "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.36.tgz",
-      "integrity": "sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==",
+      "version": "0.5.12",
+      "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.12.tgz",
+      "integrity": "sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==",
       "license": "Apache-2.0",
       "dependencies": {
-        "legacy-swc-helpers": "npm:@swc/helpers@=0.4.14",
         "tslib": "^2.4.0"
       }
     },
@@ -4701,45 +4700,45 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.4.34",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.34.tgz",
-      "integrity": "sha512-Z0izUf32+wAnQewjHu+pQf1yw00EGOmevl1kE+ljjjMe7oEfpQ+BI3/JNK7yMB4IrUsqLDmPecUrpj3mCP+yJQ==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.37.tgz",
+      "integrity": "sha512-ZDDT/KiLKuCRXyzWecNzC5vTcubGz4LECAtfGPENpo0nrmqJHwuWtRLxk/Sb9RAKtR9iFflFycbkjkY+W/PZUQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.24.7",
-        "@vue/shared": "3.4.34",
-        "entities": "^4.5.0",
+        "@vue/shared": "3.4.37",
+        "entities": "^5.0.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.4.34",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.34.tgz",
-      "integrity": "sha512-3PUOTS1h5cskdOJMExCu2TInXuM0j60DRPpSCJDqOCupCfUZCJoyQmKtRmA8EgDNZ5kcEE7vketamRZfrEuVDw==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.37.tgz",
+      "integrity": "sha512-rIiSmL3YrntvgYV84rekAtU/xfogMUJIclUMeIKEtVBFngOL3IeZHhsH3UaFEgB5iFGpj6IW+8YuM/2Up+vVag==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.4.34",
-        "@vue/shared": "3.4.34"
+        "@vue/compiler-core": "3.4.37",
+        "@vue/shared": "3.4.37"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.4.34",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.34.tgz",
-      "integrity": "sha512-x6lm0UrM03jjDXTPZgD9Ad8bIVD1ifWNit2EaWQIZB5CULr46+FbLQ5RpK7AXtDHGjx9rmvC7QRCTjsiGkAwRw==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.37.tgz",
+      "integrity": "sha512-vCfetdas40Wk9aK/WWf8XcVESffsbNkBQwS5t13Y/PcfqKfIwJX2gF+82th6dOpnpbptNMlMjAny80li7TaCIg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.24.7",
-        "@vue/compiler-core": "3.4.34",
-        "@vue/compiler-dom": "3.4.34",
-        "@vue/compiler-ssr": "3.4.34",
-        "@vue/shared": "3.4.34",
+        "@vue/compiler-core": "3.4.37",
+        "@vue/compiler-dom": "3.4.37",
+        "@vue/compiler-ssr": "3.4.37",
+        "@vue/shared": "3.4.37",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.10",
-        "postcss": "^8.4.39",
+        "postcss": "^8.4.40",
         "source-map-js": "^1.2.0"
       }
     },
@@ -4754,14 +4753,14 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.4.34",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.34.tgz",
-      "integrity": "sha512-8TDBcLaTrFm5rnF+Qm4BlliaopJgqJ28Nsrc80qazynm5aJO+Emu7y0RWw34L8dNnTRdcVBpWzJxhGYzsoVu4g==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.37.tgz",
+      "integrity": "sha512-TyAgYBWrHlFrt4qpdACh8e9Ms6C/AZQ6A6xLJaWrCL8GCX5DxMzxyeFAEMfU/VFr4tylHm+a2NpfJpcd7+20XA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.4.34",
-        "@vue/shared": "3.4.34"
+        "@vue/compiler-dom": "3.4.37",
+        "@vue/shared": "3.4.37"
       }
     },
     "node_modules/@vue/component-compiler-utils": {
@@ -4870,9 +4869,9 @@
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.4.34",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.34.tgz",
-      "integrity": "sha512-x5LmiRLpRsd9KTjAB8MPKf0CDPMcuItjP0gbNqFCIgL1I8iYp4zglhj9w9FPCdIbHG2M91RVeIbArFfFTz9I3A==",
+      "version": "3.4.37",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.37.tgz",
+      "integrity": "sha512-nIh8P2fc3DflG8+5Uw8PT/1i17ccFn0xxN/5oE9RfV5SVnd7G0XEFRwakrnNFE/jlS95fpGXDVG5zDETS26nmg==",
       "dev": true,
       "license": "MIT"
     },
@@ -5321,14 +5320,14 @@
       }
     },
     "node_modules/babel-plugin-polyfill-corejs3": {
-      "version": "0.10.4",
-      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz",
-      "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==",
+      "version": "0.10.6",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz",
+      "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-define-polyfill-provider": "^0.6.1",
-        "core-js-compat": "^3.36.1"
+        "@babel/helper-define-polyfill-provider": "^0.6.2",
+        "core-js-compat": "^3.38.0"
       },
       "peerDependencies": {
         "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -5545,9 +5544,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001646",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz",
-      "integrity": "sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==",
+      "version": "1.0.30001651",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
+      "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
       "dev": true,
       "funding": [
         {
@@ -5608,22 +5607,26 @@
       }
     },
     "node_modules/cheerio": {
-      "version": "1.0.0-rc.12",
-      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
-      "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz",
+      "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "cheerio-select": "^2.1.0",
         "dom-serializer": "^2.0.0",
         "domhandler": "^5.0.3",
-        "domutils": "^3.0.1",
-        "htmlparser2": "^8.0.1",
-        "parse5": "^7.0.0",
-        "parse5-htmlparser2-tree-adapter": "^7.0.0"
+        "domutils": "^3.1.0",
+        "encoding-sniffer": "^0.2.0",
+        "htmlparser2": "^9.1.0",
+        "parse5": "^7.1.2",
+        "parse5-htmlparser2-tree-adapter": "^7.0.0",
+        "parse5-parser-stream": "^7.1.2",
+        "undici": "^6.19.5",
+        "whatwg-mimetype": "^4.0.0"
       },
       "engines": {
-        "node": ">= 6"
+        "node": ">=18.17"
       },
       "funding": {
         "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
@@ -5647,26 +5650,6 @@
         "url": "https://github.com/sponsors/fb55"
       }
     },
-    "node_modules/cheerio/node_modules/htmlparser2": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
-      "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
-      "dev": true,
-      "funding": [
-        "https://github.com/fb55/htmlparser2?sponsor=1",
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/fb55"
-        }
-      ],
-      "license": "MIT",
-      "dependencies": {
-        "domelementtype": "^2.3.0",
-        "domhandler": "^5.0.3",
-        "domutils": "^3.0.1",
-        "entities": "^4.4.0"
-      }
-    },
     "node_modules/chokidar": {
       "version": "3.6.0",
       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
@@ -5876,9 +5859,9 @@
       "license": "MIT"
     },
     "node_modules/core-js": {
-      "version": "3.37.1",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz",
-      "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==",
+      "version": "3.38.0",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.0.tgz",
+      "integrity": "sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug==",
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
@@ -5888,13 +5871,13 @@
       }
     },
     "node_modules/core-js-compat": {
-      "version": "3.37.1",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
-      "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
+      "version": "3.38.0",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz",
+      "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.0"
+        "browserslist": "^4.23.3"
       },
       "funding": {
         "type": "opencollective",
@@ -6368,6 +6351,19 @@
         "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
       }
     },
+    "node_modules/dom-serializer/node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/domelementtype": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
@@ -6491,9 +6487,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.4",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz",
-      "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==",
+      "version": "1.5.6",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz",
+      "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==",
       "dev": true,
       "license": "ISC"
     },
@@ -6503,6 +6499,20 @@
       "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
       "license": "MIT"
     },
+    "node_modules/encoding-sniffer": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz",
+      "integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "iconv-lite": "^0.6.3",
+        "whatwg-encoding": "^3.1.1"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/encoding-sniffer?sponsor=1"
+      }
+    },
     "node_modules/enhanced-resolve": {
       "version": "5.17.1",
       "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
@@ -6518,9 +6528,10 @@
       }
     },
     "node_modules/entities": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz",
+      "integrity": "sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==",
+      "dev": true,
       "license": "BSD-2-Clause",
       "engines": {
         "node": ">=0.12"
@@ -7688,12 +7699,12 @@
       }
     },
     "node_modules/fontkit": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.2.tgz",
-      "integrity": "sha512-jc4k5Yr8iov8QfS6u8w2CnHWVmbOGtdBtOXMze5Y+QD966Rx6PEVWXSEGwXlsDlKtu1G12cJjcsybnqhSk/+LA==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz",
+      "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==",
       "license": "MIT",
       "dependencies": {
-        "@swc/helpers": "^0.4.2",
+        "@swc/helpers": "^0.5.12",
         "brotli": "^1.3.2",
         "clone": "^2.1.2",
         "dfa": "^1.2.0",
@@ -7714,9 +7725,9 @@
       }
     },
     "node_modules/foreground-child": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
-      "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+      "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
@@ -8224,6 +8235,19 @@
         "entities": "^4.5.0"
       }
     },
+    "node_modules/htmlparser2/node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/http-proxy-agent": {
       "version": "7.0.2",
       "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
@@ -8295,9 +8319,9 @@
       }
     },
     "node_modules/ignore": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
-      "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+      "version": "5.3.2",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -9247,16 +9271,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/legacy-swc-helpers": {
-      "name": "@swc/helpers",
-      "version": "0.4.14",
-      "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz",
-      "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==",
-      "license": "MIT",
-      "dependencies": {
-        "tslib": "^2.4.0"
-      }
-    },
     "node_modules/levn": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -9632,6 +9646,18 @@
         "markdown-it": "bin/markdown-it.mjs"
       }
     },
+    "node_modules/markdown-it/node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/mdn-data": {
       "version": "2.0.30",
       "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
@@ -10246,6 +10272,32 @@
         "url": "https://github.com/inikulin/parse5?sponsor=1"
       }
     },
+    "node_modules/parse5-parser-stream": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz",
+      "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "parse5": "^7.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/inikulin/parse5?sponsor=1"
+      }
+    },
+    "node_modules/parse5/node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/path-exists": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -10388,9 +10440,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.40",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz",
-      "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==",
+      "version": "8.4.41",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
+      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
       "funding": [
         {
           "type": "opencollective",
@@ -10460,9 +10512,9 @@
       }
     },
     "node_modules/postcss-selector-parser": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
-      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -10698,9 +10750,9 @@
       }
     },
     "node_modules/prosemirror-model": {
-      "version": "1.22.2",
-      "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.22.2.tgz",
-      "integrity": "sha512-I4lS7HHIW47D0Xv/gWmi4iUWcQIDYaJKd8Hk4+lcSps+553FlQrhmxtItpEvTr75iAruhzVShVp6WUwsT6Boww==",
+      "version": "1.22.3",
+      "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.22.3.tgz",
+      "integrity": "sha512-V4XCysitErI+i0rKFILGt/xClnFJaohe/wrrlT2NSZ+zk8ggQfDH4x2wNK7Gm0Hp4CIoWizvXFP7L9KMaCuI0Q==",
       "license": "MIT",
       "dependencies": {
         "orderedmap": "^2.0.0"
@@ -10901,9 +10953,9 @@
       }
     },
     "node_modules/recaptcha-v3": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/recaptcha-v3/-/recaptcha-v3-1.10.0.tgz",
-      "integrity": "sha512-aGTxYSk3FFNKnXeKDbLpgRDRyIHRZNBF5HyaXXAN1Aj4TSyyZvmoAn9CylvpqLV3pYpIQavwc+2rzhNFn5SsLQ==",
+      "version": "1.11.3",
+      "resolved": "https://registry.npmjs.org/recaptcha-v3/-/recaptcha-v3-1.11.3.tgz",
+      "integrity": "sha512-sEE6J0RzUkS+sKEBpgCD/AqCU0ffrAVOADGjvAx9vcttN+VLK42SWMkj/J/I6vHu3Kew+xcfbBqDVb65N0QGDw==",
       "license": "Apache-2.0"
     },
     "node_modules/redent": {
@@ -11172,9 +11224,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.1.tgz",
-      "integrity": "sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz",
+      "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -11188,22 +11240,22 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.19.1",
-        "@rollup/rollup-android-arm64": "4.19.1",
-        "@rollup/rollup-darwin-arm64": "4.19.1",
-        "@rollup/rollup-darwin-x64": "4.19.1",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.19.1",
-        "@rollup/rollup-linux-arm-musleabihf": "4.19.1",
-        "@rollup/rollup-linux-arm64-gnu": "4.19.1",
-        "@rollup/rollup-linux-arm64-musl": "4.19.1",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.19.1",
-        "@rollup/rollup-linux-riscv64-gnu": "4.19.1",
-        "@rollup/rollup-linux-s390x-gnu": "4.19.1",
-        "@rollup/rollup-linux-x64-gnu": "4.19.1",
-        "@rollup/rollup-linux-x64-musl": "4.19.1",
-        "@rollup/rollup-win32-arm64-msvc": "4.19.1",
-        "@rollup/rollup-win32-ia32-msvc": "4.19.1",
-        "@rollup/rollup-win32-x64-msvc": "4.19.1",
+        "@rollup/rollup-android-arm-eabi": "4.20.0",
+        "@rollup/rollup-android-arm64": "4.20.0",
+        "@rollup/rollup-darwin-arm64": "4.20.0",
+        "@rollup/rollup-darwin-x64": "4.20.0",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.20.0",
+        "@rollup/rollup-linux-arm-musleabihf": "4.20.0",
+        "@rollup/rollup-linux-arm64-gnu": "4.20.0",
+        "@rollup/rollup-linux-arm64-musl": "4.20.0",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0",
+        "@rollup/rollup-linux-riscv64-gnu": "4.20.0",
+        "@rollup/rollup-linux-s390x-gnu": "4.20.0",
+        "@rollup/rollup-linux-x64-gnu": "4.20.0",
+        "@rollup/rollup-linux-x64-musl": "4.20.0",
+        "@rollup/rollup-win32-arm64-msvc": "4.20.0",
+        "@rollup/rollup-win32-ia32-msvc": "4.20.0",
+        "@rollup/rollup-win32-x64-msvc": "4.20.0",
         "fsevents": "~2.3.2"
       }
     },
@@ -12034,9 +12086,9 @@
       "license": "MIT"
     },
     "node_modules/tinybench": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz",
-      "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==",
+      "version": "2.9.0",
+      "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
+      "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
       "dev": true,
       "license": "MIT"
     },
@@ -12083,7 +12135,6 @@
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
       "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
-      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">=4"
@@ -12295,6 +12346,16 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/undici": {
+      "version": "6.19.7",
+      "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.7.tgz",
+      "integrity": "sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18.17"
+      }
+    },
     "node_modules/unicode-canonical-property-names-ecmascript": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index 0da40d1a0f..6a071fd4b3 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -460,11 +460,14 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz",
-      "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
+      "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.2"
+      },
       "bin": {
         "parser": "bin/babel-parser.js"
       },
@@ -473,14 +476,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.0.tgz",
-      "integrity": "sha512-dG0aApncVQwAUJa8tP1VHTnmU67BeIQvKafd3raEx315H54FfkZSz3B/TT+33ZQAjatGJA79gZqTtqL5QZUKXw==",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz",
+      "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/helper-plugin-utils": "^7.24.8",
-        "@babel/traverse": "^7.25.0"
+        "@babel/traverse": "^7.25.3"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1746,9 +1749,9 @@
       }
     },
     "node_modules/@babel/preset-env": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.2.tgz",
-      "integrity": "sha512-Y2Vkwy3ITW4id9c6KXshVV/x5yCGK7VdJmKkzOzNsDZMojRKfSA/033rRbLqlRozmhRXCejxWHLSJOg/wUHfzw==",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz",
+      "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -1756,7 +1759,7 @@
         "@babel/helper-compilation-targets": "^7.25.2",
         "@babel/helper-plugin-utils": "^7.24.8",
         "@babel/helper-validator-option": "^7.24.8",
-        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.0",
+        "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3",
         "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0",
         "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0",
         "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7",
@@ -1893,15 +1896,15 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz",
-      "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
+      "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/code-frame": "^7.24.7",
         "@babel/generator": "^7.25.0",
-        "@babel/parser": "^7.25.0",
+        "@babel/parser": "^7.25.3",
         "@babel/template": "^7.25.0",
         "@babel/types": "^7.25.2",
         "debug": "^4.3.1",
@@ -2852,9 +2855,9 @@
       "peer": true
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.1.tgz",
-      "integrity": "sha512-XzqSg714++M+FXhHfXpS1tDnNZNpgxxuGZWlRG/jSj+VEPmZ0yg6jV4E0AL3uyBKxO8mO3xtOsP5mQ+XLfrlww==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz",
+      "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==",
       "cpu": [
         "arm"
       ],
@@ -2866,9 +2869,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.1.tgz",
-      "integrity": "sha512-thFUbkHteM20BGShD6P08aungq4irbIZKUNbG70LN8RkO7YztcGPiKTTGZS7Kw+x5h8hOXs0i4OaHwFxlpQN6A==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz",
+      "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==",
       "cpu": [
         "arm64"
       ],
@@ -2880,9 +2883,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.1.tgz",
-      "integrity": "sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz",
+      "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==",
       "cpu": [
         "arm64"
       ],
@@ -2894,9 +2897,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.1.tgz",
-      "integrity": "sha512-4T42heKsnbjkn7ovYiAdDVRRWZLU9Kmhdt6HafZxFcUdpjlBlxj4wDrt1yFWLk7G4+E+8p2C9tcmSu0KA6auGA==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz",
+      "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==",
       "cpu": [
         "x64"
       ],
@@ -2908,9 +2911,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.1.tgz",
-      "integrity": "sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz",
+      "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==",
       "cpu": [
         "arm"
       ],
@@ -2922,9 +2925,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.1.tgz",
-      "integrity": "sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz",
+      "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==",
       "cpu": [
         "arm"
       ],
@@ -2936,9 +2939,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.1.tgz",
-      "integrity": "sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz",
+      "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==",
       "cpu": [
         "arm64"
       ],
@@ -2950,9 +2953,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.1.tgz",
-      "integrity": "sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz",
+      "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==",
       "cpu": [
         "arm64"
       ],
@@ -2964,9 +2967,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.1.tgz",
-      "integrity": "sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz",
+      "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==",
       "cpu": [
         "ppc64"
       ],
@@ -2978,9 +2981,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.1.tgz",
-      "integrity": "sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz",
+      "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==",
       "cpu": [
         "riscv64"
       ],
@@ -2992,9 +2995,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.1.tgz",
-      "integrity": "sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz",
+      "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==",
       "cpu": [
         "s390x"
       ],
@@ -3006,9 +3009,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.1.tgz",
-      "integrity": "sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz",
+      "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==",
       "cpu": [
         "x64"
       ],
@@ -3020,9 +3023,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.1.tgz",
-      "integrity": "sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz",
+      "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==",
       "cpu": [
         "x64"
       ],
@@ -3034,9 +3037,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.1.tgz",
-      "integrity": "sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz",
+      "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==",
       "cpu": [
         "arm64"
       ],
@@ -3048,9 +3051,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.1.tgz",
-      "integrity": "sha512-LdxxcqRVSXi6k6JUrTah1rHuaupoeuiv38du8Mt4r4IPer3kwlTo+RuvfE8KzZ/tL6BhaPlzJ3835i6CxrFIRQ==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz",
+      "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==",
       "cpu": [
         "ia32"
       ],
@@ -3062,9 +3065,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.1.tgz",
-      "integrity": "sha512-2bIrL28PcK3YCqD9anGxDxamxdiJAxA+l7fWIwM5o8UqNy1t3d1NdAweO2XhA0KTDJ5aH1FsuiT5+7VhtHliXg==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz",
+      "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==",
       "cpu": [
         "x64"
       ],
@@ -3083,13 +3086,12 @@
       "license": "MIT"
     },
     "node_modules/@swc/helpers": {
-      "version": "0.4.36",
-      "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.36.tgz",
-      "integrity": "sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q==",
+      "version": "0.5.12",
+      "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.12.tgz",
+      "integrity": "sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==",
       "license": "Apache-2.0",
       "peer": true,
       "dependencies": {
-        "legacy-swc-helpers": "npm:@swc/helpers@=0.4.14",
         "tslib": "^2.4.0"
       }
     },
@@ -3564,19 +3566,6 @@
         "source-map-js": "^1.2.0"
       }
     },
-    "node_modules/@vue/compiler-core/node_modules/entities": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz",
-      "integrity": "sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=0.12"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
-      }
-    },
     "node_modules/@vue/compiler-dom": {
       "version": "3.4.37",
       "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.37.tgz",
@@ -3851,14 +3840,14 @@
       }
     },
     "node_modules/babel-plugin-polyfill-corejs3": {
-      "version": "0.10.4",
-      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz",
-      "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==",
+      "version": "0.10.6",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz",
+      "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-define-polyfill-provider": "^0.6.1",
-        "core-js-compat": "^3.36.1"
+        "@babel/helper-define-polyfill-provider": "^0.6.2",
+        "core-js-compat": "^3.38.0"
       },
       "peerDependencies": {
         "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
@@ -3954,9 +3943,9 @@
       }
     },
     "node_modules/browserslist": {
-      "version": "4.23.2",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
-      "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
+      "version": "4.23.3",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
+      "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
       "dev": true,
       "funding": [
         {
@@ -3974,9 +3963,9 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "caniuse-lite": "^1.0.30001640",
-        "electron-to-chromium": "^1.4.820",
-        "node-releases": "^2.0.14",
+        "caniuse-lite": "^1.0.30001646",
+        "electron-to-chromium": "^1.5.4",
+        "node-releases": "^2.0.18",
         "update-browserslist-db": "^1.1.0"
       },
       "bin": {
@@ -4040,9 +4029,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001644",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001644.tgz",
-      "integrity": "sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==",
+      "version": "1.0.30001651",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
+      "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
       "dev": true,
       "funding": [
         {
@@ -4195,9 +4184,9 @@
       "license": "MIT"
     },
     "node_modules/core-js": {
-      "version": "3.37.1",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz",
-      "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==",
+      "version": "3.38.0",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.0.tgz",
+      "integrity": "sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug==",
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
@@ -4207,13 +4196,13 @@
       }
     },
     "node_modules/core-js-compat": {
-      "version": "3.37.1",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
-      "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
+      "version": "3.38.0",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz",
+      "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.0"
+        "browserslist": "^4.23.3"
       },
       "funding": {
         "type": "opencollective",
@@ -4509,9 +4498,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.3",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.3.tgz",
-      "integrity": "sha512-QNdYSS5i8D9axWp/6XIezRObRHqaav/ur9z1VzCDUCH1XIFOr9WQk5xmgunhsTpjjgDy3oLxO/WMOVZlpUQrlA==",
+      "version": "1.5.6",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz",
+      "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==",
       "dev": true,
       "license": "ISC"
     },
@@ -4523,9 +4512,9 @@
       "peer": true
     },
     "node_modules/entities": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz",
+      "integrity": "sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "engines": {
@@ -5163,13 +5152,13 @@
       "license": "ISC"
     },
     "node_modules/fontkit": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.2.tgz",
-      "integrity": "sha512-jc4k5Yr8iov8QfS6u8w2CnHWVmbOGtdBtOXMze5Y+QD966Rx6PEVWXSEGwXlsDlKtu1G12cJjcsybnqhSk/+LA==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz",
+      "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==",
       "license": "MIT",
       "peer": true,
       "dependencies": {
-        "@swc/helpers": "^0.4.2",
+        "@swc/helpers": "^0.5.12",
         "brotli": "^1.3.2",
         "clone": "^2.1.2",
         "dfa": "^1.2.0",
@@ -5181,9 +5170,9 @@
       }
     },
     "node_modules/foreground-child": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
-      "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+      "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
@@ -5583,9 +5572,9 @@
       }
     },
     "node_modules/ignore": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
-      "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+      "version": "5.3.2",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -6007,17 +5996,6 @@
         "json-buffer": "3.0.1"
       }
     },
-    "node_modules/legacy-swc-helpers": {
-      "name": "@swc/helpers",
-      "version": "0.4.14",
-      "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz",
-      "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==",
-      "license": "MIT",
-      "peer": true,
-      "dependencies": {
-        "tslib": "^2.4.0"
-      }
-    },
     "node_modules/levn": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@@ -6532,6 +6510,19 @@
         "url": "https://github.com/inikulin/parse5?sponsor=1"
       }
     },
+    "node_modules/parse5/node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/path-exists": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -6618,9 +6609,9 @@
       "license": "ISC"
     },
     "node_modules/postcss": {
-      "version": "8.4.40",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz",
-      "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==",
+      "version": "8.4.41",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
+      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
       "dev": true,
       "funding": [
         {
@@ -6647,9 +6638,9 @@
       }
     },
     "node_modules/postcss-selector-parser": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
-      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6947,9 +6938,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.1.tgz",
-      "integrity": "sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz",
+      "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6963,22 +6954,22 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.19.1",
-        "@rollup/rollup-android-arm64": "4.19.1",
-        "@rollup/rollup-darwin-arm64": "4.19.1",
-        "@rollup/rollup-darwin-x64": "4.19.1",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.19.1",
-        "@rollup/rollup-linux-arm-musleabihf": "4.19.1",
-        "@rollup/rollup-linux-arm64-gnu": "4.19.1",
-        "@rollup/rollup-linux-arm64-musl": "4.19.1",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.19.1",
-        "@rollup/rollup-linux-riscv64-gnu": "4.19.1",
-        "@rollup/rollup-linux-s390x-gnu": "4.19.1",
-        "@rollup/rollup-linux-x64-gnu": "4.19.1",
-        "@rollup/rollup-linux-x64-musl": "4.19.1",
-        "@rollup/rollup-win32-arm64-msvc": "4.19.1",
-        "@rollup/rollup-win32-ia32-msvc": "4.19.1",
-        "@rollup/rollup-win32-x64-msvc": "4.19.1",
+        "@rollup/rollup-android-arm-eabi": "4.20.0",
+        "@rollup/rollup-android-arm64": "4.20.0",
+        "@rollup/rollup-darwin-arm64": "4.20.0",
+        "@rollup/rollup-darwin-x64": "4.20.0",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.20.0",
+        "@rollup/rollup-linux-arm-musleabihf": "4.20.0",
+        "@rollup/rollup-linux-arm64-gnu": "4.20.0",
+        "@rollup/rollup-linux-arm64-musl": "4.20.0",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0",
+        "@rollup/rollup-linux-riscv64-gnu": "4.20.0",
+        "@rollup/rollup-linux-s390x-gnu": "4.20.0",
+        "@rollup/rollup-linux-x64-gnu": "4.20.0",
+        "@rollup/rollup-linux-x64-musl": "4.20.0",
+        "@rollup/rollup-win32-arm64-msvc": "4.20.0",
+        "@rollup/rollup-win32-ia32-msvc": "4.20.0",
+        "@rollup/rollup-win32-x64-msvc": "4.20.0",
         "fsevents": "~2.3.2"
       }
     },
@@ -7450,9 +7441,9 @@
       "peer": true
     },
     "node_modules/tinybench": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz",
-      "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==",
+      "version": "2.9.0",
+      "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
+      "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
       "dev": true,
       "license": "MIT"
     },
diff --git a/print/package-lock.json b/print/package-lock.json
index ef9caddc11..e2491bae74 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -371,7 +371,6 @@
       "version": "7.24.8",
       "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
       "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
-      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
@@ -381,7 +380,6 @@
       "version": "7.24.7",
       "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
       "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
-      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">=6.9.0"
@@ -506,10 +504,13 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz",
-      "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
+      "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
       "license": "MIT",
+      "dependencies": {
+        "@babel/types": "^7.25.2"
+      },
       "bin": {
         "parser": "bin/babel-parser.js"
       },
@@ -633,9 +634,9 @@
       }
     },
     "node_modules/@babel/standalone": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.25.2.tgz",
-      "integrity": "sha512-65oXc4uhRu/SKV2OIrAq/TrSaEW62itcrKwODgDVQH0AeDa8rNEKsm1Wp2SK4GcwoJiz/78fmxHfGVFtinENlg==",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.25.3.tgz",
+      "integrity": "sha512-uR+EoBqIIIvKGCG7fOj7HKupu3zVObiMfdEwoPZfVCPpcWJaZ1PkshaP5/6cl6BKAm1Zcv25O1rf+uoQ7V8nqA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -658,15 +659,15 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz",
-      "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==",
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
+      "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/code-frame": "^7.24.7",
         "@babel/generator": "^7.25.0",
-        "@babel/parser": "^7.25.0",
+        "@babel/parser": "^7.25.3",
         "@babel/template": "^7.25.0",
         "@babel/types": "^7.25.2",
         "debug": "^4.3.1",
@@ -690,7 +691,6 @@
       "version": "7.25.2",
       "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
       "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
-      "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/helper-string-parser": "^7.24.8",
@@ -1305,9 +1305,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.8.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.8.0.tgz",
-      "integrity": "sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==",
+      "version": "9.9.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.0.tgz",
+      "integrity": "sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2090,17 +2090,17 @@
       }
     },
     "node_modules/@nuxt/eslint-config/node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0.tgz",
-      "integrity": "sha512-STIZdwEQRXAHvNUS6ILDf5z3u95Gc8jzywunxSNqX00OooIemaaNIA0vEgynJlycL5AjabYLLrIyHd4iazyvtg==",
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.1.0.tgz",
+      "integrity": "sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.0.0",
-        "@typescript-eslint/type-utils": "8.0.0",
-        "@typescript-eslint/utils": "8.0.0",
-        "@typescript-eslint/visitor-keys": "8.0.0",
+        "@typescript-eslint/scope-manager": "8.1.0",
+        "@typescript-eslint/type-utils": "8.1.0",
+        "@typescript-eslint/utils": "8.1.0",
+        "@typescript-eslint/visitor-keys": "8.1.0",
         "graphemer": "^1.4.0",
         "ignore": "^5.3.1",
         "natural-compare": "^1.4.0",
@@ -2124,16 +2124,16 @@
       }
     },
     "node_modules/@nuxt/eslint-config/node_modules/@typescript-eslint/parser": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.0.0.tgz",
-      "integrity": "sha512-pS1hdZ+vnrpDIxuFXYQpLTILglTjSYJ9MbetZctrUawogUsPdz31DIIRZ9+rab0LhYNTsk88w4fIzVheiTbWOQ==",
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.1.0.tgz",
+      "integrity": "sha512-U7iTAtGgJk6DPX9wIWPPOlt1gO57097G06gIcl0N0EEnNw8RGD62c+2/DiP/zL7KrkqnnqF7gtFGR7YgzPllTA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "@typescript-eslint/scope-manager": "8.0.0",
-        "@typescript-eslint/types": "8.0.0",
-        "@typescript-eslint/typescript-estree": "8.0.0",
-        "@typescript-eslint/visitor-keys": "8.0.0",
+        "@typescript-eslint/scope-manager": "8.1.0",
+        "@typescript-eslint/types": "8.1.0",
+        "@typescript-eslint/typescript-estree": "8.1.0",
+        "@typescript-eslint/visitor-keys": "8.1.0",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -2152,17 +2152,15 @@
         }
       }
     },
-    "node_modules/@nuxt/eslint-config/node_modules/@typescript-eslint/type-utils": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.0.0.tgz",
-      "integrity": "sha512-mJAFP2mZLTBwAn5WI4PMakpywfWFH5nQZezUQdSKV23Pqo6o9iShQg1hP2+0hJJXP2LnZkWPphdIq4juYYwCeg==",
+    "node_modules/@nuxt/eslint-config/node_modules/@typescript-eslint/scope-manager": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.1.0.tgz",
+      "integrity": "sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "8.0.0",
-        "@typescript-eslint/utils": "8.0.0",
-        "debug": "^4.3.4",
-        "ts-api-utils": "^1.3.0"
+        "@typescript-eslint/types": "8.1.0",
+        "@typescript-eslint/visitor-keys": "8.1.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -2170,36 +2168,42 @@
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
       }
     },
-    "node_modules/@nuxt/eslint-config/node_modules/@typescript-eslint/types": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.0.tgz",
-      "integrity": "sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw==",
+    "node_modules/@nuxt/eslint-config/node_modules/@typescript-eslint/type-utils": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.1.0.tgz",
+      "integrity": "sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/typescript-estree": "8.1.0",
+        "@typescript-eslint/utils": "8.1.0",
+        "debug": "^4.3.4",
+        "ts-api-utils": "^1.3.0"
+      },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
       }
     },
     "node_modules/@nuxt/eslint-config/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0.tgz",
-      "integrity": "sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg==",
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.1.0.tgz",
+      "integrity": "sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "@typescript-eslint/types": "8.0.0",
-        "@typescript-eslint/visitor-keys": "8.0.0",
+        "@typescript-eslint/types": "8.1.0",
+        "@typescript-eslint/visitor-keys": "8.1.0",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -2220,37 +2224,14 @@
         }
       }
     },
-    "node_modules/@nuxt/eslint-config/node_modules/@typescript-eslint/utils": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.0.tgz",
-      "integrity": "sha512-k/oS/A/3QeGLRvOWCg6/9rATJL5rec7/5s1YmdS0ZU6LHveJyGFwBvLhSRBv6i9xaj7etmosp+l+ViN1I9Aj/Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "8.0.0",
-        "@typescript-eslint/types": "8.0.0",
-        "@typescript-eslint/typescript-estree": "8.0.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
-      }
-    },
     "node_modules/@nuxt/eslint-config/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0.tgz",
-      "integrity": "sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA==",
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz",
+      "integrity": "sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.0.0",
+        "@typescript-eslint/types": "8.1.0",
         "eslint-visitor-keys": "^3.4.3"
       },
       "engines": {
@@ -2319,134 +2300,6 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
-    "node_modules/@nuxt/eslint-plugin/node_modules/@typescript-eslint/types": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.0.tgz",
-      "integrity": "sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@nuxt/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0.tgz",
-      "integrity": "sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "@typescript-eslint/types": "8.0.0",
-        "@typescript-eslint/visitor-keys": "8.0.0",
-        "debug": "^4.3.4",
-        "globby": "^11.1.0",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^1.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@nuxt/eslint-plugin/node_modules/@typescript-eslint/utils": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.0.tgz",
-      "integrity": "sha512-k/oS/A/3QeGLRvOWCg6/9rATJL5rec7/5s1YmdS0ZU6LHveJyGFwBvLhSRBv6i9xaj7etmosp+l+ViN1I9Aj/Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "8.0.0",
-        "@typescript-eslint/types": "8.0.0",
-        "@typescript-eslint/typescript-estree": "8.0.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
-      }
-    },
-    "node_modules/@nuxt/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0.tgz",
-      "integrity": "sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.0.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@nuxt/eslint-plugin/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@nuxt/eslint-plugin/node_modules/globby": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-union": "^2.1.0",
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.9",
-        "ignore": "^5.2.0",
-        "merge2": "^1.4.1",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@nuxt/eslint-plugin/node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/@nuxt/kit": {
       "version": "3.12.4",
       "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.12.4.tgz",
@@ -3747,9 +3600,9 @@
       "license": "MIT"
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.1.tgz",
-      "integrity": "sha512-XzqSg714++M+FXhHfXpS1tDnNZNpgxxuGZWlRG/jSj+VEPmZ0yg6jV4E0AL3uyBKxO8mO3xtOsP5mQ+XLfrlww==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz",
+      "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==",
       "cpu": [
         "arm"
       ],
@@ -3761,9 +3614,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.1.tgz",
-      "integrity": "sha512-thFUbkHteM20BGShD6P08aungq4irbIZKUNbG70LN8RkO7YztcGPiKTTGZS7Kw+x5h8hOXs0i4OaHwFxlpQN6A==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz",
+      "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==",
       "cpu": [
         "arm64"
       ],
@@ -3775,9 +3628,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.1.tgz",
-      "integrity": "sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz",
+      "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==",
       "cpu": [
         "arm64"
       ],
@@ -3789,9 +3642,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.1.tgz",
-      "integrity": "sha512-4T42heKsnbjkn7ovYiAdDVRRWZLU9Kmhdt6HafZxFcUdpjlBlxj4wDrt1yFWLk7G4+E+8p2C9tcmSu0KA6auGA==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz",
+      "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==",
       "cpu": [
         "x64"
       ],
@@ -3803,9 +3656,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.1.tgz",
-      "integrity": "sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz",
+      "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==",
       "cpu": [
         "arm"
       ],
@@ -3817,9 +3670,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.1.tgz",
-      "integrity": "sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz",
+      "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==",
       "cpu": [
         "arm"
       ],
@@ -3831,9 +3684,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.1.tgz",
-      "integrity": "sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz",
+      "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==",
       "cpu": [
         "arm64"
       ],
@@ -3845,9 +3698,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.1.tgz",
-      "integrity": "sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz",
+      "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==",
       "cpu": [
         "arm64"
       ],
@@ -3859,9 +3712,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.1.tgz",
-      "integrity": "sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz",
+      "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==",
       "cpu": [
         "ppc64"
       ],
@@ -3873,9 +3726,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.1.tgz",
-      "integrity": "sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz",
+      "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==",
       "cpu": [
         "riscv64"
       ],
@@ -3887,9 +3740,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.1.tgz",
-      "integrity": "sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz",
+      "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==",
       "cpu": [
         "s390x"
       ],
@@ -3901,9 +3754,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.1.tgz",
-      "integrity": "sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz",
+      "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==",
       "cpu": [
         "x64"
       ],
@@ -3915,9 +3768,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.1.tgz",
-      "integrity": "sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz",
+      "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==",
       "cpu": [
         "x64"
       ],
@@ -3929,9 +3782,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.1.tgz",
-      "integrity": "sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz",
+      "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==",
       "cpu": [
         "arm64"
       ],
@@ -3943,9 +3796,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.1.tgz",
-      "integrity": "sha512-LdxxcqRVSXi6k6JUrTah1rHuaupoeuiv38du8Mt4r4IPer3kwlTo+RuvfE8KzZ/tL6BhaPlzJ3835i6CxrFIRQ==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz",
+      "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==",
       "cpu": [
         "ia32"
       ],
@@ -3957,9 +3810,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.1.tgz",
-      "integrity": "sha512-2bIrL28PcK3YCqD9anGxDxamxdiJAxA+l7fWIwM5o8UqNy1t3d1NdAweO2XhA0KTDJ5aH1FsuiT5+7VhtHliXg==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz",
+      "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==",
       "cpu": [
         "x64"
       ],
@@ -4095,16 +3948,16 @@
       }
     },
     "node_modules/@stylistic/eslint-plugin": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.6.1.tgz",
-      "integrity": "sha512-UT0f4t+3sQ/GKW7875NiIIjZJ1Bh4gd7JNfoIkwIQyWqO7wGd0Pqzu0Ho30Ka8MNF5lm++SkVeqAk26vGxoUpg==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.6.2.tgz",
+      "integrity": "sha512-Ic5oFNM/25iuagob6LiIBkSI/A2y45TsyKtDtODXHRZDy52WfPfeexI6r+OH5+aWN9QGob2Bw+4JRM9/4areWw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@stylistic/eslint-plugin-js": "2.6.1",
-        "@stylistic/eslint-plugin-jsx": "2.6.1",
-        "@stylistic/eslint-plugin-plus": "2.6.1",
-        "@stylistic/eslint-plugin-ts": "2.6.1",
+        "@stylistic/eslint-plugin-js": "2.6.2",
+        "@stylistic/eslint-plugin-jsx": "2.6.2",
+        "@stylistic/eslint-plugin-plus": "2.6.2",
+        "@stylistic/eslint-plugin-ts": "2.6.2",
         "@types/eslint": "^9.6.0"
       },
       "engines": {
@@ -4115,9 +3968,9 @@
       }
     },
     "node_modules/@stylistic/eslint-plugin-js": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.6.1.tgz",
-      "integrity": "sha512-iLOiVzcvqzDGD9U0EuVOX680v+XOPiPAjkxWj+Q6iV2GLOM5NB27tKVOpJY7AzBhidwpRbaLTgg3T4UzYx09jw==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.6.2.tgz",
+      "integrity": "sha512-wCr/kVctAPayMU3pcOI1MKR7MoKIh6VKZU89lPklAqtJoxT+Em6RueiiARbpznUYG5eg3LymiU+aMD+aIZXdqA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4134,13 +3987,13 @@
       }
     },
     "node_modules/@stylistic/eslint-plugin-jsx": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-2.6.1.tgz",
-      "integrity": "sha512-5qHLXqxfY6jubAQfDqrifv41fx7gaqA9svDaChxMI6JiHpEBfh+PXxmm3g+B8gJCYVBTC62Rjl0Ny5QabK58bw==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-2.6.2.tgz",
+      "integrity": "sha512-dSXK/fSPA938J1fBi10QmhzLKtZ/2TuyVNHQMk8jUhWfKJDleAogaSqcWNAbN8fwcoe9UWmt/3StiIf2oYC1aQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@stylistic/eslint-plugin-js": "^2.6.1",
+        "@stylistic/eslint-plugin-js": "^2.6.2",
         "@types/eslint": "^9.6.0",
         "estraverse": "^5.3.0",
         "picomatch": "^4.0.2"
@@ -4166,9 +4019,9 @@
       }
     },
     "node_modules/@stylistic/eslint-plugin-plus": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-2.6.1.tgz",
-      "integrity": "sha512-z/IYu/q8ipApzNam5utSU+BrXg4pK/Gv9xNbr4eWv/bZppvTWJU62xCO4nw/6r2dHNPnqc7uCHEC7GMlBnPY0A==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-2.6.2.tgz",
+      "integrity": "sha512-cANcPASfRvq3VTbbQCrSIXq+2AI0IW68PNYaZoXXS0ENlp7HDB8dmrsJnOgWCcoEvdCB8z/eWcG/eq/v5Qcl+Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4179,310 +4032,54 @@
         "eslint": "*"
       }
     },
-    "node_modules/@stylistic/eslint-plugin-plus/node_modules/@typescript-eslint/types": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.0.tgz",
-      "integrity": "sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw==",
+    "node_modules/@stylistic/eslint-plugin-ts": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.6.2.tgz",
+      "integrity": "sha512-6OEN3VtUNxjgOvWPavnC10MByr1H4zsgwNND3rQXr5lDFv93MLUnTsH+/SH15OkuqdyJgrQILI6b9lYecb1vIg==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@stylistic/eslint-plugin-plus/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0.tgz",
-      "integrity": "sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg==",
-      "dev": true,
-      "license": "BSD-2-Clause",
       "dependencies": {
-        "@typescript-eslint/types": "8.0.0",
-        "@typescript-eslint/visitor-keys": "8.0.0",
-        "debug": "^4.3.4",
-        "globby": "^11.1.0",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^1.3.0"
+        "@stylistic/eslint-plugin-js": "2.6.2",
+        "@types/eslint": "^9.6.0",
+        "@typescript-eslint/utils": "^8.0.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
+      "peerDependencies": {
+        "eslint": ">=8.40.0"
       }
     },
-    "node_modules/@stylistic/eslint-plugin-plus/node_modules/@typescript-eslint/utils": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.0.tgz",
-      "integrity": "sha512-k/oS/A/3QeGLRvOWCg6/9rATJL5rec7/5s1YmdS0ZU6LHveJyGFwBvLhSRBv6i9xaj7etmosp+l+ViN1I9Aj/Q==",
+    "node_modules/@tailwindcss/typography": {
+      "version": "0.5.14",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.14.tgz",
+      "integrity": "sha512-ZvOCjUbsJBjL9CxQBn+VEnFpouzuKhxh2dH8xMIWHILL+HfOYtlAkWcyoon8LlzE53d2Yo6YO6pahKKNW3q1YQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "8.0.0",
-        "@typescript-eslint/types": "8.0.0",
-        "@typescript-eslint/typescript-estree": "8.0.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
+        "lodash.castarray": "^4.4.0",
+        "lodash.isplainobject": "^4.0.6",
+        "lodash.merge": "^4.6.2",
+        "postcss-selector-parser": "6.0.10"
       },
       "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
+        "tailwindcss": ">=3.0.0 || insiders"
       }
     },
-    "node_modules/@stylistic/eslint-plugin-plus/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0.tgz",
-      "integrity": "sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.0.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
+    "node_modules/@tootallnate/quickjs-emscripten": {
+      "version": "0.23.0",
+      "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
+      "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==",
+      "license": "MIT"
     },
-    "node_modules/@stylistic/eslint-plugin-plus/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+    "node_modules/@trysound/sax": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
+      "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
       "dev": true,
-      "license": "Apache-2.0",
+      "license": "ISC",
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@stylistic/eslint-plugin-plus/node_modules/globby": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-union": "^2.1.0",
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.9",
-        "ignore": "^5.2.0",
-        "merge2": "^1.4.1",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@stylistic/eslint-plugin-plus/node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/@stylistic/eslint-plugin-ts": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.6.1.tgz",
-      "integrity": "sha512-Mxl1VMorEG1Hc6oBYPD0+KIJOWkjEF1R0liL7wWgKfwpqOkgmnh5lVdZBrYyfRKOE4RlGcwEFTNai1IW6orgVg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@stylistic/eslint-plugin-js": "2.6.1",
-        "@types/eslint": "^9.6.0",
-        "@typescript-eslint/utils": "^8.0.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "peerDependencies": {
-        "eslint": ">=8.40.0"
-      }
-    },
-    "node_modules/@stylistic/eslint-plugin-ts/node_modules/@typescript-eslint/types": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.0.tgz",
-      "integrity": "sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@stylistic/eslint-plugin-ts/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0.tgz",
-      "integrity": "sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "@typescript-eslint/types": "8.0.0",
-        "@typescript-eslint/visitor-keys": "8.0.0",
-        "debug": "^4.3.4",
-        "globby": "^11.1.0",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^1.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@stylistic/eslint-plugin-ts/node_modules/@typescript-eslint/utils": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.0.tgz",
-      "integrity": "sha512-k/oS/A/3QeGLRvOWCg6/9rATJL5rec7/5s1YmdS0ZU6LHveJyGFwBvLhSRBv6i9xaj7etmosp+l+ViN1I9Aj/Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "8.0.0",
-        "@typescript-eslint/types": "8.0.0",
-        "@typescript-eslint/typescript-estree": "8.0.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
-      }
-    },
-    "node_modules/@stylistic/eslint-plugin-ts/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0.tgz",
-      "integrity": "sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.0.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@stylistic/eslint-plugin-ts/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@stylistic/eslint-plugin-ts/node_modules/globby": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-union": "^2.1.0",
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.9",
-        "ignore": "^5.2.0",
-        "merge2": "^1.4.1",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@stylistic/eslint-plugin-ts/node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/@tailwindcss/typography": {
-      "version": "0.5.14",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.14.tgz",
-      "integrity": "sha512-ZvOCjUbsJBjL9CxQBn+VEnFpouzuKhxh2dH8xMIWHILL+HfOYtlAkWcyoon8LlzE53d2Yo6YO6pahKKNW3q1YQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "lodash.castarray": "^4.4.0",
-        "lodash.isplainobject": "^4.0.6",
-        "lodash.merge": "^4.6.2",
-        "postcss-selector-parser": "6.0.10"
-      },
-      "peerDependencies": {
-        "tailwindcss": ">=3.0.0 || insiders"
-      }
-    },
-    "node_modules/@tootallnate/quickjs-emscripten": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
-      "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==",
-      "license": "MIT"
-    },
-    "node_modules/@trysound/sax": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
-      "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
-      "dev": true,
-      "license": "ISC",
-      "engines": {
-        "node": ">=10.13.0"
+        "node": ">=10.13.0"
       }
     },
     "node_modules/@types/connect": {
@@ -4534,9 +4131,9 @@
       "license": "MIT"
     },
     "node_modules/@types/http-proxy": {
-      "version": "1.17.14",
-      "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz",
-      "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==",
+      "version": "1.17.15",
+      "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz",
+      "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4587,12 +4184,12 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.0.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.0.tgz",
-      "integrity": "sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==",
+      "version": "22.2.0",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.2.0.tgz",
+      "integrity": "sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==",
       "license": "MIT",
       "dependencies": {
-        "undici-types": "~6.11.1"
+        "undici-types": "~6.13.0"
       }
     },
     "node_modules/@types/normalize-package-data": {
@@ -4642,9 +4239,9 @@
       "license": "MIT"
     },
     "node_modules/@types/yargs": {
-      "version": "17.0.32",
-      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
-      "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
+      "version": "17.0.33",
+      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
+      "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4702,15 +4299,31 @@
         }
       }
     },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
       "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
-      "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
+      "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || >=20.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": {
+      "version": "7.18.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
+      "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
+        "@eslint-community/eslint-utils": "^4.4.0",
+        "@typescript-eslint/scope-manager": "7.18.0",
         "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/visitor-keys": "7.18.0"
+        "@typescript-eslint/typescript-estree": "7.18.0"
       },
       "engines": {
         "node": "^18.18.0 || >=20.0.0"
@@ -4718,6 +4331,9 @@
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.56.0"
       }
     },
     "node_modules/@typescript-eslint/parser": {
@@ -4750,13 +4366,27 @@
         }
       }
     },
-    "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
+    "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
+      "version": "7.18.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
+      "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "engines": {
+        "node": "^18.18.0 || >=20.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/scope-manager": {
       "version": "7.18.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
       "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==",
       "dev": true,
       "license": "MIT",
-      "peer": true,
       "dependencies": {
         "@typescript-eslint/types": "7.18.0",
         "@typescript-eslint/visitor-keys": "7.18.0"
@@ -4769,79 +4399,113 @@
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.0.tgz",
-      "integrity": "sha512-V0aa9Csx/ZWWv2IPgTfY7T4agYwJyILESu/PVqFtTFz9RIS823mAze+NbnBI8xiwdX3iqeQbcTYlvB04G9wyQw==",
+    "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": {
+      "version": "7.18.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
+      "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || >=20.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils": {
+      "version": "7.18.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz",
+      "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.0.0",
-        "@typescript-eslint/visitor-keys": "8.0.0"
+        "@typescript-eslint/typescript-estree": "7.18.0",
+        "@typescript-eslint/utils": "7.18.0",
+        "debug": "^4.3.4",
+        "ts-api-utils": "^1.3.0"
       },
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": "^18.18.0 || >=20.0.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.56.0"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.0.tgz",
-      "integrity": "sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw==",
+    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
+      "version": "7.18.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
+      "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": "^18.18.0 || >=20.0.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0.tgz",
-      "integrity": "sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA==",
+    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": {
+      "version": "7.18.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
+      "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.0.0",
-        "eslint-visitor-keys": "^3.4.3"
+        "@eslint-community/eslint-utils": "^4.4.0",
+        "@typescript-eslint/scope-manager": "7.18.0",
+        "@typescript-eslint/types": "7.18.0",
+        "@typescript-eslint/typescript-estree": "7.18.0"
       },
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": "^18.18.0 || >=20.0.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.56.0"
       }
     },
-    "node_modules/@typescript-eslint/scope-manager/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+    "node_modules/@typescript-eslint/types": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz",
+      "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==",
       "dev": true,
-      "license": "Apache-2.0",
+      "license": "MIT",
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
-        "url": "https://opencollective.com/eslint"
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/type-utils": {
+    "node_modules/@typescript-eslint/typescript-estree": {
       "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz",
-      "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz",
+      "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==",
       "dev": true,
-      "license": "MIT",
+      "license": "BSD-2-Clause",
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "7.18.0",
-        "@typescript-eslint/utils": "7.18.0",
+        "@typescript-eslint/types": "7.18.0",
+        "@typescript-eslint/visitor-keys": "7.18.0",
         "debug": "^4.3.4",
+        "globby": "^11.1.0",
+        "is-glob": "^4.0.3",
+        "minimatch": "^9.0.4",
+        "semver": "^7.6.0",
         "ts-api-utils": "^1.3.0"
       },
       "engines": {
@@ -4851,38 +4515,107 @@
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
-      "peerDependencies": {
-        "eslint": "^8.56.0"
-      },
       "peerDependenciesMeta": {
         "typescript": {
           "optional": true
         }
       }
     },
-    "node_modules/@typescript-eslint/types": {
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/types": {
       "version": "7.18.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
       "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || >=20.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": {
+      "version": "11.1.0",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "array-union": "^2.1.0",
+        "dir-glob": "^3.0.1",
+        "fast-glob": "^3.2.9",
+        "ignore": "^5.2.0",
+        "merge2": "^1.4.1",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/@typescript-eslint/utils": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.1.0.tgz",
+      "integrity": "sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.4.0",
+        "@typescript-eslint/scope-manager": "8.1.0",
+        "@typescript-eslint/types": "8.1.0",
+        "@typescript-eslint/typescript-estree": "8.1.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.1.0.tgz",
+      "integrity": "sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.1.0",
+        "@typescript-eslint/visitor-keys": "8.1.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz",
-      "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==",
+    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.1.0.tgz",
+      "integrity": "sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/visitor-keys": "7.18.0",
+        "@typescript-eslint/types": "8.1.0",
+        "@typescript-eslint/visitor-keys": "8.1.0",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -4891,7 +4624,7 @@
         "ts-api-utils": "^1.3.0"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
@@ -4903,7 +4636,38 @@
         }
       }
     },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": {
+    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz",
+      "integrity": "sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.1.0",
+        "eslint-visitor-keys": "^3.4.3"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/globby": {
       "version": "11.1.0",
       "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
       "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
@@ -4924,7 +4688,7 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": {
+    "node_modules/@typescript-eslint/utils/node_modules/slash": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
       "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
@@ -4934,38 +4698,15 @@
         "node": ">=8"
       }
     },
-    "node_modules/@typescript-eslint/utils": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
-      "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "7.18.0",
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/typescript-estree": "7.18.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || >=20.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.56.0"
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
+    "node_modules/@typescript-eslint/visitor-keys": {
       "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
-      "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
+      "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/visitor-keys": "7.18.0"
+        "eslint-visitor-keys": "^3.4.3"
       },
       "engines": {
         "node": "^18.18.0 || >=20.0.0"
@@ -4975,16 +4716,12 @@
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/visitor-keys": {
+    "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": {
       "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
-      "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
+      "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "7.18.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
       "engines": {
         "node": "^18.18.0 || >=20.0.0"
       },
@@ -5192,9 +4929,9 @@
       }
     },
     "node_modules/@vitejs/plugin-vue": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.1.tgz",
-      "integrity": "sha512-sDckXxlHpMsjRQbAH9WanangrfrblsOd3pNifePs+FOHjJg1jfWq5L/P0PsBRndEt3nmdUnmvieP8ULDeX5AvA==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.2.tgz",
+      "integrity": "sha512-nY9IwH12qeiJqumTCLJLE7IiNx7HZ39cbHaysEUd+Myvbz9KAqd2yq+U01Kab1R/H1BmiyM2ShTYlNH32Fzo3A==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -5339,16 +5076,16 @@
       }
     },
     "node_modules/@vue-macros/common": {
-      "version": "1.11.0",
-      "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.11.0.tgz",
-      "integrity": "sha512-PpAh4UZ5hJWWUUnV9290xnvZBBlzmfAX0Qyndplts3RoPzrLSbqTfXucdz9NYdYuGJ7dy+H6OJS+QtknVBlZiA==",
+      "version": "1.12.2",
+      "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.12.2.tgz",
+      "integrity": "sha512-+NGfhrPvPNOb3Wg9PNPEXPe0HTXmVe6XJawL1gi3cIjOSGIhpOdvmMT2cRuWb265IpA/PeL5Sqo0+DQnEDxLvw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.9",
+        "@babel/types": "^7.25.0",
         "@rollup/pluginutils": "^5.1.0",
-        "@vue/compiler-sfc": "^3.4.33",
-        "ast-kit": "^1.0.0",
+        "@vue/compiler-sfc": "^3.4.34",
+        "ast-kit": "^1.0.1",
         "local-pkg": "^0.5.0",
         "magic-string-ast": "^0.6.2"
       },
@@ -5455,18 +5192,6 @@
         "source-map-js": "^1.2.0"
       }
     },
-    "node_modules/@vue/compiler-core/node_modules/entities": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz",
-      "integrity": "sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==",
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=0.12"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
-      }
-    },
     "node_modules/@vue/compiler-core/node_modules/estree-walker": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
@@ -5573,9 +5298,9 @@
       }
     },
     "node_modules/@vue/devtools-shared": {
-      "version": "7.3.7",
-      "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.3.7.tgz",
-      "integrity": "sha512-M9EU1/bWi5GNS/+IZrAhwGOVZmUTN4MH22Hvh35nUZZg9AZP2R2OhfCb+MG4EtAsrUEYlu3R43/SIj3G7EZYtQ==",
+      "version": "7.3.8",
+      "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.3.8.tgz",
+      "integrity": "sha512-1NiJbn7Yp47nPDWhFZyEKpB2+5/+7JYv8IQnU0ccMrgslPR2dL7u1DIyI7mLqy4HN1ll36gQy0k8GqBYSFgZJw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6212,13 +5937,13 @@
       }
     },
     "node_modules/ast-kit": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-1.0.0.tgz",
-      "integrity": "sha512-Jv5Zs4DhU4QEYPvfVrEmdMuxCRMxsIVNfj4uqsBWyNM5wOaNMIfOwu55jH2DWnmr05iyCxPjbYGND1PNU40CuQ==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-1.0.1.tgz",
+      "integrity": "sha512-XdXKlmX3YIrGKJS7d324CAbswH+C1klMCIRQ4VRy0+iPxGeP2scVOoYd09/V6uGjGAi/ZuEwBLzT7xBerSKNQg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/parser": "^7.24.7",
+        "@babel/parser": "^7.24.8",
         "pathe": "^1.1.2"
       },
       "engines": {
@@ -6238,28 +5963,14 @@
       }
     },
     "node_modules/ast-walker-scope": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.6.1.tgz",
-      "integrity": "sha512-0ZdQEsSfH3mX4BFbRCc3xOBjx5bDbm73+aAdQOHerPQNf8K0XFMAv79ucd2BpnSc4UMyvBDixiroT8yjm2Y6bw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/parser": "^7.24.0",
-        "ast-kit": "^0.12.1"
-      },
-      "engines": {
-        "node": ">=16.14.0"
-      }
-    },
-    "node_modules/ast-walker-scope/node_modules/ast-kit": {
-      "version": "0.12.2",
-      "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-0.12.2.tgz",
-      "integrity": "sha512-es1zHFsnZ4Y4efz412nnrU3KvVAhgqy90a7Yt9Wpi5vQ3l4aYMOX0Qx4FD0elKr5ITEhiUGCSFcgGYf4YTuACg==",
+      "version": "0.6.2",
+      "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.6.2.tgz",
+      "integrity": "sha512-1UWOyC50xI3QZkRuDj6PqDtpm1oHWtYs+NQGwqL/2R11eN3Q81PHAHPM0SWW3BNQm53UDwS//Jv8L4CCVLM1bQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/parser": "^7.24.6",
-        "pathe": "^1.1.2"
+        "@babel/parser": "^7.25.3",
+        "ast-kit": "^1.0.1"
       },
       "engines": {
         "node": ">=16.14.0"
@@ -6309,9 +6020,9 @@
       }
     },
     "node_modules/autoprefixer": {
-      "version": "10.4.19",
-      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz",
-      "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==",
+      "version": "10.4.20",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz",
+      "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==",
       "dev": true,
       "funding": [
         {
@@ -6329,11 +6040,11 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.0",
-        "caniuse-lite": "^1.0.30001599",
+        "browserslist": "^4.23.3",
+        "caniuse-lite": "^1.0.30001646",
         "fraction.js": "^4.3.7",
         "normalize-range": "^0.1.2",
-        "picocolors": "^1.0.0",
+        "picocolors": "^1.0.1",
         "postcss-value-parser": "^4.2.0"
       },
       "bin": {
@@ -6509,9 +6220,9 @@
       }
     },
     "node_modules/browserslist": {
-      "version": "4.23.2",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz",
-      "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==",
+      "version": "4.23.3",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
+      "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
       "dev": true,
       "funding": [
         {
@@ -6529,9 +6240,9 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "caniuse-lite": "^1.0.30001640",
-        "electron-to-chromium": "^1.4.820",
-        "node-releases": "^2.0.14",
+        "caniuse-lite": "^1.0.30001646",
+        "electron-to-chromium": "^1.5.4",
+        "node-releases": "^2.0.18",
         "update-browserslist-db": "^1.1.0"
       },
       "bin": {
@@ -6712,9 +6423,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001644",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001644.tgz",
-      "integrity": "sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==",
+      "version": "1.0.30001651",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
+      "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
       "dev": true,
       "funding": [
         {
@@ -7270,13 +6981,13 @@
       }
     },
     "node_modules/core-js-compat": {
-      "version": "3.37.1",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz",
-      "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==",
+      "version": "3.38.0",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz",
+      "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.0"
+        "browserslist": "^4.23.3"
       },
       "funding": {
         "type": "opencollective",
@@ -7325,9 +7036,9 @@
       "license": "MIT"
     },
     "node_modules/croner": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/croner/-/croner-8.1.0.tgz",
-      "integrity": "sha512-sz990XOUPR8dG/r5BRKMBd15MYDDUu8oeSaxFD5DqvNgHSZw8Psd1s689/IGET7ezxRMiNlCIyGeY1Gvxp/MLg==",
+      "version": "8.1.1",
+      "resolved": "https://registry.npmjs.org/croner/-/croner-8.1.1.tgz",
+      "integrity": "sha512-1VdUuRnQP4drdFkS8NKvDR1NBgevm8TOuflcaZEKsxw42CxonjW/2vkj1AKlinJb4ZLwBcuWF9GiPr7FQc6AQA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -7457,13 +7168,13 @@
       }
     },
     "node_modules/cssnano": {
-      "version": "7.0.4",
-      "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.4.tgz",
-      "integrity": "sha512-rQgpZra72iFjiheNreXn77q1haS2GEy69zCMbu4cpXCFPMQF+D4Ik5V7ktMzUF/sA7xCIgcqHwGPnCD+0a1vHg==",
+      "version": "7.0.5",
+      "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.5.tgz",
+      "integrity": "sha512-Aq0vqBLtpTT5Yxj+hLlLfNPFuRQCDIjx5JQAhhaedQKLNDvDGeVziF24PS+S1f0Z5KCxWvw0QVI3VNHNBITxVQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "cssnano-preset-default": "^7.0.4",
+        "cssnano-preset-default": "^7.0.5",
         "lilconfig": "^3.1.2"
       },
       "engines": {
@@ -7478,42 +7189,42 @@
       }
     },
     "node_modules/cssnano-preset-default": {
-      "version": "7.0.4",
-      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.4.tgz",
-      "integrity": "sha512-jQ6zY9GAomQX7/YNLibMEsRZguqMUGuupXcEk2zZ+p3GUxwCAsobqPYE62VrJ9qZ0l9ltrv2rgjwZPBIFIjYtw==",
+      "version": "7.0.5",
+      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.5.tgz",
+      "integrity": "sha512-Jbzja0xaKwc5JzxPQoc+fotKpYtWEu4wQLMQe29CM0FjjdRjA4omvbGHl2DTGgARKxSTpPssBsok+ixv8uTBqw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.1",
+        "browserslist": "^4.23.3",
         "css-declaration-sorter": "^7.2.0",
         "cssnano-utils": "^5.0.0",
-        "postcss-calc": "^10.0.0",
-        "postcss-colormin": "^7.0.1",
-        "postcss-convert-values": "^7.0.2",
-        "postcss-discard-comments": "^7.0.1",
-        "postcss-discard-duplicates": "^7.0.0",
+        "postcss-calc": "^10.0.1",
+        "postcss-colormin": "^7.0.2",
+        "postcss-convert-values": "^7.0.3",
+        "postcss-discard-comments": "^7.0.2",
+        "postcss-discard-duplicates": "^7.0.1",
         "postcss-discard-empty": "^7.0.0",
         "postcss-discard-overridden": "^7.0.0",
-        "postcss-merge-longhand": "^7.0.2",
-        "postcss-merge-rules": "^7.0.2",
+        "postcss-merge-longhand": "^7.0.3",
+        "postcss-merge-rules": "^7.0.3",
         "postcss-minify-font-values": "^7.0.0",
         "postcss-minify-gradients": "^7.0.0",
-        "postcss-minify-params": "^7.0.1",
-        "postcss-minify-selectors": "^7.0.2",
+        "postcss-minify-params": "^7.0.2",
+        "postcss-minify-selectors": "^7.0.3",
         "postcss-normalize-charset": "^7.0.0",
         "postcss-normalize-display-values": "^7.0.0",
         "postcss-normalize-positions": "^7.0.0",
         "postcss-normalize-repeat-style": "^7.0.0",
         "postcss-normalize-string": "^7.0.0",
         "postcss-normalize-timing-functions": "^7.0.0",
-        "postcss-normalize-unicode": "^7.0.1",
+        "postcss-normalize-unicode": "^7.0.2",
         "postcss-normalize-url": "^7.0.0",
         "postcss-normalize-whitespace": "^7.0.0",
         "postcss-ordered-values": "^7.0.1",
-        "postcss-reduce-initial": "^7.0.1",
+        "postcss-reduce-initial": "^7.0.2",
         "postcss-reduce-transforms": "^7.0.0",
         "postcss-svgo": "^7.0.1",
-        "postcss-unique-selectors": "^7.0.1"
+        "postcss-unique-selectors": "^7.0.2"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -7925,6 +7636,19 @@
         "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
       }
     },
+    "node_modules/dom-serializer/node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/domelementtype": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
@@ -8061,9 +7785,9 @@
       "license": "MIT"
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.3",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.3.tgz",
-      "integrity": "sha512-QNdYSS5i8D9axWp/6XIezRObRHqaav/ur9z1VzCDUCH1XIFOr9WQk5xmgunhsTpjjgDy3oLxO/WMOVZlpUQrlA==",
+      "version": "1.5.6",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz",
+      "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==",
       "dev": true,
       "license": "ISC"
     },
@@ -8108,9 +7832,9 @@
       }
     },
     "node_modules/entities": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz",
+      "integrity": "sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==",
       "license": "BSD-2-Clause",
       "engines": {
         "node": ">=0.12"
@@ -8403,6 +8127,43 @@
         "eslint": "^8.56.0 || ^9.0.0-0"
       }
     },
+    "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/types": {
+      "version": "7.18.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
+      "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || >=20.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/utils": {
+      "version": "7.18.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
+      "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint-community/eslint-utils": "^4.4.0",
+        "@typescript-eslint/scope-manager": "7.18.0",
+        "@typescript-eslint/types": "7.18.0",
+        "@typescript-eslint/typescript-estree": "7.18.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || >=20.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.56.0"
+      }
+    },
     "node_modules/eslint-plugin-jsdoc": {
       "version": "48.11.0",
       "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.11.0.tgz",
@@ -8590,9 +8351,9 @@
       }
     },
     "node_modules/eslint-plugin-vue/node_modules/postcss-selector-parser": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
-      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -9176,9 +8937,9 @@
       }
     },
     "node_modules/foreground-child": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
-      "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+      "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
@@ -9928,9 +9689,9 @@
       "license": "BSD-3-Clause"
     },
     "node_modules/ignore": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
-      "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
+      "version": "5.3.2",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -10990,9 +10751,9 @@
       "license": "MIT"
     },
     "node_modules/launch-editor": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz",
-      "integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==",
+      "version": "2.8.1",
+      "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz",
+      "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -12958,6 +12719,18 @@
         "url": "https://github.com/inikulin/parse5?sponsor=1"
       }
     },
+    "node_modules/parse5/node_modules/entities": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=0.12"
+      },
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/parseurl": {
       "version": "1.3.3",
       "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -13206,9 +12979,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.40",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz",
-      "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==",
+      "version": "8.4.41",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
+      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
       "funding": [
         {
           "type": "opencollective",
@@ -13234,13 +13007,13 @@
       }
     },
     "node_modules/postcss-calc": {
-      "version": "10.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.0.tgz",
-      "integrity": "sha512-OmjhudoNTP0QleZCwl1i6NeBwN+5MZbY5ersLZz69mjJiDVv/p57RjRuKDkHeDWr4T+S97wQfsqRTNoDHB2e3g==",
+      "version": "10.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.1.tgz",
+      "integrity": "sha512-pp1Z3FxtxA+xHAoWXcOXgnBN1WPu4ZiJ5LWGjKyf9MMreagAsaTUtnqFK1y1sHhyJddAkYTPu6XSuLgb3oYCjw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "postcss-selector-parser": "^6.0.16",
+        "postcss-selector-parser": "^6.1.1",
         "postcss-value-parser": "^4.2.0"
       },
       "engines": {
@@ -13251,9 +13024,9 @@
       }
     },
     "node_modules/postcss-calc/node_modules/postcss-selector-parser": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
-      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -13265,13 +13038,13 @@
       }
     },
     "node_modules/postcss-colormin": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.1.tgz",
-      "integrity": "sha512-uszdT0dULt3FQs47G5UHCduYK+FnkLYlpu1HpWu061eGsKZ7setoG7kA+WC9NQLsOJf69D5TxGHgnAdRgylnFQ==",
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz",
+      "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.1",
+        "browserslist": "^4.23.3",
         "caniuse-api": "^3.0.0",
         "colord": "^2.9.3",
         "postcss-value-parser": "^4.2.0"
@@ -13284,13 +13057,13 @@
       }
     },
     "node_modules/postcss-convert-values": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.2.tgz",
-      "integrity": "sha512-MuZIF6HJ4izko07Q0TgW6pClalI4al6wHRNPkFzqQdwAwG7hPn0lA58VZdxyb2Vl5AYjJ1piO+jgF9EnTjQwQQ==",
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.3.tgz",
+      "integrity": "sha512-yJhocjCs2SQer0uZ9lXTMOwDowbxvhwFVrZeS6NPEij/XXthl73ggUmfwVvJM+Vaj5gtCKJV1jiUu4IhAUkX/Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.1",
+        "browserslist": "^4.23.3",
         "postcss-value-parser": "^4.2.0"
       },
       "engines": {
@@ -13301,13 +13074,13 @@
       }
     },
     "node_modules/postcss-discard-comments": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.1.tgz",
-      "integrity": "sha512-GVrQxUOhmle1W6jX2SvNLt4kmN+JYhV7mzI6BMnkAWR9DtVvg8e67rrV0NfdWhn7x1zxvzdWkMBPdBDCls+uwQ==",
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.2.tgz",
+      "integrity": "sha512-/Hje9Ls1IYcB9duELO/AyDUJI6aQVY3h5Rj1ziXgaLYCTi1iVBLnjg/TS0D6NszR/kDG6I86OwLmAYe+bvJjiQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "postcss-selector-parser": "^6.1.0"
+        "postcss-selector-parser": "^6.1.1"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -13317,9 +13090,9 @@
       }
     },
     "node_modules/postcss-discard-comments/node_modules/postcss-selector-parser": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
-      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -13331,9 +13104,9 @@
       }
     },
     "node_modules/postcss-discard-duplicates": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.0.tgz",
-      "integrity": "sha512-bAnSuBop5LpAIUmmOSsuvtKAAKREB6BBIYStWUTGq8oG5q9fClDMMuY8i4UPI/cEcDx2TN+7PMnXYIId20UVDw==",
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz",
+      "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -13444,14 +13217,14 @@
       }
     },
     "node_modules/postcss-merge-longhand": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.2.tgz",
-      "integrity": "sha512-06vrW6ZWi9qeP7KMS9fsa9QW56+tIMW55KYqF7X3Ccn+NI2pIgPV6gFfvXTMQ05H90Y5DvnCDPZ2IuHa30PMUg==",
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.3.tgz",
+      "integrity": "sha512-8waYomFxshdv6M9Em3QRM9MettRLDRcH2JQi2l0Z1KlYD/vhal3gbkeSES0NuACXOlZBB0V/B0AseHZaklzWOA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "postcss-value-parser": "^4.2.0",
-        "stylehacks": "^7.0.2"
+        "stylehacks": "^7.0.3"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -13461,16 +13234,16 @@
       }
     },
     "node_modules/postcss-merge-rules": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.2.tgz",
-      "integrity": "sha512-VAR47UNvRsdrTHLe7TV1CeEtF9SJYR5ukIB9U4GZyZOptgtsS20xSxy+k5wMrI3udST6O1XuIn7cjQkg7sDAAw==",
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.3.tgz",
+      "integrity": "sha512-2eSas2p3voPxNfdI5sQrvIkMaeUHpVc3EezgVs18hz/wRTQAC9U99tp9j3W5Jx9/L3qHkEDvizEx/LdnmumIvQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.1",
+        "browserslist": "^4.23.3",
         "caniuse-api": "^3.0.0",
         "cssnano-utils": "^5.0.0",
-        "postcss-selector-parser": "^6.1.0"
+        "postcss-selector-parser": "^6.1.1"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -13480,9 +13253,9 @@
       }
     },
     "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
-      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -13528,13 +13301,13 @@
       }
     },
     "node_modules/postcss-minify-params": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.1.tgz",
-      "integrity": "sha512-e+Xt8xErSRPgSRFxHeBCSxMiO8B8xng7lh8E0A5ep1VfwYhY8FXhu4Q3APMjgx9YDDbSp53IBGENrzygbUvgUQ==",
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz",
+      "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.1",
+        "browserslist": "^4.23.3",
         "cssnano-utils": "^5.0.0",
         "postcss-value-parser": "^4.2.0"
       },
@@ -13546,14 +13319,14 @@
       }
     },
     "node_modules/postcss-minify-selectors": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.2.tgz",
-      "integrity": "sha512-dCzm04wqW1uqLmDZ41XYNBJfjgps3ZugDpogAmJXoCb5oCiTzIX4oPXXKxDpTvWOnKxQKR4EbV4ZawJBLcdXXA==",
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.3.tgz",
+      "integrity": "sha512-SxTgUQSgBk6wEqzQZKEv1xQYIp9UBju6no9q+npohzSdhuSICQdkqmD1UMKkZWItS3olJSJMDDEY9WOJ5oGJew==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "cssesc": "^3.0.0",
-        "postcss-selector-parser": "^6.1.0"
+        "postcss-selector-parser": "^6.1.1"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -13563,9 +13336,9 @@
       }
     },
     "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
-      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -13603,9 +13376,9 @@
       }
     },
     "node_modules/postcss-nested/node_modules/postcss-selector-parser": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
-      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -13691,9 +13464,9 @@
       }
     },
     "node_modules/postcss-nesting/node_modules/postcss-selector-parser": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
-      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -13798,13 +13571,13 @@
       }
     },
     "node_modules/postcss-normalize-unicode": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.1.tgz",
-      "integrity": "sha512-PTPGdY9xAkTw+8ZZ71DUePb7M/Vtgkbbq+EoI33EuyQEzbKemEQMhe5QSr0VP5UfZlreANDPxSfcdSprENcbsg==",
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz",
+      "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.1",
+        "browserslist": "^4.23.3",
         "postcss-value-parser": "^4.2.0"
       },
       "engines": {
@@ -13864,13 +13637,13 @@
       }
     },
     "node_modules/postcss-reduce-initial": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.1.tgz",
-      "integrity": "sha512-0JDUSV4bGB5FGM5g8MkS+rvqKukJZ7OTHw/lcKn7xPNqeaqJyQbUO8/dJpvyTpaVwPsd3Uc33+CfNzdVowp2WA==",
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz",
+      "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.1",
+        "browserslist": "^4.23.3",
         "caniuse-api": "^3.0.0"
       },
       "engines": {
@@ -13992,13 +13765,13 @@
       }
     },
     "node_modules/postcss-unique-selectors": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.1.tgz",
-      "integrity": "sha512-MH7QE/eKUftTB5ta40xcHLl7hkZjgDFydpfTK+QWXeHxghVt3VoPqYL5/G+zYZPPIs+8GuqFXSTgxBSoB1RZtQ==",
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.2.tgz",
+      "integrity": "sha512-CjSam+7Vf8cflJQsHrMS0P2hmy9u0+n/P001kb5eAszLmhjMqrt/i5AqQuNFihhViwDvEAezqTmXqaYXL2ugMw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "postcss-selector-parser": "^6.1.0"
+        "postcss-selector-parser": "^6.1.1"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -14008,9 +13781,9 @@
       }
     },
     "node_modules/postcss-unique-selectors/node_modules/postcss-selector-parser": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
-      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -14878,9 +14651,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.19.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.1.tgz",
-      "integrity": "sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==",
+      "version": "4.20.0",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz",
+      "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -14894,22 +14667,22 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.19.1",
-        "@rollup/rollup-android-arm64": "4.19.1",
-        "@rollup/rollup-darwin-arm64": "4.19.1",
-        "@rollup/rollup-darwin-x64": "4.19.1",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.19.1",
-        "@rollup/rollup-linux-arm-musleabihf": "4.19.1",
-        "@rollup/rollup-linux-arm64-gnu": "4.19.1",
-        "@rollup/rollup-linux-arm64-musl": "4.19.1",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.19.1",
-        "@rollup/rollup-linux-riscv64-gnu": "4.19.1",
-        "@rollup/rollup-linux-s390x-gnu": "4.19.1",
-        "@rollup/rollup-linux-x64-gnu": "4.19.1",
-        "@rollup/rollup-linux-x64-musl": "4.19.1",
-        "@rollup/rollup-win32-arm64-msvc": "4.19.1",
-        "@rollup/rollup-win32-ia32-msvc": "4.19.1",
-        "@rollup/rollup-win32-x64-msvc": "4.19.1",
+        "@rollup/rollup-android-arm-eabi": "4.20.0",
+        "@rollup/rollup-android-arm64": "4.20.0",
+        "@rollup/rollup-darwin-arm64": "4.20.0",
+        "@rollup/rollup-darwin-x64": "4.20.0",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.20.0",
+        "@rollup/rollup-linux-arm-musleabihf": "4.20.0",
+        "@rollup/rollup-linux-arm64-gnu": "4.20.0",
+        "@rollup/rollup-linux-arm64-musl": "4.20.0",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0",
+        "@rollup/rollup-linux-riscv64-gnu": "4.20.0",
+        "@rollup/rollup-linux-s390x-gnu": "4.20.0",
+        "@rollup/rollup-linux-x64-gnu": "4.20.0",
+        "@rollup/rollup-linux-x64-musl": "4.20.0",
+        "@rollup/rollup-win32-arm64-msvc": "4.20.0",
+        "@rollup/rollup-win32-ia32-msvc": "4.20.0",
+        "@rollup/rollup-win32-x64-msvc": "4.20.0",
         "fsevents": "~2.3.2"
       }
     },
@@ -15754,14 +15527,14 @@
       "license": "MIT"
     },
     "node_modules/stylehacks": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.2.tgz",
-      "integrity": "sha512-HdkWZS9b4gbgYTdMg4gJLmm7biAUug1qTqXjS+u8X+/pUd+9Px1E+520GnOW3rST9MNsVOVpsJG+mPHNosxjOQ==",
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.3.tgz",
+      "integrity": "sha512-4DqtecvI/Nd+2BCvW9YEF6lhBN5UM50IJ1R3rnEAhBwbCKf4VehRf+uqvnVArnBayjYD/WtT3g0G/HSRxWfTRg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.1",
-        "postcss-selector-parser": "^6.1.0"
+        "browserslist": "^4.23.3",
+        "postcss-selector-parser": "^6.1.1"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -15771,9 +15544,9 @@
       }
     },
     "node_modules/stylehacks/node_modules/postcss-selector-parser": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
-      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -16110,9 +15883,9 @@
       }
     },
     "node_modules/tailwindcss": {
-      "version": "3.4.7",
-      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.7.tgz",
-      "integrity": "sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==",
+      "version": "3.4.9",
+      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.9.tgz",
+      "integrity": "sha512-1SEOvRr6sSdV5IDf9iC+NU4dhwdqzF4zKKq3sAbasUWHEM6lsMhX+eNN5gkPx1BvLFEnZQEUFbXnGj8Qlp83Pg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -16171,9 +15944,9 @@
       }
     },
     "node_modules/tailwindcss/node_modules/postcss-selector-parser": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz",
-      "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==",
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -16268,9 +16041,9 @@
       "license": "ISC"
     },
     "node_modules/terser": {
-      "version": "5.31.3",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz",
-      "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==",
+      "version": "5.31.5",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.5.tgz",
+      "integrity": "sha512-YPmas0L0rE1UyLL/llTWA0SiDOqIcAQYLeUj7cJYzXHlRTAnMSg9pPe4VJ5PlKvTrPQsdVFuiRiwyeNlYgwh2Q==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
@@ -16450,9 +16223,9 @@
       "license": "MIT"
     },
     "node_modules/tinybench": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz",
-      "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==",
+      "version": "2.9.0",
+      "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
+      "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
       "dev": true,
       "license": "MIT"
     },
@@ -16490,7 +16263,6 @@
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
       "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
-      "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">=4"
@@ -16747,9 +16519,9 @@
       }
     },
     "node_modules/undici-types": {
-      "version": "6.11.1",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz",
-      "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==",
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz",
+      "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==",
       "license": "MIT"
     },
     "node_modules/unenv": {
@@ -16809,9 +16581,9 @@
       }
     },
     "node_modules/unimport": {
-      "version": "3.9.1",
-      "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.9.1.tgz",
-      "integrity": "sha512-4gtacoNH6YPx2Aa5Xfyrf8pU2RdXjWUACb/eF7bH1AcZtqs+6ijbNB0M3BPENbtVjnCcg8tw9UJ1jQGbCzKA6g==",
+      "version": "3.10.0",
+      "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.10.0.tgz",
+      "integrity": "sha512-/UvKRfWx3mNDWwWQhR62HsoM3wxHwYdTq8ellZzMOHnnw4Dp8tovgthyW7DjTrbjDL+i4idOp06voz2VKlvrLw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -16821,7 +16593,7 @@
         "estree-walker": "^3.0.3",
         "fast-glob": "^3.3.2",
         "local-pkg": "^0.5.0",
-        "magic-string": "^0.30.10",
+        "magic-string": "^0.30.11",
         "mlly": "^1.7.1",
         "pathe": "^1.1.2",
         "pkg-types": "^1.1.3",
@@ -16853,9 +16625,9 @@
       }
     },
     "node_modules/unplugin": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.0.tgz",
-      "integrity": "sha512-KeczzHl2sATPQUx1gzo+EnUkmN4VmGBYRRVOZSGvGITE9rGHRDGqft6ONceP3vgXcyJ2XjX5axG5jMWUwNCYLw==",
+      "version": "1.12.1",
+      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.1.tgz",
+      "integrity": "sha512-aXEH9c5qi3uYZHo0niUtxDlT9ylG/luMW/dZslSCkbtC31wCyFkmM0kyoBBh+Grhn7CL+/kvKLfN61/EdxPxMQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -16869,15 +16641,15 @@
       }
     },
     "node_modules/unplugin-vue-router": {
-      "version": "0.10.1",
-      "resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.10.1.tgz",
-      "integrity": "sha512-ATqvUsHBz1cdzeUfbYaOOCJ3t6Ax+iGCmPVXS2uJJJATqjnhHXz10DcPoDyrrD0ni2dzT8zrn4jXRczD/H1fhg==",
+      "version": "0.10.3",
+      "resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.10.3.tgz",
+      "integrity": "sha512-qyR3etefMT2U6gBz8li6vFhIdGMib1wCZ7iqwYNEk22qBvx7i/LmFTrNsDpNpPpwXlfM6xOITd6yfVo9pPQklw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.24.9",
+        "@babel/types": "^7.25.2",
         "@rollup/pluginutils": "^5.1.0",
-        "@vue-macros/common": "^1.10.4",
+        "@vue-macros/common": "^1.12.2",
         "ast-walker-scope": "^0.6.1",
         "chokidar": "^3.6.0",
         "fast-glob": "^3.3.2",
@@ -16886,8 +16658,8 @@
         "mlly": "^1.7.1",
         "pathe": "^1.1.2",
         "scule": "^1.3.0",
-        "unplugin": "^1.11.0",
-        "yaml": "^2.4.5"
+        "unplugin": "^1.12.1",
+        "yaml": "^2.5.0"
       },
       "peerDependencies": {
         "vue-router": "^4.4.0"
@@ -17140,14 +16912,14 @@
       }
     },
     "node_modules/vite": {
-      "version": "5.3.5",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz",
-      "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==",
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz",
+      "integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
-        "postcss": "^8.4.39",
+        "postcss": "^8.4.40",
         "rollup": "^4.13.0"
       },
       "bin": {
@@ -17167,6 +16939,7 @@
         "less": "*",
         "lightningcss": "^1.21.0",
         "sass": "*",
+        "sass-embedded": "*",
         "stylus": "*",
         "sugarss": "*",
         "terser": "^5.4.0"
@@ -17184,6 +16957,9 @@
         "sass": {
           "optional": true
         },
+        "sass-embedded": {
+          "optional": true
+        },
         "stylus": {
           "optional": true
         },
@@ -18099,9 +17875,9 @@
       }
     },
     "node_modules/vscode-languageserver-textdocument": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz",
-      "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==",
+      "version": "1.0.12",
+      "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
+      "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==",
       "dev": true,
       "license": "MIT"
     },
@@ -18242,13 +18018,13 @@
       }
     },
     "node_modules/vue-router": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.0.tgz",
-      "integrity": "sha512-HB+t2p611aIZraV2aPSRNXf0Z/oLZFrlygJm+sZbdJaW6lcFqEDQwnzUBXn+DApw+/QzDU/I9TeWx9izEjTmsA==",
+      "version": "4.4.3",
+      "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.3.tgz",
+      "integrity": "sha512-sv6wmNKx2j3aqJQDMxLFzs/u/mjA9Z5LCgy6BE0f7yFWMjrPLnS/sPNn8ARY/FXw6byV18EFutn5lTO6+UsV5A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/devtools-api": "^6.5.1"
+        "@vue/devtools-api": "^6.6.3"
       },
       "funding": {
         "url": "https://github.com/sponsors/posva"
diff --git a/translation/package-lock.json b/translation/package-lock.json
index 0bfa123fd5..64584f11bb 100644
--- a/translation/package-lock.json
+++ b/translation/package-lock.json
@@ -10,12 +10,12 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.0.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.0.tgz",
-      "integrity": "sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==",
+      "version": "22.2.0",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.2.0.tgz",
+      "integrity": "sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==",
       "license": "MIT",
       "dependencies": {
-        "undici-types": "~6.11.1"
+        "undici-types": "~6.13.0"
       }
     },
     "node_modules/asynckit": {
@@ -25,9 +25,9 @@
       "license": "MIT"
     },
     "node_modules/axios": {
-      "version": "1.7.2",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz",
-      "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==",
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz",
+      "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==",
       "license": "MIT",
       "dependencies": {
         "follow-redirects": "^1.15.6",
@@ -160,9 +160,9 @@
       "license": "MIT"
     },
     "node_modules/undici-types": {
-      "version": "6.11.1",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz",
-      "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==",
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz",
+      "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==",
       "license": "MIT"
     }
   }

From e830de1e0f0ab458abdc2c0ded15041a5ba47045 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 13 Aug 2024 07:22:44 +0000
Subject: [PATCH 046/273] chore(deps): update dependency lint-staged to v15.2.9

---
 frontend/package-lock.json | 8 ++++----
 frontend/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 9a36f6e104..b35ee17294 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -95,7 +95,7 @@
         "flush-promises": "1.0.2",
         "jest-serializer-vue-tjw": "3.20.0",
         "jsdom": "24.1.1",
-        "lint-staged": "15.2.8",
+        "lint-staged": "15.2.9",
         "prettier": "3.3.3",
         "sass": "1.32.13",
         "unplugin-vue-components": "0.27.4",
@@ -9308,9 +9308,9 @@
       }
     },
     "node_modules/lint-staged": {
-      "version": "15.2.8",
-      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.8.tgz",
-      "integrity": "sha512-PUWFf2zQzsd9EFU+kM1d7UP+AZDbKFKuj+9JNVTBkhUFhbg4MAt6WfyMMwBfM4lYqd4D2Jwac5iuTu9rVj4zCQ==",
+      "version": "15.2.9",
+      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.9.tgz",
+      "integrity": "sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/frontend/package.json b/frontend/package.json
index ac02663650..160111fbd0 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -107,7 +107,7 @@
     "flush-promises": "1.0.2",
     "jest-serializer-vue-tjw": "3.20.0",
     "jsdom": "24.1.1",
-    "lint-staged": "15.2.8",
+    "lint-staged": "15.2.9",
     "prettier": "3.3.3",
     "sass": "1.32.13",
     "unplugin-vue-components": "0.27.4",

From 0e698019816582ec8becf123c80c358da7d91cb8 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 13 Aug 2024 07:23:10 +0000
Subject: [PATCH 047/273] chore(deps): update dependency phpunit/phpunit to
 v10.5.30

---
 api/composer.json |  2 +-
 api/composer.lock | 16 ++++++++--------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 87d25d707e..043515c006 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -57,7 +57,7 @@
         "php-coveralls/php-coveralls": "2.7.0",
         "phpspec/prophecy-phpunit": "2.2",
         "phpstan/phpstan": "1.11.10",
-        "phpunit/phpunit": "10.5.29",
+        "phpunit/phpunit": "10.5.30",
         "rector/rector": "1.2.3",
         "spatie/phpunit-snapshot-assertions": "5.1.6",
         "symfony/browser-kit": "7.1.1",
diff --git a/api/composer.lock b/api/composer.lock
index c0f39ea91b..d7afe7d279 100644
--- a/api/composer.lock
+++ b/api/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": "3d2d3db80400cda01539c618ffd4919e",
+    "content-hash": "cd02156609d00867762d608b96956509",
     "packages": [
         {
             "name": "api-platform/core",
@@ -12455,16 +12455,16 @@
         },
         {
             "name": "phpunit/phpunit",
-            "version": "10.5.29",
+            "version": "10.5.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f"
+                "reference": "b15524febac0153876b4ba9aab3326c2ee94c897"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e9e80872b4e8064401788ee8a32d40b4455318f",
-                "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b15524febac0153876b4ba9aab3326c2ee94c897",
+                "reference": "b15524febac0153876b4ba9aab3326c2ee94c897",
                 "shasum": ""
             },
             "require": {
@@ -12485,7 +12485,7 @@
                 "phpunit/php-timer": "^6.0.0",
                 "sebastian/cli-parser": "^2.0.1",
                 "sebastian/code-unit": "^2.0.0",
-                "sebastian/comparator": "^5.0.1",
+                "sebastian/comparator": "^5.0.2",
                 "sebastian/diff": "^5.1.1",
                 "sebastian/environment": "^6.1.0",
                 "sebastian/exporter": "^5.1.2",
@@ -12536,7 +12536,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.29"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.30"
             },
             "funding": [
                 {
@@ -12552,7 +12552,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-30T11:08:00+00:00"
+            "time": "2024-08-13T06:09:37+00:00"
         },
         {
             "name": "react/cache",

From 84ee06652f22ce54583bf90dea3a2d1fb383fd04 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 13 Aug 2024 09:24:23 +0000
Subject: [PATCH 048/273] chore(deps): update dependency @sentry/vite-plugin to
 v2.22.1

---
 api/composer.json          |  2 +-
 api/composer.lock          | 16 ++++++++--------
 frontend/package-lock.json | 26 +++++++++++++-------------
 frontend/package.json      |  2 +-
 4 files changed, 23 insertions(+), 23 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 043515c006..87d25d707e 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -57,7 +57,7 @@
         "php-coveralls/php-coveralls": "2.7.0",
         "phpspec/prophecy-phpunit": "2.2",
         "phpstan/phpstan": "1.11.10",
-        "phpunit/phpunit": "10.5.30",
+        "phpunit/phpunit": "10.5.29",
         "rector/rector": "1.2.3",
         "spatie/phpunit-snapshot-assertions": "5.1.6",
         "symfony/browser-kit": "7.1.1",
diff --git a/api/composer.lock b/api/composer.lock
index d7afe7d279..c0f39ea91b 100644
--- a/api/composer.lock
+++ b/api/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": "cd02156609d00867762d608b96956509",
+    "content-hash": "3d2d3db80400cda01539c618ffd4919e",
     "packages": [
         {
             "name": "api-platform/core",
@@ -12455,16 +12455,16 @@
         },
         {
             "name": "phpunit/phpunit",
-            "version": "10.5.30",
+            "version": "10.5.29",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "b15524febac0153876b4ba9aab3326c2ee94c897"
+                "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b15524febac0153876b4ba9aab3326c2ee94c897",
-                "reference": "b15524febac0153876b4ba9aab3326c2ee94c897",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e9e80872b4e8064401788ee8a32d40b4455318f",
+                "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f",
                 "shasum": ""
             },
             "require": {
@@ -12485,7 +12485,7 @@
                 "phpunit/php-timer": "^6.0.0",
                 "sebastian/cli-parser": "^2.0.1",
                 "sebastian/code-unit": "^2.0.0",
-                "sebastian/comparator": "^5.0.2",
+                "sebastian/comparator": "^5.0.1",
                 "sebastian/diff": "^5.1.1",
                 "sebastian/environment": "^6.1.0",
                 "sebastian/exporter": "^5.1.2",
@@ -12536,7 +12536,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.30"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.29"
             },
             "funding": [
                 {
@@ -12552,7 +12552,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-08-13T06:09:37+00:00"
+            "time": "2024-07-30T11:08:00+00:00"
         },
         {
             "name": "react/cache",
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 9a36f6e104..c7204c931e 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -72,7 +72,7 @@
       },
       "devDependencies": {
         "@babel/eslint-parser": "7.25.1",
-        "@sentry/vite-plugin": "2.21.1",
+        "@sentry/vite-plugin": "2.22.1",
         "@testing-library/jest-dom": "6.4.8",
         "@testing-library/user-event": "14.5.2",
         "@testing-library/vue": "5.9.0",
@@ -3298,9 +3298,9 @@
       }
     },
     "node_modules/@sentry/babel-plugin-component-annotate": {
-      "version": "2.21.1",
-      "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.21.1.tgz",
-      "integrity": "sha512-u1L8gZ4He0WdyiIsohYkA/YOY1b6Oa5yIMRtfZZ9U5TiWYLgOfMWyb88X0GotZeghSbgxrse/yI4WeHnhAUQDQ==",
+      "version": "2.22.1",
+      "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.22.1.tgz",
+      "integrity": "sha512-rQEk8EeCIBQKivWNONllQhd/wGbfuK/WXJRM6TkjeikM3wrqJf4AmIBXoA6eg089DwBFzBaxGjjLWJNHKY440w==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -3326,15 +3326,15 @@
       }
     },
     "node_modules/@sentry/bundler-plugin-core": {
-      "version": "2.21.1",
-      "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.21.1.tgz",
-      "integrity": "sha512-F8FdL/bS8cy1SY1Gw0Mfo3ROTqlrq9Lvt5QGvhXi22dpVcDkWmoTWE2k+sMEnXOa8SdThMc/gyC8lMwHGd3kFQ==",
+      "version": "2.22.1",
+      "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.22.1.tgz",
+      "integrity": "sha512-RFbS57zfPvUBe4DL/pjt6BWCEyGFkk/n4gLNZQ9Cf2gRdUVW80AtAMZwrlEELrpW1D8kONy6/kvWf0leicHRMg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/core": "^7.18.5",
-        "@sentry/babel-plugin-component-annotate": "2.21.1",
-        "@sentry/cli": "^2.22.3",
+        "@sentry/babel-plugin-component-annotate": "2.22.1",
+        "@sentry/cli": "^2.33.1",
         "dotenv": "^16.3.1",
         "find-up": "^5.0.0",
         "glob": "^9.3.2",
@@ -3532,13 +3532,13 @@
       }
     },
     "node_modules/@sentry/vite-plugin": {
-      "version": "2.21.1",
-      "resolved": "https://registry.npmjs.org/@sentry/vite-plugin/-/vite-plugin-2.21.1.tgz",
-      "integrity": "sha512-i2PqeLafGBcSROnmr9mS0dL2/JBJji/4rJZ2U2A+tqtAhDAAaCUNalbn6xLp/hawLExt/wRuBj1J7j46sGDOaA==",
+      "version": "2.22.1",
+      "resolved": "https://registry.npmjs.org/@sentry/vite-plugin/-/vite-plugin-2.22.1.tgz",
+      "integrity": "sha512-TC+3RIcu0rnxaEPV8ZHjYlRHLx5M9eRDI2il1lFkSguTc0N89n7Tt/aDnFAwtaPG4yqPkhIMpxi7LfXx+YDJ1Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@sentry/bundler-plugin-core": "2.21.1",
+        "@sentry/bundler-plugin-core": "2.22.1",
         "unplugin": "1.0.1"
       },
       "engines": {
diff --git a/frontend/package.json b/frontend/package.json
index ac02663650..ea0b72eb36 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -84,7 +84,7 @@
   },
   "devDependencies": {
     "@babel/eslint-parser": "7.25.1",
-    "@sentry/vite-plugin": "2.21.1",
+    "@sentry/vite-plugin": "2.22.1",
     "@testing-library/jest-dom": "6.4.8",
     "@testing-library/user-event": "14.5.2",
     "@testing-library/vue": "5.9.0",

From 1ba6c0ed0ffaaa488a364f73d4fdf42e9bb8ab45 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 13 Aug 2024 19:27:01 +0000
Subject: [PATCH 049/273] fix(deps): update dependency phpmyadmin/sql-parser to
 v5.9.1

---
 api/composer.json |  2 +-
 api/composer.lock | 15 +++++++--------
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 87d25d707e..83fe388c47 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -21,7 +21,7 @@
         "lexik/jwt-authentication-bundle": "3.1.0",
         "nelmio/cors-bundle": "2.5.0",
         "phpdocumentor/reflection-docblock": "5.4.1",
-        "phpmyadmin/sql-parser": "5.9.0",
+        "phpmyadmin/sql-parser": "5.9.1",
         "ramsey/uuid": "4.7.6",
         "rize/uri-template": "0.3.6",
         "sentry/sentry-symfony": "5.0.1",
diff --git a/api/composer.lock b/api/composer.lock
index c0f39ea91b..227309d9b3 100644
--- a/api/composer.lock
+++ b/api/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": "3d2d3db80400cda01539c618ffd4919e",
+    "content-hash": "d7004981c95a3ce11f482651b011b5d4",
     "packages": [
         {
             "name": "api-platform/core",
@@ -3903,16 +3903,16 @@
         },
         {
             "name": "phpmyadmin/sql-parser",
-            "version": "5.9.0",
+            "version": "5.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpmyadmin/sql-parser.git",
-                "reference": "011fa18a4e55591fac6545a821921dd1d61c6984"
+                "reference": "169a9f11f1957ea36607c9b29eac1b48679f1ecc"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/011fa18a4e55591fac6545a821921dd1d61c6984",
-                "reference": "011fa18a4e55591fac6545a821921dd1d61c6984",
+                "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/169a9f11f1957ea36607c9b29eac1b48679f1ecc",
+                "reference": "169a9f11f1957ea36607c9b29eac1b48679f1ecc",
                 "shasum": ""
             },
             "require": {
@@ -3930,8 +3930,7 @@
                 "phpstan/extension-installer": "^1.1",
                 "phpstan/phpstan": "^1.9.12",
                 "phpstan/phpstan-phpunit": "^1.3.3",
-                "phpunit/php-code-coverage": "*",
-                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+                "phpunit/phpunit": "^8.5 || ^9.6",
                 "psalm/plugin-phpunit": "^0.16.1",
                 "vimeo/psalm": "^4.11",
                 "zumba/json-serializer": "~3.0.2"
@@ -3987,7 +3986,7 @@
                     "type": "other"
                 }
             ],
-            "time": "2024-01-20T20:34:02+00:00"
+            "time": "2024-08-13T19:01:01+00:00"
         },
         {
             "name": "phpstan/phpdoc-parser",

From 5523b83cabfbbbbf04d06cceaa8ae8c002159f64 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 13 Aug 2024 20:43:22 +0000
Subject: [PATCH 050/273] fix(deps): update dependency axios to v1.7.4
 [security]

---
 frontend/package-lock.json | 8 ++++----
 frontend/package.json      | 2 +-
 print/package-lock.json    | 8 ++++----
 print/package.json         | 2 +-
 4 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 9a805eb09a..367515e911 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -40,7 +40,7 @@
         "@zxcvbn-ts/language-fr": "3.0.2",
         "@zxcvbn-ts/language-it": "3.0.2",
         "assert": "2.1.0",
-        "axios": "1.7.3",
+        "axios": "1.7.4",
         "colorjs.io": "0.5.2",
         "comlink": "4.4.1",
         "dayjs": "1.11.12",
@@ -5284,9 +5284,9 @@
       }
     },
     "node_modules/axios": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz",
-      "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==",
+      "version": "1.7.4",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
+      "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
       "license": "MIT",
       "dependencies": {
         "follow-redirects": "^1.15.6",
diff --git a/frontend/package.json b/frontend/package.json
index 17ee24211d..b2e7af0532 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -52,7 +52,7 @@
     "@zxcvbn-ts/language-fr": "3.0.2",
     "@zxcvbn-ts/language-it": "3.0.2",
     "assert": "2.1.0",
-    "axios": "1.7.3",
+    "axios": "1.7.4",
     "colorjs.io": "0.5.2",
     "comlink": "4.4.1",
     "dayjs": "1.11.12",
diff --git a/print/package-lock.json b/print/package-lock.json
index e2491bae74..60c275975c 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -9,7 +9,7 @@
         "@jamescoyle/vue-icon": "0.1.2",
         "@mdi/js": "7.4.47",
         "@sentry/node": "8.25.0",
-        "axios": "1.7.3",
+        "axios": "1.7.4",
         "colorjs.io": "0.5.2",
         "dayjs": "1.11.12",
         "deepmerge": "4.3.1",
@@ -6058,9 +6058,9 @@
       }
     },
     "node_modules/axios": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz",
-      "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==",
+      "version": "1.7.4",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
+      "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
       "license": "MIT",
       "dependencies": {
         "follow-redirects": "^1.15.6",
diff --git a/print/package.json b/print/package.json
index 44f96425e4..3efad7b9a2 100644
--- a/print/package.json
+++ b/print/package.json
@@ -18,7 +18,7 @@
     "@jamescoyle/vue-icon": "0.1.2",
     "@mdi/js": "7.4.47",
     "@sentry/node": "8.25.0",
-    "axios": "1.7.3",
+    "axios": "1.7.4",
     "colorjs.io": "0.5.2",
     "dayjs": "1.11.12",
     "deepmerge": "4.3.1",

From 8c125b8066a687f2470a7e1878ba2257d7f84fd4 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 13 Aug 2024 20:43:27 +0000
Subject: [PATCH 051/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.29

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 96e39f8730..3c0d7e5a81 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.28
+    image: amazon/aws-cli:2.17.29
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From 9abed89b6e197ca320d527906242524817b211b8 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Wed, 14 Aug 2024 00:05:38 +0200
Subject: [PATCH 052/273] pdf: fix migrate eslint config

The . after the eslint command is important, else it lints nothing.
Explicitly exclude the generated files, ignoring it via the .gitignored files did not work.

Issue: #5282
---
 pdf/eslint.config.mjs | 6 +++---
 pdf/package.json      | 4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/pdf/eslint.config.mjs b/pdf/eslint.config.mjs
index 873d16ca72..f3a56433b8 100644
--- a/pdf/eslint.config.mjs
+++ b/pdf/eslint.config.mjs
@@ -22,6 +22,9 @@ export default [
     'plugin:prettier/recommended',
     '@vue/eslint-config-prettier'
   ),
+  {
+    ignores: ['dist/*.mjs'],
+  },
 
   includeIgnoreFile(gitignorePath),
 
@@ -36,9 +39,6 @@ export default [
         ...globals.jest,
       },
 
-      ecmaVersion: 5,
-      sourceType: 'commonjs',
-
       parserOptions: {
         parser: '@babel/eslint-parser',
       },
diff --git a/pdf/package.json b/pdf/package.json
index 375a846c09..8aa84fe518 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -10,10 +10,10 @@
     "preview": "vite preview",
     "test:unit": "vitest --coverage",
     "lint": "npm run lint:eslint && npm run lint:prettier",
-    "lint:eslint": "eslint --fix",
+    "lint:eslint": "eslint --fix .",
     "lint:prettier": "prettier --write --ignore-path .prettierignore **/*.{css,scss,json,mjs}",
     "lint:check": "npm run lint:check:eslint && npm run lint:check:prettier",
-    "lint:check:eslint": "eslint",
+    "lint:check:eslint": "eslint .",
     "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json,mjs}"
   },
   "dependencies": {

From c834fe1b1cdfcf65280eaab079da0bacb2ab1776 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Wed, 14 Aug 2024 00:19:47 +0200
Subject: [PATCH 053/273] e2e: fix migrate eslint config

The . after the eslint command is important, else it lints nothing.
Ignore the data directory explicitly.
Add eslint-parser and set languageOptions.ecmaVersion to 2022,
else the import.meta above leads to a lint error.

Issue: #5282
---
 e2e/eslint.config.mjs |   9 +
 e2e/package-lock.json | 750 ++++++++++++++++++++++++++++++++++++++++++
 e2e/package.json      |   5 +-
 3 files changed, 762 insertions(+), 2 deletions(-)

diff --git a/e2e/eslint.config.mjs b/e2e/eslint.config.mjs
index 0beb4576a1..da2ba4624b 100644
--- a/e2e/eslint.config.mjs
+++ b/e2e/eslint.config.mjs
@@ -20,6 +20,9 @@ export default [
     'plugin:cypress/recommended',
     'plugin:prettier/recommended'
   ),
+  {
+    ignores: ['data/'],
+  },
 
   includeIgnoreFile(gitignorePath),
 
@@ -29,6 +32,12 @@ export default [
         ...globals.node,
         ...globals.mocha,
       },
+
+      ecmaVersion: 2022,
+
+      parserOptions: {
+        parser: '@babel/eslint-parser',
+      },
     },
 
     rules: {
diff --git a/e2e/package-lock.json b/e2e/package-lock.json
index a3a65ff691..b09862c930 100644
--- a/e2e/package-lock.json
+++ b/e2e/package-lock.json
@@ -6,6 +6,7 @@
     "": {
       "name": "@ecamp3/e2e",
       "devDependencies": {
+        "@babel/eslint-parser": "7.25.1",
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.0",
@@ -18,6 +19,455 @@
         "prettier": "3.3.3"
       }
     },
+    "node_modules/@ampproject/remapping": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+      "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "peer": true,
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/code-frame": {
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
+      "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@babel/highlight": "^7.24.7",
+        "picocolors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/compat-data": {
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
+      "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/core": {
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz",
+      "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@ampproject/remapping": "^2.2.0",
+        "@babel/code-frame": "^7.24.7",
+        "@babel/generator": "^7.25.0",
+        "@babel/helper-compilation-targets": "^7.25.2",
+        "@babel/helper-module-transforms": "^7.25.2",
+        "@babel/helpers": "^7.25.0",
+        "@babel/parser": "^7.25.0",
+        "@babel/template": "^7.25.0",
+        "@babel/traverse": "^7.25.2",
+        "@babel/types": "^7.25.2",
+        "convert-source-map": "^2.0.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.3",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/babel"
+      }
+    },
+    "node_modules/@babel/core/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "dev": true,
+      "license": "ISC",
+      "peer": true,
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/@babel/eslint-parser": {
+      "version": "7.25.1",
+      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz",
+      "integrity": "sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
+        "eslint-visitor-keys": "^2.1.0",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": "^10.13.0 || ^12.13.0 || >=14.0.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.11.0",
+        "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0"
+      }
+    },
+    "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+      "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@babel/eslint-parser/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/@babel/generator": {
+      "version": "7.25.0",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
+      "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@babel/types": "^7.25.0",
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25",
+        "jsesc": "^2.5.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-compilation-targets": {
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz",
+      "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@babel/compat-data": "^7.25.2",
+        "@babel/helper-validator-option": "^7.24.8",
+        "browserslist": "^4.23.1",
+        "lru-cache": "^5.1.1",
+        "semver": "^6.3.1"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+      "dev": true,
+      "license": "ISC",
+      "peer": true,
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/@babel/helper-module-imports": {
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
+      "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-module-transforms": {
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz",
+      "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@babel/helper-module-imports": "^7.24.7",
+        "@babel/helper-simple-access": "^7.24.7",
+        "@babel/helper-validator-identifier": "^7.24.7",
+        "@babel/traverse": "^7.25.2"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
+      }
+    },
+    "node_modules/@babel/helper-simple-access": {
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz",
+      "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@babel/traverse": "^7.24.7",
+        "@babel/types": "^7.24.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz",
+      "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-identifier": {
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz",
+      "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-validator-option": {
+      "version": "7.24.8",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz",
+      "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helpers": {
+      "version": "7.25.0",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
+      "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@babel/template": "^7.25.0",
+        "@babel/types": "^7.25.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/highlight": {
+      "version": "7.24.7",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz",
+      "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@babel/helper-validator-identifier": "^7.24.7",
+        "chalk": "^2.4.2",
+        "js-tokens": "^4.0.0",
+        "picocolors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/highlight/node_modules/ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "color-convert": "^1.9.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@babel/highlight/node_modules/chalk": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@babel/highlight/node_modules/color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "color-name": "1.1.3"
+      }
+    },
+    "node_modules/@babel/highlight/node_modules/color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true
+    },
+    "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/@babel/highlight/node_modules/has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@babel/highlight/node_modules/supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "has-flag": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@babel/parser": {
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
+      "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@babel/types": "^7.25.2"
+      },
+      "bin": {
+        "parser": "bin/babel-parser.js"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@babel/template": {
+      "version": "7.25.0",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz",
+      "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.24.7",
+        "@babel/parser": "^7.25.0",
+        "@babel/types": "^7.25.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/traverse": {
+      "version": "7.25.3",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
+      "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.24.7",
+        "@babel/generator": "^7.25.0",
+        "@babel/parser": "^7.25.3",
+        "@babel/template": "^7.25.0",
+        "@babel/types": "^7.25.2",
+        "debug": "^4.3.1",
+        "globals": "^11.1.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/traverse/node_modules/globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/@babel/types": {
+      "version": "7.25.2",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
+      "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@babel/helper-string-parser": "^7.24.8",
+        "@babel/helper-validator-identifier": "^7.24.7",
+        "to-fast-properties": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/@colors/colors": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@@ -201,6 +651,98 @@
       "dev": true,
       "license": "BSD-3-Clause"
     },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+      "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@jridgewell/set-array": "^1.2.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/set-array": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.25",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
+      "version": "5.1.1-v1",
+      "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
+      "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "eslint-scope": "5.1.1"
+      }
+    },
+    "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^4.1.1"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
     "node_modules/@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -563,6 +1105,40 @@
         "concat-map": "0.0.1"
       }
     },
+    "node_modules/browserslist": {
+      "version": "4.23.3",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
+      "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "caniuse-lite": "^1.0.30001646",
+        "electron-to-chromium": "^1.5.4",
+        "node-releases": "^2.0.18",
+        "update-browserslist-db": "^1.1.0"
+      },
+      "bin": {
+        "browserslist": "cli.js"
+      },
+      "engines": {
+        "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+      }
+    },
     "node_modules/buffer": {
       "version": "5.7.1",
       "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
@@ -638,6 +1214,28 @@
         "node": ">=6"
       }
     },
+    "node_modules/caniuse-lite": {
+      "version": "1.0.30001651",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
+      "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "CC-BY-4.0",
+      "peer": true
+    },
     "node_modules/caseless": {
       "version": "0.12.0",
       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
@@ -824,6 +1422,14 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/convert-source-map": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+      "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true
+    },
     "node_modules/core-util-is": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
@@ -1001,6 +1607,14 @@
         "safer-buffer": "^2.1.0"
       }
     },
+    "node_modules/electron-to-chromium": {
+      "version": "1.5.6",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz",
+      "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==",
+      "dev": true,
+      "license": "ISC",
+      "peer": true
+    },
     "node_modules/emoji-regex": {
       "version": "8.0.0",
       "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -1055,6 +1669,17 @@
         "node": ">= 0.4"
       }
     },
+    "node_modules/escalade": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+      "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/escape-string-regexp": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -1664,6 +2289,17 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
     "node_modules/get-intrinsic": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
@@ -2115,6 +2751,14 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true
+    },
     "node_modules/js-yaml": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -2135,6 +2779,20 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/jsesc": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "bin": {
+        "jsesc": "bin/jsesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/json-buffer": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
@@ -2170,6 +2828,20 @@
       "dev": true,
       "license": "ISC"
     },
+    "node_modules/json5": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "bin": {
+        "json5": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/jsonfile": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
@@ -2367,6 +3039,17 @@
         "node": ">=8"
       }
     },
+    "node_modules/lru-cache": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+      "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+      "dev": true,
+      "license": "ISC",
+      "peer": true,
+      "dependencies": {
+        "yallist": "^3.0.2"
+      }
+    },
     "node_modules/merge-stream": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -2444,6 +3127,14 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/node-releases": {
+      "version": "2.0.18",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
+      "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true
+    },
     "node_modules/npm-run-path": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@@ -2626,6 +3317,14 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/picocolors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+      "dev": true,
+      "license": "ISC",
+      "peer": true
+    },
     "node_modules/pify": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
@@ -3154,6 +3853,17 @@
         "node": ">=14.14"
       }
     },
+    "node_modules/to-fast-properties": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+      "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+      "dev": true,
+      "license": "MIT",
+      "peer": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/tough-cookie": {
       "version": "4.1.4",
       "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
@@ -3261,6 +3971,38 @@
         "node": ">=8"
       }
     },
+    "node_modules/update-browserslist-db": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
+      "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "peer": true,
+      "dependencies": {
+        "escalade": "^3.1.2",
+        "picocolors": "^1.0.1"
+      },
+      "bin": {
+        "update-browserslist-db": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
+      }
+    },
     "node_modules/uri-js": {
       "version": "4.4.1",
       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -3358,6 +4100,14 @@
       "dev": true,
       "license": "ISC"
     },
+    "node_modules/yallist": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+      "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+      "dev": true,
+      "license": "ISC",
+      "peer": true
+    },
     "node_modules/yauzl": {
       "version": "2.10.0",
       "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
diff --git a/e2e/package.json b/e2e/package.json
index 0453ebfb04..4237afad20 100644
--- a/e2e/package.json
+++ b/e2e/package.json
@@ -5,13 +5,14 @@
     "cypress:open": "cypress open",
     "cypress:run": "cypress run",
     "lint": "npm run lint:eslint && npm run lint:prettier",
-    "lint:eslint": "eslint --fix",
+    "lint:eslint": "eslint --fix .",
     "lint:prettier": "prettier --write --ignore-path .gitignore **/*.{js,mjs,json,md}",
     "lint:check": "npm run lint:check:eslint && npm run lint:check:prettier",
-    "lint:check:eslint": "eslint",
+    "lint:check:eslint": "eslint .",
     "lint:check:prettier": "prettier --check --ignore-path .gitignore **/*.{js,mjs,json,md}"
   },
   "devDependencies": {
+    "@babel/eslint-parser": "7.25.1",
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
     "@eslint/js": "9.9.0",

From b258340d2820843ca58e0c27e456e0a54d50e8d7 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 14 Aug 2024 15:06:52 +0000
Subject: [PATCH 054/273] fix(deps): update dependency deepl-node to v1.13.1

---
 translation/package-lock.json | 16 ++++++++--------
 translation/package.json      |  2 +-
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/translation/package-lock.json b/translation/package-lock.json
index 64584f11bb..0318be9dcd 100644
--- a/translation/package-lock.json
+++ b/translation/package-lock.json
@@ -6,7 +6,7 @@
     "": {
       "name": "@ecamp3/translations",
       "dependencies": {
-        "deepl-node": "1.13.0"
+        "deepl-node": "1.13.1"
       }
     },
     "node_modules/@types/node": {
@@ -25,9 +25,9 @@
       "license": "MIT"
     },
     "node_modules/axios": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz",
-      "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==",
+      "version": "1.7.4",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
+      "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
       "license": "MIT",
       "dependencies": {
         "follow-redirects": "^1.15.6",
@@ -62,13 +62,13 @@
       }
     },
     "node_modules/deepl-node": {
-      "version": "1.13.0",
-      "resolved": "https://registry.npmjs.org/deepl-node/-/deepl-node-1.13.0.tgz",
-      "integrity": "sha512-pm8Al5B+/fRHiIKoreoSmv2RlXidF18+CznhtLILiYcj3EbxZpIhxWO8cgXCCsCTrUDMAbScIl8CuH3AqLPpGg==",
+      "version": "1.13.1",
+      "resolved": "https://registry.npmjs.org/deepl-node/-/deepl-node-1.13.1.tgz",
+      "integrity": "sha512-J1Y4+FYNxxTyqKiTM83Vub8Fm6/z6ZlV7yFKJ59Oi5dWXjdILQWd8UR4eiNF+pJtTBH5ObRv1cdUrRyUuN5VDg==",
       "license": "MIT",
       "dependencies": {
         "@types/node": ">=12.0",
-        "axios": "^1.6.4",
+        "axios": "^1.7.4",
         "form-data": "^3.0.0",
         "loglevel": ">=1.6.2"
       },
diff --git a/translation/package.json b/translation/package.json
index 0c89e42f73..b9eb1a5052 100755
--- a/translation/package.json
+++ b/translation/package.json
@@ -2,7 +2,7 @@
   "name": "@ecamp3/translations",
   "private": true,
   "dependencies": {
-    "deepl-node": "1.13.0"
+    "deepl-node": "1.13.1"
   },
   "scripts": {
     "sort-common-de": "node deepl.js ../common/locales/de.json ../common/locales/de.json",

From 11a1192ec5abdece0a9d27a6301c8b8c9c8efc9d Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 14 Aug 2024 18:29:53 +0000
Subject: [PATCH 055/273] chore(deps): update dependency @sentry/vite-plugin to
 v2.22.2

---
 frontend/package-lock.json | 24 ++++++++++++------------
 frontend/package.json      |  2 +-
 2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 9a805eb09a..03421e3078 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -72,7 +72,7 @@
       },
       "devDependencies": {
         "@babel/eslint-parser": "7.25.1",
-        "@sentry/vite-plugin": "2.22.1",
+        "@sentry/vite-plugin": "2.22.2",
         "@testing-library/jest-dom": "6.4.8",
         "@testing-library/user-event": "14.5.2",
         "@testing-library/vue": "5.9.0",
@@ -3298,9 +3298,9 @@
       }
     },
     "node_modules/@sentry/babel-plugin-component-annotate": {
-      "version": "2.22.1",
-      "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.22.1.tgz",
-      "integrity": "sha512-rQEk8EeCIBQKivWNONllQhd/wGbfuK/WXJRM6TkjeikM3wrqJf4AmIBXoA6eg089DwBFzBaxGjjLWJNHKY440w==",
+      "version": "2.22.2",
+      "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.22.2.tgz",
+      "integrity": "sha512-6kFAHGcs0npIC4HTt4ULs8uOfEucvMI7VW4hoyk17jhRaW8CbxzxfWCfIeRbDkE8pYwnARaq83tu025Hrk2zgA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -3326,14 +3326,14 @@
       }
     },
     "node_modules/@sentry/bundler-plugin-core": {
-      "version": "2.22.1",
-      "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.22.1.tgz",
-      "integrity": "sha512-RFbS57zfPvUBe4DL/pjt6BWCEyGFkk/n4gLNZQ9Cf2gRdUVW80AtAMZwrlEELrpW1D8kONy6/kvWf0leicHRMg==",
+      "version": "2.22.2",
+      "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.22.2.tgz",
+      "integrity": "sha512-TwEEW4FeEJ5Mamp4fGnktfVjzN77KAW0xFQsEPuxZtOAPG17zX/PGvdyRX/TE1jkZWhTzqUDIdgzqlNLjyEnUw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/core": "^7.18.5",
-        "@sentry/babel-plugin-component-annotate": "2.22.1",
+        "@sentry/babel-plugin-component-annotate": "2.22.2",
         "@sentry/cli": "^2.33.1",
         "dotenv": "^16.3.1",
         "find-up": "^5.0.0",
@@ -3532,13 +3532,13 @@
       }
     },
     "node_modules/@sentry/vite-plugin": {
-      "version": "2.22.1",
-      "resolved": "https://registry.npmjs.org/@sentry/vite-plugin/-/vite-plugin-2.22.1.tgz",
-      "integrity": "sha512-TC+3RIcu0rnxaEPV8ZHjYlRHLx5M9eRDI2il1lFkSguTc0N89n7Tt/aDnFAwtaPG4yqPkhIMpxi7LfXx+YDJ1Q==",
+      "version": "2.22.2",
+      "resolved": "https://registry.npmjs.org/@sentry/vite-plugin/-/vite-plugin-2.22.2.tgz",
+      "integrity": "sha512-LJSNTw75UJq77v2jCan8cRh0w1u6W30jxQsbqF7YyyhhfjPTyFUXYday9RDDe84qDEnspbZmgeTSWTvaTGsBRg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@sentry/bundler-plugin-core": "2.22.1",
+        "@sentry/bundler-plugin-core": "2.22.2",
         "unplugin": "1.0.1"
       },
       "engines": {
diff --git a/frontend/package.json b/frontend/package.json
index 17ee24211d..b9ec0a7be9 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -84,7 +84,7 @@
   },
   "devDependencies": {
     "@babel/eslint-parser": "7.25.1",
-    "@sentry/vite-plugin": "2.22.1",
+    "@sentry/vite-plugin": "2.22.2",
     "@testing-library/jest-dom": "6.4.8",
     "@testing-library/user-event": "14.5.2",
     "@testing-library/vue": "5.9.0",

From 4d789e534239d5a607c083a113fc161e87fa0171 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 14 Aug 2024 18:42:14 +0000
Subject: [PATCH 056/273] fix(deps): update sentry-javascript monorepo to
 v8.26.0

---
 frontend/package-lock.json | 114 ++++++++++++++++++-------------------
 frontend/package.json      |   4 +-
 print/package-lock.json    |  69 +++++++++++++---------
 print/package.json         |   2 +-
 4 files changed, 103 insertions(+), 86 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 367515e911..fa53d3e534 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -14,8 +14,8 @@
         "@react-pdf/pdfkit": "3.1.10",
         "@react-pdf/primitives": "3.1.1",
         "@react-pdf/render": "3.4.4",
-        "@sentry/browser": "8.25.0",
-        "@sentry/vue": "8.25.0",
+        "@sentry/browser": "8.26.0",
+        "@sentry/vue": "8.26.0",
         "@tiptap/extension-bold": "2.5.9",
         "@tiptap/extension-bubble-menu": "2.5.9",
         "@tiptap/extension-bullet-list": "2.5.9",
@@ -3240,58 +3240,58 @@
       ]
     },
     "node_modules/@sentry-internal/browser-utils": {
-      "version": "8.25.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.25.0.tgz",
-      "integrity": "sha512-nlWgp1lVhNQOTUplW85G3qm0fOIgAhJ/sl/31OIuScVrITYhYDF2bO+Zv/jQ8YsdUBAUXqY1tPT9wwPJklnPhw==",
+      "version": "8.26.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.26.0.tgz",
+      "integrity": "sha512-O2Tj+WK33/ZVp5STnz6ZL0OO+/Idk2KqsH0ITQkQmyZ2z0kdzWOeqK7s7q3/My6rB1GfPcyqPcBBv4dVv92FYQ==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/core": "8.25.0",
-        "@sentry/types": "8.25.0",
-        "@sentry/utils": "8.25.0"
+        "@sentry/core": "8.26.0",
+        "@sentry/types": "8.26.0",
+        "@sentry/utils": "8.26.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry-internal/feedback": {
-      "version": "8.25.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.25.0.tgz",
-      "integrity": "sha512-327I5XJAFrsgjc5qUKxZ9rff3WNCfGvf1fIii70LQ2YQhQgG4XHZILmkD06ETEyXb+H1tkrNQQEJ1/d4ai+q5g==",
+      "version": "8.26.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.26.0.tgz",
+      "integrity": "sha512-hQtw1gg8n6ERK1UH47F7ZI1zOsbhu0J2VX+TrnkpaQR2FgxDW1oe9Ja6oCV4CQKuR4w+1ZI/Kj4imSt0K33kEw==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/core": "8.25.0",
-        "@sentry/types": "8.25.0",
-        "@sentry/utils": "8.25.0"
+        "@sentry/core": "8.26.0",
+        "@sentry/types": "8.26.0",
+        "@sentry/utils": "8.26.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry-internal/replay": {
-      "version": "8.25.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.25.0.tgz",
-      "integrity": "sha512-3f7x8EYthyj157uV9V8vBjun+1gJnHhh2+i0qxYLhMGx7N2Fq0J3Bvvo1rosSg+fYh5HzPNZDufwIRdg5C/MQw==",
+      "version": "8.26.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.26.0.tgz",
+      "integrity": "sha512-JDY7W2bswlp5c3483lKP4kcb75fHNwGNfwD8x8FsY9xMjv7nxeXjLpR5cCEk1XqPq2+n6w4j7mJOXhEXGiUIKg==",
       "license": "MIT",
       "dependencies": {
-        "@sentry-internal/browser-utils": "8.25.0",
-        "@sentry/core": "8.25.0",
-        "@sentry/types": "8.25.0",
-        "@sentry/utils": "8.25.0"
+        "@sentry-internal/browser-utils": "8.26.0",
+        "@sentry/core": "8.26.0",
+        "@sentry/types": "8.26.0",
+        "@sentry/utils": "8.26.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry-internal/replay-canvas": {
-      "version": "8.25.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.25.0.tgz",
-      "integrity": "sha512-dPXlkAbkFL1DBum8rGTaHS+apJKaXEZJF9gLcBBKTruhTCizrugFLxajzIfVSiFVuwNKuJWa2fzhzbeQM0ee7w==",
+      "version": "8.26.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.26.0.tgz",
+      "integrity": "sha512-2CFQW6f9aJHIo/DqmqYa9PaYoLn1o36ywc0h8oyGrD4oPCbrnE5F++PmTdc71GBODu41HBn/yoCTLmxOD+UjpA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry-internal/replay": "8.25.0",
-        "@sentry/core": "8.25.0",
-        "@sentry/types": "8.25.0",
-        "@sentry/utils": "8.25.0"
+        "@sentry-internal/replay": "8.26.0",
+        "@sentry/core": "8.26.0",
+        "@sentry/types": "8.26.0",
+        "@sentry/utils": "8.26.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3308,18 +3308,18 @@
       }
     },
     "node_modules/@sentry/browser": {
-      "version": "8.25.0",
-      "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.25.0.tgz",
-      "integrity": "sha512-51bdVGXjyooqVGzaSGsnExqRTt9NvZ1zGFsxbbCSXi5UoEFN6zdMUz6jKYsL2K80eeELP2VKOVlobHlEzeJQfw==",
+      "version": "8.26.0",
+      "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.26.0.tgz",
+      "integrity": "sha512-e5s6eKlwLZWzTwQcBwqyAGZMMuQROW9Z677VzwkSyREWAIkKjfH2VBxHATnNGc0IVkNHjD7iH3ixo3C0rLKM3w==",
       "license": "MIT",
       "dependencies": {
-        "@sentry-internal/browser-utils": "8.25.0",
-        "@sentry-internal/feedback": "8.25.0",
-        "@sentry-internal/replay": "8.25.0",
-        "@sentry-internal/replay-canvas": "8.25.0",
-        "@sentry/core": "8.25.0",
-        "@sentry/types": "8.25.0",
-        "@sentry/utils": "8.25.0"
+        "@sentry-internal/browser-utils": "8.26.0",
+        "@sentry-internal/feedback": "8.26.0",
+        "@sentry-internal/replay": "8.26.0",
+        "@sentry-internal/replay-canvas": "8.26.0",
+        "@sentry/core": "8.26.0",
+        "@sentry/types": "8.26.0",
+        "@sentry/utils": "8.26.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3498,34 +3498,34 @@
       }
     },
     "node_modules/@sentry/core": {
-      "version": "8.25.0",
-      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.25.0.tgz",
-      "integrity": "sha512-7KtglbrW1eX4DOHkf6i4rRIExEf2CgtQ99qZ8gn5FUaAmNMg0rK7bb1yZMx0RZtp5G1TSz/S0jQQgxHWebaEig==",
+      "version": "8.26.0",
+      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.26.0.tgz",
+      "integrity": "sha512-g/tVmTZD4GNbLFf++hKJfBpcCAtduFEMLnbfa9iT/QEZjlmP+EzY+GsH9bafM5VsNe8DiOUp+kJKWtShzlVdBA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.25.0",
-        "@sentry/utils": "8.25.0"
+        "@sentry/types": "8.26.0",
+        "@sentry/utils": "8.26.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/types": {
-      "version": "8.25.0",
-      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.25.0.tgz",
-      "integrity": "sha512-ojim0gDcRhGJPguYrtms4FsprX4xZz3LGNk9Z0hwTbSVEdlhQIInsQ7CYcdM3sjUs+qT7kfpxTRZGUeZNRRJcA==",
+      "version": "8.26.0",
+      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.26.0.tgz",
+      "integrity": "sha512-zKmh6SWsJh630rpt7a9vP4Cm4m1C2gDTUqUiH565CajCL/4cePpNWYrNwalSqsOSL7B9OrczA1+n6a6XvND+ng==",
       "license": "MIT",
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/utils": {
-      "version": "8.25.0",
-      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.25.0.tgz",
-      "integrity": "sha512-mVlkV7S62ZZ2jM38/kOwWx2xoW8fUv2cjw2IwFKoAIPyLBh3mo1WJtvfdtN/rXGjQWZJBKW53EWaWnD00rkjyA==",
+      "version": "8.26.0",
+      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.26.0.tgz",
+      "integrity": "sha512-xvlPU9Hd2BlyT+FhWHGNwnxWqdVRk2AHnDtVcW4Ma0Ri5EwS+uy4Jeik5UkSv8C5RVb9VlxFmS8LN3I1MPJsLw==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.25.0"
+        "@sentry/types": "8.26.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3546,15 +3546,15 @@
       }
     },
     "node_modules/@sentry/vue": {
-      "version": "8.25.0",
-      "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-8.25.0.tgz",
-      "integrity": "sha512-ztT1pNYQY1sujIZT6JYKTNh7Ms3K4SIUeriWVBtU1p8mU6shhy2TA3Q2OsgXdkL/nEMok9zq+Ff3iT9XuyzbWA==",
+      "version": "8.26.0",
+      "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-8.26.0.tgz",
+      "integrity": "sha512-KLFHgINX4OWKPMZ/aHOojT8QjPLwoMPt99gbgtsGrRx9vjHOp1JLTGXCVl3VMs8Vl3Uo5jNKq0hE1Lqufy1luw==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/browser": "8.25.0",
-        "@sentry/core": "8.25.0",
-        "@sentry/types": "8.25.0",
-        "@sentry/utils": "8.25.0"
+        "@sentry/browser": "8.26.0",
+        "@sentry/core": "8.26.0",
+        "@sentry/types": "8.26.0",
+        "@sentry/utils": "8.26.0"
       },
       "engines": {
         "node": ">=14.18"
diff --git a/frontend/package.json b/frontend/package.json
index b2e7af0532..88b528c81e 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -26,8 +26,8 @@
     "@react-pdf/pdfkit": "3.1.10",
     "@react-pdf/primitives": "3.1.1",
     "@react-pdf/render": "3.4.4",
-    "@sentry/browser": "8.25.0",
-    "@sentry/vue": "8.25.0",
+    "@sentry/browser": "8.26.0",
+    "@sentry/vue": "8.26.0",
     "@tiptap/extension-bold": "2.5.9",
     "@tiptap/extension-bubble-menu": "2.5.9",
     "@tiptap/extension-bullet-list": "2.5.9",
diff --git a/print/package-lock.json b/print/package-lock.json
index 60c275975c..b85699a73b 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -8,7 +8,7 @@
       "dependencies": {
         "@jamescoyle/vue-icon": "0.1.2",
         "@mdi/js": "7.4.47",
-        "@sentry/node": "8.25.0",
+        "@sentry/node": "8.26.0",
         "axios": "1.7.4",
         "colorjs.io": "0.5.2",
         "dayjs": "1.11.12",
@@ -2645,6 +2645,22 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
+    "node_modules/@opentelemetry/instrumentation-fs": {
+      "version": "0.14.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.14.0.tgz",
+      "integrity": "sha512-pVc8P5AgliC1DphyyBUgsxXlm2XaPH4BpYvt7rAZDMIqUpRk8gs19SioABtKqqxvFzg5jPtgJfJsdxq0Y+maLw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/core": "^1.8.0",
+        "@opentelemetry/instrumentation": "^0.52.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
     "node_modules/@opentelemetry/instrumentation-graphql": {
       "version": "0.42.0",
       "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.42.0.tgz",
@@ -3831,22 +3847,22 @@
       "license": "MIT"
     },
     "node_modules/@sentry/core": {
-      "version": "8.25.0",
-      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.25.0.tgz",
-      "integrity": "sha512-7KtglbrW1eX4DOHkf6i4rRIExEf2CgtQ99qZ8gn5FUaAmNMg0rK7bb1yZMx0RZtp5G1TSz/S0jQQgxHWebaEig==",
+      "version": "8.26.0",
+      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.26.0.tgz",
+      "integrity": "sha512-g/tVmTZD4GNbLFf++hKJfBpcCAtduFEMLnbfa9iT/QEZjlmP+EzY+GsH9bafM5VsNe8DiOUp+kJKWtShzlVdBA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.25.0",
-        "@sentry/utils": "8.25.0"
+        "@sentry/types": "8.26.0",
+        "@sentry/utils": "8.26.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/node": {
-      "version": "8.25.0",
-      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.25.0.tgz",
-      "integrity": "sha512-KFeJpYU/7CKi/v8D72ztniA+QqH0yBv2wzEP0PUe3DWZ/Fwl0OQSVWNNuDfJBQUvk3NrytCH5A6klZjU0/rwlw==",
+      "version": "8.26.0",
+      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.26.0.tgz",
+      "integrity": "sha512-N9mNLzicnfGgsq6P10ckPdTzEFusjTC7gpqPopwq5eEMF7g798hH8CcE5o6FZ4iAAR3vWliAR/jgccdoMmJMpQ==",
       "license": "MIT",
       "dependencies": {
         "@opentelemetry/api": "^1.9.0",
@@ -3856,6 +3872,7 @@
         "@opentelemetry/instrumentation-connect": "0.38.0",
         "@opentelemetry/instrumentation-express": "0.41.1",
         "@opentelemetry/instrumentation-fastify": "0.38.0",
+        "@opentelemetry/instrumentation-fs": "0.14.0",
         "@opentelemetry/instrumentation-graphql": "0.42.0",
         "@opentelemetry/instrumentation-hapi": "0.40.0",
         "@opentelemetry/instrumentation-http": "0.52.1",
@@ -3872,10 +3889,10 @@
         "@opentelemetry/sdk-trace-base": "^1.25.1",
         "@opentelemetry/semantic-conventions": "^1.25.1",
         "@prisma/instrumentation": "5.17.0",
-        "@sentry/core": "8.25.0",
-        "@sentry/opentelemetry": "8.25.0",
-        "@sentry/types": "8.25.0",
-        "@sentry/utils": "8.25.0",
+        "@sentry/core": "8.26.0",
+        "@sentry/opentelemetry": "8.26.0",
+        "@sentry/types": "8.26.0",
+        "@sentry/utils": "8.26.0",
         "import-in-the-middle": "^1.11.0"
       },
       "engines": {
@@ -3886,14 +3903,14 @@
       }
     },
     "node_modules/@sentry/opentelemetry": {
-      "version": "8.25.0",
-      "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.25.0.tgz",
-      "integrity": "sha512-6g4TXwQMHtvmlu2i1OKqvFD2W2RTrGBxDtJ1tBQmqCfHKyiqQ37gy6AozuwrQ3po1KKbawaQGIFNEzb4wnSrfA==",
+      "version": "8.26.0",
+      "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.26.0.tgz",
+      "integrity": "sha512-HBDheM/+ysfIz8R1OH4bBIxdgD7ZbQkKLJAUXkdAbBcfbpK/CTtwcplbauF5wY7Q+GYvwL/ShuDwvXRfW+gFyQ==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/core": "8.25.0",
-        "@sentry/types": "8.25.0",
-        "@sentry/utils": "8.25.0"
+        "@sentry/core": "8.26.0",
+        "@sentry/types": "8.26.0",
+        "@sentry/utils": "8.26.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3907,21 +3924,21 @@
       }
     },
     "node_modules/@sentry/types": {
-      "version": "8.25.0",
-      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.25.0.tgz",
-      "integrity": "sha512-ojim0gDcRhGJPguYrtms4FsprX4xZz3LGNk9Z0hwTbSVEdlhQIInsQ7CYcdM3sjUs+qT7kfpxTRZGUeZNRRJcA==",
+      "version": "8.26.0",
+      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.26.0.tgz",
+      "integrity": "sha512-zKmh6SWsJh630rpt7a9vP4Cm4m1C2gDTUqUiH565CajCL/4cePpNWYrNwalSqsOSL7B9OrczA1+n6a6XvND+ng==",
       "license": "MIT",
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/utils": {
-      "version": "8.25.0",
-      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.25.0.tgz",
-      "integrity": "sha512-mVlkV7S62ZZ2jM38/kOwWx2xoW8fUv2cjw2IwFKoAIPyLBh3mo1WJtvfdtN/rXGjQWZJBKW53EWaWnD00rkjyA==",
+      "version": "8.26.0",
+      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.26.0.tgz",
+      "integrity": "sha512-xvlPU9Hd2BlyT+FhWHGNwnxWqdVRk2AHnDtVcW4Ma0Ri5EwS+uy4Jeik5UkSv8C5RVb9VlxFmS8LN3I1MPJsLw==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.25.0"
+        "@sentry/types": "8.26.0"
       },
       "engines": {
         "node": ">=14.18"
diff --git a/print/package.json b/print/package.json
index 3efad7b9a2..6676e378d7 100644
--- a/print/package.json
+++ b/print/package.json
@@ -17,7 +17,7 @@
   "dependencies": {
     "@jamescoyle/vue-icon": "0.1.2",
     "@mdi/js": "7.4.47",
-    "@sentry/node": "8.25.0",
+    "@sentry/node": "8.26.0",
     "axios": "1.7.4",
     "colorjs.io": "0.5.2",
     "dayjs": "1.11.12",

From e1d31d9a0557a3a428754bf3467d6b09bbca3abc Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 14 Aug 2024 18:59:04 +0000
Subject: [PATCH 057/273] fix(deps): update tiptap to v2.6.2

---
 frontend/package-lock.json | 198 ++++++++++++++++++-------------------
 frontend/package.json      |  34 +++----
 2 files changed, 116 insertions(+), 116 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index fa53d3e534..b87e28cc28 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -16,23 +16,23 @@
         "@react-pdf/render": "3.4.4",
         "@sentry/browser": "8.26.0",
         "@sentry/vue": "8.26.0",
-        "@tiptap/extension-bold": "2.5.9",
-        "@tiptap/extension-bubble-menu": "2.5.9",
-        "@tiptap/extension-bullet-list": "2.5.9",
-        "@tiptap/extension-document": "2.5.9",
-        "@tiptap/extension-hard-break": "2.5.9",
-        "@tiptap/extension-heading": "2.5.9",
-        "@tiptap/extension-history": "2.5.9",
-        "@tiptap/extension-italic": "2.5.9",
-        "@tiptap/extension-list-item": "2.5.9",
-        "@tiptap/extension-ordered-list": "2.5.9",
-        "@tiptap/extension-paragraph": "2.5.9",
-        "@tiptap/extension-placeholder": "2.5.9",
-        "@tiptap/extension-strike": "2.5.9",
-        "@tiptap/extension-text": "2.5.9",
-        "@tiptap/extension-underline": "2.5.9",
-        "@tiptap/pm": "2.5.9",
-        "@tiptap/vue-2": "2.5.9",
+        "@tiptap/extension-bold": "2.6.2",
+        "@tiptap/extension-bubble-menu": "2.6.2",
+        "@tiptap/extension-bullet-list": "2.6.2",
+        "@tiptap/extension-document": "2.6.2",
+        "@tiptap/extension-hard-break": "2.6.2",
+        "@tiptap/extension-heading": "2.6.2",
+        "@tiptap/extension-history": "2.6.2",
+        "@tiptap/extension-italic": "2.6.2",
+        "@tiptap/extension-list-item": "2.6.2",
+        "@tiptap/extension-ordered-list": "2.6.2",
+        "@tiptap/extension-paragraph": "2.6.2",
+        "@tiptap/extension-placeholder": "2.6.2",
+        "@tiptap/extension-strike": "2.6.2",
+        "@tiptap/extension-text": "2.6.2",
+        "@tiptap/extension-underline": "2.6.2",
+        "@tiptap/pm": "2.6.2",
+        "@tiptap/vue-2": "2.6.2",
         "@zxcvbn-ts/core": "3.0.4",
         "@zxcvbn-ts/language-common": "3.0.4",
         "@zxcvbn-ts/language-de": "3.0.2",
@@ -3917,9 +3917,9 @@
       }
     },
     "node_modules/@tiptap/core": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.5.9.tgz",
-      "integrity": "sha512-PPUR+0tbr+wX2G8RG4FEps4qhbnAPEeXK1FUtirLXSRh8vm+TDgafu3sms7wBc4fAyw9zTO/KNNZ90GBe04guA==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.6.2.tgz",
+      "integrity": "sha512-Okhh2QddIT86Dm1xBKhD8PLoIRJdlm4uqtvllrOp8Wdp5nkeuanaSFr0pU7BgqIxJ9GkZcoLgqUXj3Q++k5HIA==",
       "license": "MIT",
       "peer": true,
       "funding": {
@@ -3927,26 +3927,26 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/pm": "^2.5.9"
+        "@tiptap/pm": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-bold": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.5.9.tgz",
-      "integrity": "sha512-XUJdzFb31t0+bwiRquJf0btBpqOB3axQNHTKM9XADuL4S+Z6OBPj0I5rYINeElw/Q7muvdWrHWHh/ovNJA1/5A==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.6.2.tgz",
+      "integrity": "sha512-2nkCHFEMb06bLonmtcWmyMH5N0hFFKz4tXmvfvhmj4ll3MW6An0wMd8NgA4F4aNKWJqsQEBDzVox7ozrkjev4Q==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9"
+        "@tiptap/core": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-bubble-menu": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.5.9.tgz",
-      "integrity": "sha512-NddZ8Qn5dgPPa1W4yk0jdhF4tDBh0FwzBpbnDu2Xz/0TUHrA36ugB2CvR5xS1we4zUKckgpVqOqgdelrmqqFVg==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.6.2.tgz",
+      "integrity": "sha512-XUiqP4rveRAIF00Bp5IMocRnNDXZHqkM/CoiSB550BQmNQpIjni19X5yDod/h6AVAeAnKtkJbLrnPIojS9hhpw==",
       "license": "MIT",
       "dependencies": {
         "tippy.js": "^6.3.7"
@@ -3956,40 +3956,40 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9",
-        "@tiptap/pm": "^2.5.9"
+        "@tiptap/core": "^2.6.2",
+        "@tiptap/pm": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-bullet-list": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.5.9.tgz",
-      "integrity": "sha512-hJTv1x4omFgaID4LMRT5tOZb/VKmi8Kc6jsf4JNq4Grxd2sANmr9qpmKtBZvviK+XD5PpTXHvL+1c8C1SQtuHQ==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.6.2.tgz",
+      "integrity": "sha512-KM7QaDSJYdFkezx9MfmbusrFzEnQNvzux9sgBQlplQe9CXcmYhO9ZVSJ1CQ4lVFu8ooNJFnJzp+vIIh/2oq1yw==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9"
+        "@tiptap/core": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-document": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.5.9.tgz",
-      "integrity": "sha512-VdNZYDyCzC3W430UdeRXR9IZzPeODSbi5Xz/JEdV93THVp8AC9CrZR7/qjqdBTgbTB54VP8Yr6bKfCoIAF0BeQ==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.6.2.tgz",
+      "integrity": "sha512-VPfzL9P5F5fHW6+dNVV9AdZtnA51sXncASUdS55E1ZYaBEEe+BRAHEUfovrO7Djvzy9tzjn8IqGeOkAtwj1HHQ==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9"
+        "@tiptap/core": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-floating-menu": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.5.9.tgz",
-      "integrity": "sha512-MWJIQQT6e5MgqHny8neeH2Dx926nVPF7sv4p84nX4E0dnkRbEYUP8mCsWYhSUvxxIif6e+yY+4654f2Q9qTx1w==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.6.2.tgz",
+      "integrity": "sha512-u+Bj/Th7A+CwjZ59IuBMB0NLJX2XZrxzFdPnJuCswHipj09GG1rasauflJqXlLbDu1m/OJmAbCE9K+kERq5rDg==",
       "license": "MIT",
       "dependencies": {
         "tippy.js": "^6.3.7"
@@ -3999,159 +3999,159 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9",
-        "@tiptap/pm": "^2.5.9"
+        "@tiptap/core": "^2.6.2",
+        "@tiptap/pm": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-hard-break": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.5.9.tgz",
-      "integrity": "sha512-8hQ63SgZRG4BqHOeSfeaowG2eMr2beced018pOGbpHbE3XSYoISkMVuFz4Z8UEVR3W9dTbKo4wxNufSTducocQ==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.6.2.tgz",
+      "integrity": "sha512-DgBtB3wAwmyGctKz2loDwnYbmlvaB0JMWHaDuguWez085yCssTOCHtUndoJmw1nGwe0zMzyEsiFfDNTM1qnRLw==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9"
+        "@tiptap/core": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-heading": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.5.9.tgz",
-      "integrity": "sha512-HHowAlGUbFn1qvmY02ydM7qiPPMTGhAJn2A46enDRjNHW5UoqeMfkMpTEYaioOexyguRFSfDT3gpK68IHkQORQ==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.6.2.tgz",
+      "integrity": "sha512-jadSrUCnVi+DEcN5qSiH9FN72FmeQtgeLYNRyNwnbjtsYQ51XUQks2sVafOdCnbQr47Wro1l5rDkpsrRTvPs3Q==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9"
+        "@tiptap/core": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-history": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.5.9.tgz",
-      "integrity": "sha512-hGPtJgoZSwnVVqi/xipC2ET/9X2G2UI/Y+M3IYV1ZlM0tCYsv4spNi3uXlZqnXRwYcBXLk5u6e/dmsy5QFbL8g==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.6.2.tgz",
+      "integrity": "sha512-0QK/VMIYLwG3Srg7opm82iKkYuzuziFg7DYfx5fKcbYFZ2Sfh4SKaJfawIruCRW5jImyWYHkX5zGc9tRpY9qqw==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9",
-        "@tiptap/pm": "^2.5.9"
+        "@tiptap/core": "^2.6.2",
+        "@tiptap/pm": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-italic": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.5.9.tgz",
-      "integrity": "sha512-Bw+P139L4cy+B56zpUiRjP8BZSaAUl3JFMnr/FO+FG55QhCxFMXIc6XrC3vslNy5ef3B3zv4gCttS3ee8ByMiw==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.6.2.tgz",
+      "integrity": "sha512-YXmuelZRAQuRkMfYG1pk4iEfmpCisX3Zp7ZEzr/v6r5+kNs/lyDLjZ6r5QqsFC9tpHq6DvwcxsXaQrJG2qJNYQ==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9"
+        "@tiptap/core": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-list-item": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.5.9.tgz",
-      "integrity": "sha512-d9Eo+vBz74SMxP0r25aqiErV256C+lGz+VWMjOoqJa6xWLM1keYy12JtGQWJi8UDVZrDskJKCHq81A0uLt27WA==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.6.2.tgz",
+      "integrity": "sha512-7Spl6UxnxYosnwoSdkK9Sic8ujh5eaTefBs6dvrX22MhX+WrFoINvzP2CcReuXEt+vN15C8sRDji8ckYiOgqWA==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9"
+        "@tiptap/core": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-ordered-list": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.5.9.tgz",
-      "integrity": "sha512-9MsWpvVvzILuEOd/GdroF7RI7uDuE1M6at9rzsaVGvCPVHZBvu1XR3MSVK5OdiJbbJuPGttlzEFLaN/rQdCGFg==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.6.2.tgz",
+      "integrity": "sha512-LIsziq9ubQAlq6ttGVqZZl3U9e7cI8/OwQnCQpdYmVEB4QMgXUW7rj551oYVwHHLvGpeCBigsitxyeYLcLiBQg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9"
+        "@tiptap/core": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-paragraph": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.5.9.tgz",
-      "integrity": "sha512-HDXGiHTJ/V85dbDMjcFj4XfqyTQZqry6V21ucMzgBZYX60X3gIn7VpQTQnnRjvULSgtfOASSJP6BELc5TyiK0w==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.6.2.tgz",
+      "integrity": "sha512-l6kkQ+2sEzqupB2p9ssvPTv4u6IKKiN6Q5SljalH+wwKj7TTp/n7vpi6UXL3145UjqiaGyC91/VmB00SuJddFw==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9"
+        "@tiptap/core": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-placeholder": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.5.9.tgz",
-      "integrity": "sha512-ytKmlSiebtCBXoMPE2cup48DR0rQiekXhLKLkNyt7m8tSXkaRO4eDaFqCqPEXLeQXWdhwWEoPM6Cejaaa3ztkA==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.6.2.tgz",
+      "integrity": "sha512-Aou6lH456j5mpry36jyAdZzINxFx6fjqvmapmmORJKV+9J889P7RN7laRRsosWHez0Oxg4KuWL3FuDexx6ZJOQ==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9",
-        "@tiptap/pm": "^2.5.9"
+        "@tiptap/core": "^2.6.2",
+        "@tiptap/pm": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-strike": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.5.9.tgz",
-      "integrity": "sha512-QezkOZpczpl09S8lp5JL7sRkwREoPY16Y/lTvBcFKm3TZbVzYZZ/KwS0zpwK9HXTfXr8os4L9AGjQf0tHonX+w==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.6.2.tgz",
+      "integrity": "sha512-Mzq0PfDN0RTW7cPozSVrsKgmyuFOGfIYOcQx216ooKu77WqjGZw6YT2xDFtBSLQyMUYihKRXbNQ18X17KiZwUg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9"
+        "@tiptap/core": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-text": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.5.9.tgz",
-      "integrity": "sha512-W0pfiQUPsMkwaV5Y/wKW4cFsyXAIkyOFt7uN5u6LrZ/iW9KZ/IsDODPJDikWp0aeQnXzT9NNQULTpCjbHzzS6g==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.6.2.tgz",
+      "integrity": "sha512-/2kybVwTdTuz/LnuzD062D7XSeAM/8qkuSLU3QlrwPkWcDm8IlE7efJJiN4LEWqgnPxOx1tzPS2inWQqKai3pw==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9"
+        "@tiptap/core": "^2.6.2"
       }
     },
     "node_modules/@tiptap/extension-underline": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.5.9.tgz",
-      "integrity": "sha512-1gFBLzzphwJHsPLwUl9xosErEmtG2c2Sa2ajyS4uRjfl9X7+Li2O2WelZLHZGgTHWliE6ptA3m1MyXppHoitbg==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.6.2.tgz",
+      "integrity": "sha512-bwbOsd8TR6Wg41LUYfeaWfxYOgQlpt2c/m4I4HRYillTqS0gi4RNkmqapsBT402Z7O8x5YS0Tcq0JLG3TR3nFg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9"
+        "@tiptap/core": "^2.6.2"
       }
     },
     "node_modules/@tiptap/pm": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.5.9.tgz",
-      "integrity": "sha512-YSUaEQVtvZnGzGjif2Tl2o9utE+6tR2Djhz0EqFUcAUEVhOMk7UYUO+r/aPfcCRraIoKKuDQzyCpjKmJicjCUA==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.6.2.tgz",
+      "integrity": "sha512-bDz/DOsTcZ9YgFe2IuDP6M3w+sF1r41Ir8BK+NvSIW6YsILAPaxe3U21vUrq4pRfg5z69m/4UTsbTp95mg4BJQ==",
       "license": "MIT",
       "dependencies": {
         "prosemirror-changeset": "^2.2.1",
@@ -4179,13 +4179,13 @@
       }
     },
     "node_modules/@tiptap/vue-2": {
-      "version": "2.5.9",
-      "resolved": "https://registry.npmjs.org/@tiptap/vue-2/-/vue-2-2.5.9.tgz",
-      "integrity": "sha512-gqwwUfRy1WT9uHaZEpTWjEavLrsDfpjwzSQ/w1NjX/broyDMKc9WR/G2qlBCruYLBuypJSX9Z3nCMABD7Zhyaw==",
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/@tiptap/vue-2/-/vue-2-2.6.2.tgz",
+      "integrity": "sha512-Tc0gKLEhoLNB4oi+zbzbR5iJcfsoW7PSEV3KKK5xIssV7rXjCIHVojUAEOOys4JR7hpIlEZrMvOeit8MEd+7VQ==",
       "license": "MIT",
       "dependencies": {
-        "@tiptap/extension-bubble-menu": "^2.5.9",
-        "@tiptap/extension-floating-menu": "^2.5.9",
+        "@tiptap/extension-bubble-menu": "^2.6.2",
+        "@tiptap/extension-floating-menu": "^2.6.2",
         "vue-ts-types": "^1.6.0"
       },
       "funding": {
@@ -4193,8 +4193,8 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.5.9",
-        "@tiptap/pm": "^2.5.9",
+        "@tiptap/core": "^2.6.2",
+        "@tiptap/pm": "^2.6.2",
         "vue": "^2.6.0"
       }
     },
diff --git a/frontend/package.json b/frontend/package.json
index 88b528c81e..f5f719ad16 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -28,23 +28,23 @@
     "@react-pdf/render": "3.4.4",
     "@sentry/browser": "8.26.0",
     "@sentry/vue": "8.26.0",
-    "@tiptap/extension-bold": "2.5.9",
-    "@tiptap/extension-bubble-menu": "2.5.9",
-    "@tiptap/extension-bullet-list": "2.5.9",
-    "@tiptap/extension-document": "2.5.9",
-    "@tiptap/extension-hard-break": "2.5.9",
-    "@tiptap/extension-heading": "2.5.9",
-    "@tiptap/extension-history": "2.5.9",
-    "@tiptap/extension-italic": "2.5.9",
-    "@tiptap/extension-list-item": "2.5.9",
-    "@tiptap/extension-ordered-list": "2.5.9",
-    "@tiptap/extension-paragraph": "2.5.9",
-    "@tiptap/extension-placeholder": "2.5.9",
-    "@tiptap/extension-strike": "2.5.9",
-    "@tiptap/extension-text": "2.5.9",
-    "@tiptap/extension-underline": "2.5.9",
-    "@tiptap/pm": "2.5.9",
-    "@tiptap/vue-2": "2.5.9",
+    "@tiptap/extension-bold": "2.6.2",
+    "@tiptap/extension-bubble-menu": "2.6.2",
+    "@tiptap/extension-bullet-list": "2.6.2",
+    "@tiptap/extension-document": "2.6.2",
+    "@tiptap/extension-hard-break": "2.6.2",
+    "@tiptap/extension-heading": "2.6.2",
+    "@tiptap/extension-history": "2.6.2",
+    "@tiptap/extension-italic": "2.6.2",
+    "@tiptap/extension-list-item": "2.6.2",
+    "@tiptap/extension-ordered-list": "2.6.2",
+    "@tiptap/extension-paragraph": "2.6.2",
+    "@tiptap/extension-placeholder": "2.6.2",
+    "@tiptap/extension-strike": "2.6.2",
+    "@tiptap/extension-text": "2.6.2",
+    "@tiptap/extension-underline": "2.6.2",
+    "@tiptap/pm": "2.6.2",
+    "@tiptap/vue-2": "2.6.2",
     "@zxcvbn-ts/core": "3.0.4",
     "@zxcvbn-ts/language-common": "3.0.4",
     "@zxcvbn-ts/language-de": "3.0.2",

From 81047b0fe354a824e35a94703e58419f316b5b94 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 14 Aug 2024 19:18:01 +0000
Subject: [PATCH 058/273] fix(deps): update tiptap to v2.6.3

---
 frontend/package-lock.json | 198 ++++++++++++++++++-------------------
 frontend/package.json      |  34 +++----
 2 files changed, 116 insertions(+), 116 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 8c66458133..4a69ec1810 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -16,23 +16,23 @@
         "@react-pdf/render": "3.4.4",
         "@sentry/browser": "8.26.0",
         "@sentry/vue": "8.26.0",
-        "@tiptap/extension-bold": "2.6.2",
-        "@tiptap/extension-bubble-menu": "2.6.2",
-        "@tiptap/extension-bullet-list": "2.6.2",
-        "@tiptap/extension-document": "2.6.2",
-        "@tiptap/extension-hard-break": "2.6.2",
-        "@tiptap/extension-heading": "2.6.2",
-        "@tiptap/extension-history": "2.6.2",
-        "@tiptap/extension-italic": "2.6.2",
-        "@tiptap/extension-list-item": "2.6.2",
-        "@tiptap/extension-ordered-list": "2.6.2",
-        "@tiptap/extension-paragraph": "2.6.2",
-        "@tiptap/extension-placeholder": "2.6.2",
-        "@tiptap/extension-strike": "2.6.2",
-        "@tiptap/extension-text": "2.6.2",
-        "@tiptap/extension-underline": "2.6.2",
-        "@tiptap/pm": "2.6.2",
-        "@tiptap/vue-2": "2.6.2",
+        "@tiptap/extension-bold": "2.6.3",
+        "@tiptap/extension-bubble-menu": "2.6.3",
+        "@tiptap/extension-bullet-list": "2.6.3",
+        "@tiptap/extension-document": "2.6.3",
+        "@tiptap/extension-hard-break": "2.6.3",
+        "@tiptap/extension-heading": "2.6.3",
+        "@tiptap/extension-history": "2.6.3",
+        "@tiptap/extension-italic": "2.6.3",
+        "@tiptap/extension-list-item": "2.6.3",
+        "@tiptap/extension-ordered-list": "2.6.3",
+        "@tiptap/extension-paragraph": "2.6.3",
+        "@tiptap/extension-placeholder": "2.6.3",
+        "@tiptap/extension-strike": "2.6.3",
+        "@tiptap/extension-text": "2.6.3",
+        "@tiptap/extension-underline": "2.6.3",
+        "@tiptap/pm": "2.6.3",
+        "@tiptap/vue-2": "2.6.3",
         "@zxcvbn-ts/core": "3.0.4",
         "@zxcvbn-ts/language-common": "3.0.4",
         "@zxcvbn-ts/language-de": "3.0.2",
@@ -3917,9 +3917,9 @@
       }
     },
     "node_modules/@tiptap/core": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.6.2.tgz",
-      "integrity": "sha512-Okhh2QddIT86Dm1xBKhD8PLoIRJdlm4uqtvllrOp8Wdp5nkeuanaSFr0pU7BgqIxJ9GkZcoLgqUXj3Q++k5HIA==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.6.3.tgz",
+      "integrity": "sha512-QTFJRblUjQ0vBcL6IrEPo5gJti0FNx9ylACE1KVe45gxsOWqxbonLrDvlRQ8xNtvvDIgU6UK3CNCvNUXguU+wQ==",
       "license": "MIT",
       "peer": true,
       "funding": {
@@ -3927,26 +3927,26 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/pm": "^2.6.2"
+        "@tiptap/pm": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-bold": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.6.2.tgz",
-      "integrity": "sha512-2nkCHFEMb06bLonmtcWmyMH5N0hFFKz4tXmvfvhmj4ll3MW6An0wMd8NgA4F4aNKWJqsQEBDzVox7ozrkjev4Q==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.6.3.tgz",
+      "integrity": "sha512-o63OolSRw1IEgm6/IjKFp1NVNl1JESMuZCKGe52E77mevJmnuazFA1JGw0yG37rng4yYKyu3UhOeiU9icuB5QQ==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2"
+        "@tiptap/core": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-bubble-menu": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.6.2.tgz",
-      "integrity": "sha512-XUiqP4rveRAIF00Bp5IMocRnNDXZHqkM/CoiSB550BQmNQpIjni19X5yDod/h6AVAeAnKtkJbLrnPIojS9hhpw==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.6.3.tgz",
+      "integrity": "sha512-H2AUcXPPN56YklKP2LfLd22uBY7oSV0rWSguKxvH3wdsyLKtiDWgLu3MDBwYOBCrg6AgQJE5b3awWPJ6WjgybA==",
       "license": "MIT",
       "dependencies": {
         "tippy.js": "^6.3.7"
@@ -3956,40 +3956,40 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2",
-        "@tiptap/pm": "^2.6.2"
+        "@tiptap/core": "^2.6.3",
+        "@tiptap/pm": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-bullet-list": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.6.2.tgz",
-      "integrity": "sha512-KM7QaDSJYdFkezx9MfmbusrFzEnQNvzux9sgBQlplQe9CXcmYhO9ZVSJ1CQ4lVFu8ooNJFnJzp+vIIh/2oq1yw==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.6.3.tgz",
+      "integrity": "sha512-6xplyNrZpYarzwl5QHAwfE/gdMwXZ10rebGwPZW3HyX502Gtplp2GEaZ99dgHyV7cZstvkLcVwgS3w2tIGv/zw==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2"
+        "@tiptap/core": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-document": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.6.2.tgz",
-      "integrity": "sha512-VPfzL9P5F5fHW6+dNVV9AdZtnA51sXncASUdS55E1ZYaBEEe+BRAHEUfovrO7Djvzy9tzjn8IqGeOkAtwj1HHQ==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.6.3.tgz",
+      "integrity": "sha512-JbHV6tTNqGKgkmXQJJzD3emd2cW1XRtfqiogabepserWutRf74q4rq5owK6QcmO1U6QEwPY2UGIevmTRsinjEQ==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2"
+        "@tiptap/core": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-floating-menu": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.6.2.tgz",
-      "integrity": "sha512-u+Bj/Th7A+CwjZ59IuBMB0NLJX2XZrxzFdPnJuCswHipj09GG1rasauflJqXlLbDu1m/OJmAbCE9K+kERq5rDg==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.6.3.tgz",
+      "integrity": "sha512-GHu6xf4bb1nR9Ne38Nd8cpACwhSuE57F8ZzCFj7KvIyXnU7KZuxWuDkQR5JP2qzXutiQWyOzy0yXmNGlHWw8tQ==",
       "license": "MIT",
       "dependencies": {
         "tippy.js": "^6.3.7"
@@ -3999,159 +3999,159 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2",
-        "@tiptap/pm": "^2.6.2"
+        "@tiptap/core": "^2.6.3",
+        "@tiptap/pm": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-hard-break": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.6.2.tgz",
-      "integrity": "sha512-DgBtB3wAwmyGctKz2loDwnYbmlvaB0JMWHaDuguWez085yCssTOCHtUndoJmw1nGwe0zMzyEsiFfDNTM1qnRLw==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.6.3.tgz",
+      "integrity": "sha512-W7D2kccsEeHFF65FmZRuWvUso+eD7xQ+yA8VUh+g2PAzu3+lvIPHExj+r+TtgB9p/zgsXG4KyBIp5VSNmt1aqQ==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2"
+        "@tiptap/core": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-heading": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.6.2.tgz",
-      "integrity": "sha512-jadSrUCnVi+DEcN5qSiH9FN72FmeQtgeLYNRyNwnbjtsYQ51XUQks2sVafOdCnbQr47Wro1l5rDkpsrRTvPs3Q==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.6.3.tgz",
+      "integrity": "sha512-OuT2pAKj7UBOotOjZynwupvalL0dp8gHD411MCwPhzbVW5qGFadCiOp/WgSFMFVl+6uERHQiPfTBYIqYMNuBCQ==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2"
+        "@tiptap/core": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-history": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.6.2.tgz",
-      "integrity": "sha512-0QK/VMIYLwG3Srg7opm82iKkYuzuziFg7DYfx5fKcbYFZ2Sfh4SKaJfawIruCRW5jImyWYHkX5zGc9tRpY9qqw==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.6.3.tgz",
+      "integrity": "sha512-S//+Q/eLbnZklvYh9ujU3va5kImnPZWQ74bRgFatfoU3Je9sB3ppcfIj4fx/C6MO0RHSB/yCIVdtro7xYW7Yzg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2",
-        "@tiptap/pm": "^2.6.2"
+        "@tiptap/core": "^2.6.3",
+        "@tiptap/pm": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-italic": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.6.2.tgz",
-      "integrity": "sha512-YXmuelZRAQuRkMfYG1pk4iEfmpCisX3Zp7ZEzr/v6r5+kNs/lyDLjZ6r5QqsFC9tpHq6DvwcxsXaQrJG2qJNYQ==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.6.3.tgz",
+      "integrity": "sha512-/2tL3p0ysRYk7aQOSsMGsRZ22GERrZ097PO4vNq6adcJ01oucfK1yBWPwbjQHDiCZ9P2TOODbPEDwXEWHbIqbg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2"
+        "@tiptap/core": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-list-item": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.6.2.tgz",
-      "integrity": "sha512-7Spl6UxnxYosnwoSdkK9Sic8ujh5eaTefBs6dvrX22MhX+WrFoINvzP2CcReuXEt+vN15C8sRDji8ckYiOgqWA==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.6.3.tgz",
+      "integrity": "sha512-UF2rNRz833sIUqVd/+6rpTZrSEBB3QXORZj1JLIMukYQntFWUfZ0OExOTkNZ+Ne1h9Tp25PhddN9PeJuHhAHGg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2"
+        "@tiptap/core": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-ordered-list": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.6.2.tgz",
-      "integrity": "sha512-LIsziq9ubQAlq6ttGVqZZl3U9e7cI8/OwQnCQpdYmVEB4QMgXUW7rj551oYVwHHLvGpeCBigsitxyeYLcLiBQg==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.6.3.tgz",
+      "integrity": "sha512-8aS64tCQ5RZW4qbW631IHEVWkk+ZjVw9+6SKb895TD1Gwo4GTM+2RZGA5PFucw2ehb3sXgqqM2rAqRdHLg+EXA==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2"
+        "@tiptap/core": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-paragraph": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.6.2.tgz",
-      "integrity": "sha512-l6kkQ+2sEzqupB2p9ssvPTv4u6IKKiN6Q5SljalH+wwKj7TTp/n7vpi6UXL3145UjqiaGyC91/VmB00SuJddFw==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.6.3.tgz",
+      "integrity": "sha512-sYhIAzQX9NijRsCztiTk1zjYs1vnU1ycm0RD4cC7q8axytOfVza3JcKofTpKYekV5ZyiMVi4NR5gqrsnt0yZhA==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2"
+        "@tiptap/core": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-placeholder": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.6.2.tgz",
-      "integrity": "sha512-Aou6lH456j5mpry36jyAdZzINxFx6fjqvmapmmORJKV+9J889P7RN7laRRsosWHez0Oxg4KuWL3FuDexx6ZJOQ==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.6.3.tgz",
+      "integrity": "sha512-r7hXODa+/IKnC4CbrNn1QFzUpF/+Nvfp6aOLKZvmY3GYvB6oOTXTkt/JRHlu8XhKxRuw1dkzwUn16yzDiVb6yQ==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2",
-        "@tiptap/pm": "^2.6.2"
+        "@tiptap/core": "^2.6.3",
+        "@tiptap/pm": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-strike": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.6.2.tgz",
-      "integrity": "sha512-Mzq0PfDN0RTW7cPozSVrsKgmyuFOGfIYOcQx216ooKu77WqjGZw6YT2xDFtBSLQyMUYihKRXbNQ18X17KiZwUg==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.6.3.tgz",
+      "integrity": "sha512-UypFU+ttVgkJyPhZ/4OFSygFZpXjJ67lDKCRTgKyQV7tMZRrQI3hHSS+GyEe5xJnCVqDuE7ofFt4S7q+rGq2Cg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2"
+        "@tiptap/core": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-text": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.6.2.tgz",
-      "integrity": "sha512-/2kybVwTdTuz/LnuzD062D7XSeAM/8qkuSLU3QlrwPkWcDm8IlE7efJJiN4LEWqgnPxOx1tzPS2inWQqKai3pw==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.6.3.tgz",
+      "integrity": "sha512-N4nBDMcrZScN+c+KYTY258XrVQRmI5cyi8uk3gedRUw+FyGP+o6HFhYYqvKlJLovebhVWl8DNAXKQpC9BacBYw==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2"
+        "@tiptap/core": "^2.6.3"
       }
     },
     "node_modules/@tiptap/extension-underline": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.6.2.tgz",
-      "integrity": "sha512-bwbOsd8TR6Wg41LUYfeaWfxYOgQlpt2c/m4I4HRYillTqS0gi4RNkmqapsBT402Z7O8x5YS0Tcq0JLG3TR3nFg==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.6.3.tgz",
+      "integrity": "sha512-u0PyEVnSUPSNpmzneOoWPneovfm7IEw7HrbRhDQZnx44iuaFYV2GK55U3eekawnUmmu3r40Q2xDhN+6gt/kQkA==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2"
+        "@tiptap/core": "^2.6.3"
       }
     },
     "node_modules/@tiptap/pm": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.6.2.tgz",
-      "integrity": "sha512-bDz/DOsTcZ9YgFe2IuDP6M3w+sF1r41Ir8BK+NvSIW6YsILAPaxe3U21vUrq4pRfg5z69m/4UTsbTp95mg4BJQ==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.6.3.tgz",
+      "integrity": "sha512-PxLYNtDzpvDFuW26Bln8umJdJa5lUrkELUbk2QemgxDmkNzlQQIa/n/2YVbW2VeFL9jcLkFbwnpPumyJTlJx4g==",
       "license": "MIT",
       "dependencies": {
         "prosemirror-changeset": "^2.2.1",
@@ -4179,13 +4179,13 @@
       }
     },
     "node_modules/@tiptap/vue-2": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@tiptap/vue-2/-/vue-2-2.6.2.tgz",
-      "integrity": "sha512-Tc0gKLEhoLNB4oi+zbzbR5iJcfsoW7PSEV3KKK5xIssV7rXjCIHVojUAEOOys4JR7hpIlEZrMvOeit8MEd+7VQ==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@tiptap/vue-2/-/vue-2-2.6.3.tgz",
+      "integrity": "sha512-+X63Li01qfyM7dlF9sbuewXFIqqQSpguc0uzktk1Y+2xAqpJBk77iUUknwD3bhwQu3BLw55vlYIjlFXl01puAw==",
       "license": "MIT",
       "dependencies": {
-        "@tiptap/extension-bubble-menu": "^2.6.2",
-        "@tiptap/extension-floating-menu": "^2.6.2",
+        "@tiptap/extension-bubble-menu": "^2.6.3",
+        "@tiptap/extension-floating-menu": "^2.6.3",
         "vue-ts-types": "^1.6.0"
       },
       "funding": {
@@ -4193,8 +4193,8 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.2",
-        "@tiptap/pm": "^2.6.2",
+        "@tiptap/core": "^2.6.3",
+        "@tiptap/pm": "^2.6.3",
         "vue": "^2.6.0"
       }
     },
diff --git a/frontend/package.json b/frontend/package.json
index 0c405ae546..f889085769 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -28,23 +28,23 @@
     "@react-pdf/render": "3.4.4",
     "@sentry/browser": "8.26.0",
     "@sentry/vue": "8.26.0",
-    "@tiptap/extension-bold": "2.6.2",
-    "@tiptap/extension-bubble-menu": "2.6.2",
-    "@tiptap/extension-bullet-list": "2.6.2",
-    "@tiptap/extension-document": "2.6.2",
-    "@tiptap/extension-hard-break": "2.6.2",
-    "@tiptap/extension-heading": "2.6.2",
-    "@tiptap/extension-history": "2.6.2",
-    "@tiptap/extension-italic": "2.6.2",
-    "@tiptap/extension-list-item": "2.6.2",
-    "@tiptap/extension-ordered-list": "2.6.2",
-    "@tiptap/extension-paragraph": "2.6.2",
-    "@tiptap/extension-placeholder": "2.6.2",
-    "@tiptap/extension-strike": "2.6.2",
-    "@tiptap/extension-text": "2.6.2",
-    "@tiptap/extension-underline": "2.6.2",
-    "@tiptap/pm": "2.6.2",
-    "@tiptap/vue-2": "2.6.2",
+    "@tiptap/extension-bold": "2.6.3",
+    "@tiptap/extension-bubble-menu": "2.6.3",
+    "@tiptap/extension-bullet-list": "2.6.3",
+    "@tiptap/extension-document": "2.6.3",
+    "@tiptap/extension-hard-break": "2.6.3",
+    "@tiptap/extension-heading": "2.6.3",
+    "@tiptap/extension-history": "2.6.3",
+    "@tiptap/extension-italic": "2.6.3",
+    "@tiptap/extension-list-item": "2.6.3",
+    "@tiptap/extension-ordered-list": "2.6.3",
+    "@tiptap/extension-paragraph": "2.6.3",
+    "@tiptap/extension-placeholder": "2.6.3",
+    "@tiptap/extension-strike": "2.6.3",
+    "@tiptap/extension-text": "2.6.3",
+    "@tiptap/extension-underline": "2.6.3",
+    "@tiptap/pm": "2.6.3",
+    "@tiptap/vue-2": "2.6.3",
     "@zxcvbn-ts/core": "3.0.4",
     "@zxcvbn-ts/language-common": "3.0.4",
     "@zxcvbn-ts/language-de": "3.0.2",

From a88c33221f632499933829aff5f88c57573f25ee Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 15 Aug 2024 02:20:48 +0000
Subject: [PATCH 059/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.30

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 3c0d7e5a81..1bf8e57edf 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.29
+    image: amazon/aws-cli:2.17.30
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From 8365f69086a53074546df6fcb6130cb3d692998a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 15 Aug 2024 02:21:18 +0000
Subject: [PATCH 060/273] fix(deps): update dependency @pulumi/aws to v6.49.1

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index c56e9d0c7a..e97ba93b2d 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -6,7 +6,7 @@
         "": {
             "name": "ecamp-core",
             "dependencies": {
-                "@pulumi/aws": "6.49.0",
+                "@pulumi/aws": "6.49.1",
                 "@pulumi/awsx": "2.14.0",
                 "@pulumi/pulumi": "3.129.0"
             },
@@ -2016,9 +2016,9 @@
             "license": "BSD-3-Clause"
         },
         "node_modules/@pulumi/aws": {
-            "version": "6.49.0",
-            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.49.0.tgz",
-            "integrity": "sha512-Xj/rf0dmcykCxBtf1rNk6OWVSnCXDb5bl6T2/FIzmnDRETc/Tnhk5m7GsSmZe7a3l00IMbvodBre+FIxikimKg==",
+            "version": "6.49.1",
+            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.49.1.tgz",
+            "integrity": "sha512-4FPJNmZsVCcCVtsusGMTozR5PqzW0h3O4jJGJ6t2jGDJDtqAkEUMLMRlnNXX1QsoKbK4gtG5YwmG/24F3TjJuA==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@pulumi/pulumi": "^3.0.0",
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 040a4b5d01..2cd6a9d7bc 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -11,7 +11,7 @@
     },
     "dependencies": {
         "@pulumi/pulumi": "3.129.0",
-        "@pulumi/aws": "6.49.0",
+        "@pulumi/aws": "6.49.1",
         "@pulumi/awsx": "2.14.0"
     },
     "devDependencies": {

From 8b40c70d3c62afc6b22dcc3e7333409a4a7f0405 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 15 Aug 2024 10:03:59 +0000
Subject: [PATCH 061/273] chore(deps): update vue-minor-print-pdf to v3.4.38

---
 pdf/package-lock.json   | 139 +++++++++++++++++-------------------
 pdf/package.json        |  12 ++--
 print/package-lock.json | 151 +++++++++++++++++-----------------------
 print/package.json      |  12 ++--
 4 files changed, 138 insertions(+), 176 deletions(-)

diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index b8a7cd6325..5bed30cade 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -6,7 +6,7 @@
     "": {
       "name": "@ecamp3/client-pdf",
       "dependencies": {
-        "@vue/runtime-core": "3.4.37",
+        "@vue/runtime-core": "3.4.38",
         "html-entities": "2.5.2",
         "html-parse-stringify": "3.0.1"
       },
@@ -20,12 +20,12 @@
         "@vitejs/plugin-vue": "5.1.2",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/babel-preset-app": "5.0.8",
-        "@vue/compiler-dom": "3.4.37",
-        "@vue/compiler-sfc": "3.4.37",
+        "@vue/compiler-dom": "3.4.38",
+        "@vue/compiler-sfc": "3.4.38",
         "@vue/eslint-config-prettier": "9.0.0",
-        "@vue/runtime-dom": "3.4.37",
-        "@vue/server-renderer": "3.4.37",
-        "@vue/shared": "3.4.37",
+        "@vue/runtime-dom": "3.4.38",
+        "@vue/server-renderer": "3.4.38",
+        "@vue/shared": "3.4.38",
         "@vue/test-utils": "2.4.6",
         "css": "3.0.0",
         "dayjs": "1.11.12",
@@ -3615,42 +3615,42 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.37.tgz",
-      "integrity": "sha512-ZDDT/KiLKuCRXyzWecNzC5vTcubGz4LECAtfGPENpo0nrmqJHwuWtRLxk/Sb9RAKtR9iFflFycbkjkY+W/PZUQ==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.38.tgz",
+      "integrity": "sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.24.7",
-        "@vue/shared": "3.4.37",
-        "entities": "^5.0.0",
+        "@vue/shared": "3.4.38",
+        "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.37.tgz",
-      "integrity": "sha512-rIiSmL3YrntvgYV84rekAtU/xfogMUJIclUMeIKEtVBFngOL3IeZHhsH3UaFEgB5iFGpj6IW+8YuM/2Up+vVag==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.38.tgz",
+      "integrity": "sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.4.37",
-        "@vue/shared": "3.4.37"
+        "@vue/compiler-core": "3.4.38",
+        "@vue/shared": "3.4.38"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.37.tgz",
-      "integrity": "sha512-vCfetdas40Wk9aK/WWf8XcVESffsbNkBQwS5t13Y/PcfqKfIwJX2gF+82th6dOpnpbptNMlMjAny80li7TaCIg==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.38.tgz",
+      "integrity": "sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.24.7",
-        "@vue/compiler-core": "3.4.37",
-        "@vue/compiler-dom": "3.4.37",
-        "@vue/compiler-ssr": "3.4.37",
-        "@vue/shared": "3.4.37",
+        "@vue/compiler-core": "3.4.38",
+        "@vue/compiler-dom": "3.4.38",
+        "@vue/compiler-ssr": "3.4.38",
+        "@vue/shared": "3.4.38",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.10",
         "postcss": "^8.4.40",
@@ -3658,14 +3658,14 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.37.tgz",
-      "integrity": "sha512-TyAgYBWrHlFrt4qpdACh8e9Ms6C/AZQ6A6xLJaWrCL8GCX5DxMzxyeFAEMfU/VFr4tylHm+a2NpfJpcd7+20XA==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.38.tgz",
+      "integrity": "sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.4.37",
-        "@vue/shared": "3.4.37"
+        "@vue/compiler-dom": "3.4.38",
+        "@vue/shared": "3.4.38"
       }
     },
     "node_modules/@vue/eslint-config-prettier": {
@@ -3684,55 +3684,55 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.37.tgz",
-      "integrity": "sha512-UmdKXGx0BZ5kkxPqQr3PK3tElz6adTey4307NzZ3whZu19i5VavYal7u2FfOmAzlcDVgE8+X0HZ2LxLb/jgbYw==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.38.tgz",
+      "integrity": "sha512-4vl4wMMVniLsSYYeldAKzbk72+D3hUnkw9z8lDeJacTxAkXeDAP1uE9xr2+aKIN0ipOL8EG2GPouVTH6yF7Gnw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.4.37"
+        "@vue/shared": "3.4.38"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.37.tgz",
-      "integrity": "sha512-MNjrVoLV/sirHZoD7QAilU1Ifs7m/KJv4/84QVbE6nyAZGQNVOa1HGxaOzp9YqCG+GpLt1hNDC4RbH+KtanV7w==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.38.tgz",
+      "integrity": "sha512-21z3wA99EABtuf+O3IhdxP0iHgkBs1vuoCAsCKLVJPEjpVqvblwBnTj42vzHRlWDCyxu9ptDm7sI2ZMcWrQqlA==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.4.37",
-        "@vue/shared": "3.4.37"
+        "@vue/reactivity": "3.4.38",
+        "@vue/shared": "3.4.38"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.37.tgz",
-      "integrity": "sha512-Mg2EwgGZqtwKrqdL/FKMF2NEaOHuH+Ks9TQn3DHKyX//hQTYOun+7Tqp1eo0P4Ds+SjltZshOSRq6VsU0baaNg==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.38.tgz",
+      "integrity": "sha512-afZzmUreU7vKwKsV17H1NDThEEmdYI+GCAK/KY1U957Ig2NATPVjCROv61R19fjZNzMmiU03n79OMnXyJVN0UA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.4.37",
-        "@vue/runtime-core": "3.4.37",
-        "@vue/shared": "3.4.37",
+        "@vue/reactivity": "3.4.38",
+        "@vue/runtime-core": "3.4.38",
+        "@vue/shared": "3.4.38",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.37.tgz",
-      "integrity": "sha512-jZ5FAHDR2KBq2FsRUJW6GKDOAG9lUTX8aBEGq4Vf6B/35I9fPce66BornuwmqmKgfiSlecwuOb6oeoamYMohkg==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.38.tgz",
+      "integrity": "sha512-NggOTr82FbPEkkUvBm4fTGcwUY8UuTsnWC/L2YZBmvaQ4C4Jl/Ao4HHTB+l7WnFCt5M/dN3l0XLuyjzswGYVCA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.4.37",
-        "@vue/shared": "3.4.37"
+        "@vue/compiler-ssr": "3.4.38",
+        "@vue/shared": "3.4.38"
       },
       "peerDependencies": {
-        "vue": "3.4.37"
+        "vue": "3.4.38"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.37.tgz",
-      "integrity": "sha512-nIh8P2fc3DflG8+5Uw8PT/1i17ccFn0xxN/5oE9RfV5SVnd7G0XEFRwakrnNFE/jlS95fpGXDVG5zDETS26nmg==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.38.tgz",
+      "integrity": "sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -4574,9 +4574,9 @@
       "peer": true
     },
     "node_modules/entities": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz",
-      "integrity": "sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==",
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
       "dev": true,
       "license": "BSD-2-Clause",
       "engines": {
@@ -6609,19 +6609,6 @@
         "url": "https://github.com/inikulin/parse5?sponsor=1"
       }
     },
-    "node_modules/parse5/node_modules/entities": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=0.12"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
-      }
-    },
     "node_modules/path-exists": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -7971,18 +7958,18 @@
       }
     },
     "node_modules/vue": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.37.tgz",
-      "integrity": "sha512-3vXvNfkKTBsSJ7JP+LyR7GBuwQuckbWvuwAid3xbqK9ppsKt/DUvfqgZ48fgOLEfpy1IacL5f8QhUVl77RaI7A==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.38.tgz",
+      "integrity": "sha512-f0ZgN+mZ5KFgVv9wz0f4OgVKukoXtS3nwET4c2vLBGQR50aI8G0cqbFtLlX9Yiyg3LFGBitruPHt2PxwTduJEw==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
-        "@vue/compiler-dom": "3.4.37",
-        "@vue/compiler-sfc": "3.4.37",
-        "@vue/runtime-dom": "3.4.37",
-        "@vue/server-renderer": "3.4.37",
-        "@vue/shared": "3.4.37"
+        "@vue/compiler-dom": "3.4.38",
+        "@vue/compiler-sfc": "3.4.38",
+        "@vue/runtime-dom": "3.4.38",
+        "@vue/server-renderer": "3.4.38",
+        "@vue/shared": "3.4.38"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/pdf/package.json b/pdf/package.json
index 375a846c09..eec7083692 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -17,7 +17,7 @@
     "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json,mjs}"
   },
   "dependencies": {
-    "@vue/runtime-core": "3.4.37",
+    "@vue/runtime-core": "3.4.38",
     "html-entities": "2.5.2",
     "html-parse-stringify": "3.0.1"
   },
@@ -40,12 +40,12 @@
     "@vitejs/plugin-vue": "5.1.2",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/babel-preset-app": "5.0.8",
-    "@vue/compiler-dom": "3.4.37",
-    "@vue/compiler-sfc": "3.4.37",
+    "@vue/compiler-dom": "3.4.38",
+    "@vue/compiler-sfc": "3.4.38",
     "@vue/eslint-config-prettier": "9.0.0",
-    "@vue/runtime-dom": "3.4.37",
-    "@vue/server-renderer": "3.4.37",
-    "@vue/shared": "3.4.37",
+    "@vue/runtime-dom": "3.4.38",
+    "@vue/server-renderer": "3.4.38",
+    "@vue/shared": "3.4.38",
     "@vue/test-utils": "2.4.6",
     "css": "3.0.0",
     "dayjs": "1.11.12",
diff --git a/print/package-lock.json b/print/package-lock.json
index b85699a73b..812e56b100 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -28,11 +28,11 @@
         "@tailwindcss/typography": "0.5.14",
         "@typescript-eslint/eslint-plugin": "7.18.0",
         "@vitest/coverage-v8": "2.0.5",
-        "@vue/compiler-dom": "3.4.37",
-        "@vue/compiler-sfc": "3.4.37",
-        "@vue/runtime-dom": "3.4.37",
-        "@vue/server-renderer": "3.4.37",
-        "@vue/shared": "3.4.37",
+        "@vue/compiler-dom": "3.4.38",
+        "@vue/compiler-sfc": "3.4.38",
+        "@vue/runtime-dom": "3.4.38",
+        "@vue/server-renderer": "3.4.38",
+        "@vue/shared": "3.4.38",
         "@vue/test-utils": "2.4.6",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
@@ -45,7 +45,7 @@
         "sass": "1.69.4",
         "vite-svg-loader": "5.1.0",
         "vitest": "2.0.5",
-        "vue": "3.4.37"
+        "vue": "3.4.38"
       }
     },
     "node_modules/@alloc/quick-lru": {
@@ -5197,14 +5197,14 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.37.tgz",
-      "integrity": "sha512-ZDDT/KiLKuCRXyzWecNzC5vTcubGz4LECAtfGPENpo0nrmqJHwuWtRLxk/Sb9RAKtR9iFflFycbkjkY+W/PZUQ==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.38.tgz",
+      "integrity": "sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.24.7",
-        "@vue/shared": "3.4.37",
-        "entities": "^5.0.0",
+        "@vue/shared": "3.4.38",
+        "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
@@ -5216,26 +5216,26 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.37.tgz",
-      "integrity": "sha512-rIiSmL3YrntvgYV84rekAtU/xfogMUJIclUMeIKEtVBFngOL3IeZHhsH3UaFEgB5iFGpj6IW+8YuM/2Up+vVag==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.38.tgz",
+      "integrity": "sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.4.37",
-        "@vue/shared": "3.4.37"
+        "@vue/compiler-core": "3.4.38",
+        "@vue/shared": "3.4.38"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.37.tgz",
-      "integrity": "sha512-vCfetdas40Wk9aK/WWf8XcVESffsbNkBQwS5t13Y/PcfqKfIwJX2gF+82th6dOpnpbptNMlMjAny80li7TaCIg==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.38.tgz",
+      "integrity": "sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.24.7",
-        "@vue/compiler-core": "3.4.37",
-        "@vue/compiler-dom": "3.4.37",
-        "@vue/compiler-ssr": "3.4.37",
-        "@vue/shared": "3.4.37",
+        "@vue/compiler-core": "3.4.38",
+        "@vue/compiler-dom": "3.4.38",
+        "@vue/compiler-ssr": "3.4.38",
+        "@vue/shared": "3.4.38",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.10",
         "postcss": "^8.4.40",
@@ -5249,13 +5249,13 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.37.tgz",
-      "integrity": "sha512-TyAgYBWrHlFrt4qpdACh8e9Ms6C/AZQ6A6xLJaWrCL8GCX5DxMzxyeFAEMfU/VFr4tylHm+a2NpfJpcd7+20XA==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.38.tgz",
+      "integrity": "sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.4.37",
-        "@vue/shared": "3.4.37"
+        "@vue/compiler-dom": "3.4.38",
+        "@vue/shared": "3.4.38"
       }
     },
     "node_modules/@vue/devtools-api": {
@@ -5325,53 +5325,53 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.37.tgz",
-      "integrity": "sha512-UmdKXGx0BZ5kkxPqQr3PK3tElz6adTey4307NzZ3whZu19i5VavYal7u2FfOmAzlcDVgE8+X0HZ2LxLb/jgbYw==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.38.tgz",
+      "integrity": "sha512-4vl4wMMVniLsSYYeldAKzbk72+D3hUnkw9z8lDeJacTxAkXeDAP1uE9xr2+aKIN0ipOL8EG2GPouVTH6yF7Gnw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.4.37"
+        "@vue/shared": "3.4.38"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.37.tgz",
-      "integrity": "sha512-MNjrVoLV/sirHZoD7QAilU1Ifs7m/KJv4/84QVbE6nyAZGQNVOa1HGxaOzp9YqCG+GpLt1hNDC4RbH+KtanV7w==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.38.tgz",
+      "integrity": "sha512-21z3wA99EABtuf+O3IhdxP0iHgkBs1vuoCAsCKLVJPEjpVqvblwBnTj42vzHRlWDCyxu9ptDm7sI2ZMcWrQqlA==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.4.37",
-        "@vue/shared": "3.4.37"
+        "@vue/reactivity": "3.4.38",
+        "@vue/shared": "3.4.38"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.37.tgz",
-      "integrity": "sha512-Mg2EwgGZqtwKrqdL/FKMF2NEaOHuH+Ks9TQn3DHKyX//hQTYOun+7Tqp1eo0P4Ds+SjltZshOSRq6VsU0baaNg==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.38.tgz",
+      "integrity": "sha512-afZzmUreU7vKwKsV17H1NDThEEmdYI+GCAK/KY1U957Ig2NATPVjCROv61R19fjZNzMmiU03n79OMnXyJVN0UA==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.4.37",
-        "@vue/runtime-core": "3.4.37",
-        "@vue/shared": "3.4.37",
+        "@vue/reactivity": "3.4.38",
+        "@vue/runtime-core": "3.4.38",
+        "@vue/shared": "3.4.38",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.37.tgz",
-      "integrity": "sha512-jZ5FAHDR2KBq2FsRUJW6GKDOAG9lUTX8aBEGq4Vf6B/35I9fPce66BornuwmqmKgfiSlecwuOb6oeoamYMohkg==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.38.tgz",
+      "integrity": "sha512-NggOTr82FbPEkkUvBm4fTGcwUY8UuTsnWC/L2YZBmvaQ4C4Jl/Ao4HHTB+l7WnFCt5M/dN3l0XLuyjzswGYVCA==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.4.37",
-        "@vue/shared": "3.4.37"
+        "@vue/compiler-ssr": "3.4.38",
+        "@vue/shared": "3.4.38"
       },
       "peerDependencies": {
-        "vue": "3.4.37"
+        "vue": "3.4.38"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.37.tgz",
-      "integrity": "sha512-nIh8P2fc3DflG8+5Uw8PT/1i17ccFn0xxN/5oE9RfV5SVnd7G0XEFRwakrnNFE/jlS95fpGXDVG5zDETS26nmg==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.38.tgz",
+      "integrity": "sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -7653,19 +7653,6 @@
         "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
       }
     },
-    "node_modules/dom-serializer/node_modules/entities": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=0.12"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
-      }
-    },
     "node_modules/domelementtype": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
@@ -7849,9 +7836,9 @@
       }
     },
     "node_modules/entities": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz",
-      "integrity": "sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==",
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
       "license": "BSD-2-Clause",
       "engines": {
         "node": ">=0.12"
@@ -12736,18 +12723,6 @@
         "url": "https://github.com/inikulin/parse5?sponsor=1"
       }
     },
-    "node_modules/parse5/node_modules/entities": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=0.12"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
-      }
-    },
     "node_modules/parseurl": {
       "version": "1.3.3",
       "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -17913,16 +17888,16 @@
       "license": "MIT"
     },
     "node_modules/vue": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.37.tgz",
-      "integrity": "sha512-3vXvNfkKTBsSJ7JP+LyR7GBuwQuckbWvuwAid3xbqK9ppsKt/DUvfqgZ48fgOLEfpy1IacL5f8QhUVl77RaI7A==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.38.tgz",
+      "integrity": "sha512-f0ZgN+mZ5KFgVv9wz0f4OgVKukoXtS3nwET4c2vLBGQR50aI8G0cqbFtLlX9Yiyg3LFGBitruPHt2PxwTduJEw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.4.37",
-        "@vue/compiler-sfc": "3.4.37",
-        "@vue/runtime-dom": "3.4.37",
-        "@vue/server-renderer": "3.4.37",
-        "@vue/shared": "3.4.37"
+        "@vue/compiler-dom": "3.4.38",
+        "@vue/compiler-sfc": "3.4.38",
+        "@vue/runtime-dom": "3.4.38",
+        "@vue/server-renderer": "3.4.38",
+        "@vue/shared": "3.4.38"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/print/package.json b/print/package.json
index 6676e378d7..fd91c499b7 100644
--- a/print/package.json
+++ b/print/package.json
@@ -37,11 +37,11 @@
     "@tailwindcss/typography": "0.5.14",
     "@typescript-eslint/eslint-plugin": "7.18.0",
     "@vitest/coverage-v8": "2.0.5",
-    "@vue/compiler-dom": "3.4.37",
-    "@vue/compiler-sfc": "3.4.37",
-    "@vue/runtime-dom": "3.4.37",
-    "@vue/server-renderer": "3.4.37",
-    "@vue/shared": "3.4.37",
+    "@vue/compiler-dom": "3.4.38",
+    "@vue/compiler-sfc": "3.4.38",
+    "@vue/runtime-dom": "3.4.38",
+    "@vue/server-renderer": "3.4.38",
+    "@vue/shared": "3.4.38",
     "@vue/test-utils": "2.4.6",
     "eslint": "8.57.0",
     "eslint-config-prettier": "9.1.0",
@@ -54,7 +54,7 @@
     "sass": "1.69.4",
     "vitest": "2.0.5",
     "vite-svg-loader": "5.1.0",
-    "vue": "3.4.37"
+    "vue": "3.4.38"
   },
   "eslintConfig": {
     "root": true,

From 642fe914ba5028f454e86c0e59ef16fdc819ab2e Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 15 Aug 2024 10:04:11 +0000
Subject: [PATCH 062/273] fix(deps): update tiptap to v2.6.4

---
 frontend/package-lock.json | 198 ++++++++++++++++++-------------------
 frontend/package.json      |  34 +++----
 2 files changed, 116 insertions(+), 116 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 4a69ec1810..a464bc05a8 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -16,23 +16,23 @@
         "@react-pdf/render": "3.4.4",
         "@sentry/browser": "8.26.0",
         "@sentry/vue": "8.26.0",
-        "@tiptap/extension-bold": "2.6.3",
-        "@tiptap/extension-bubble-menu": "2.6.3",
-        "@tiptap/extension-bullet-list": "2.6.3",
-        "@tiptap/extension-document": "2.6.3",
-        "@tiptap/extension-hard-break": "2.6.3",
-        "@tiptap/extension-heading": "2.6.3",
-        "@tiptap/extension-history": "2.6.3",
-        "@tiptap/extension-italic": "2.6.3",
-        "@tiptap/extension-list-item": "2.6.3",
-        "@tiptap/extension-ordered-list": "2.6.3",
-        "@tiptap/extension-paragraph": "2.6.3",
-        "@tiptap/extension-placeholder": "2.6.3",
-        "@tiptap/extension-strike": "2.6.3",
-        "@tiptap/extension-text": "2.6.3",
-        "@tiptap/extension-underline": "2.6.3",
-        "@tiptap/pm": "2.6.3",
-        "@tiptap/vue-2": "2.6.3",
+        "@tiptap/extension-bold": "2.6.4",
+        "@tiptap/extension-bubble-menu": "2.6.4",
+        "@tiptap/extension-bullet-list": "2.6.4",
+        "@tiptap/extension-document": "2.6.4",
+        "@tiptap/extension-hard-break": "2.6.4",
+        "@tiptap/extension-heading": "2.6.4",
+        "@tiptap/extension-history": "2.6.4",
+        "@tiptap/extension-italic": "2.6.4",
+        "@tiptap/extension-list-item": "2.6.4",
+        "@tiptap/extension-ordered-list": "2.6.4",
+        "@tiptap/extension-paragraph": "2.6.4",
+        "@tiptap/extension-placeholder": "2.6.4",
+        "@tiptap/extension-strike": "2.6.4",
+        "@tiptap/extension-text": "2.6.4",
+        "@tiptap/extension-underline": "2.6.4",
+        "@tiptap/pm": "2.6.4",
+        "@tiptap/vue-2": "2.6.4",
         "@zxcvbn-ts/core": "3.0.4",
         "@zxcvbn-ts/language-common": "3.0.4",
         "@zxcvbn-ts/language-de": "3.0.2",
@@ -3917,9 +3917,9 @@
       }
     },
     "node_modules/@tiptap/core": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.6.3.tgz",
-      "integrity": "sha512-QTFJRblUjQ0vBcL6IrEPo5gJti0FNx9ylACE1KVe45gxsOWqxbonLrDvlRQ8xNtvvDIgU6UK3CNCvNUXguU+wQ==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.6.4.tgz",
+      "integrity": "sha512-lv+JyBI+5C6C7BMLYg2bloB00HvAZkcvgO3CzmFia28Vtt1P9yhS44elvBemhUf7IP7Hu12FUzDWY+2GQqiqkw==",
       "license": "MIT",
       "peer": true,
       "funding": {
@@ -3927,26 +3927,26 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/pm": "^2.6.3"
+        "@tiptap/pm": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-bold": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.6.3.tgz",
-      "integrity": "sha512-o63OolSRw1IEgm6/IjKFp1NVNl1JESMuZCKGe52E77mevJmnuazFA1JGw0yG37rng4yYKyu3UhOeiU9icuB5QQ==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.6.4.tgz",
+      "integrity": "sha512-DIKUiO2aqO9D3dAQngBacWk/vYwDY13+q3t5dlawRTCIHxgV571vGb+YbcLswbWPQjOziIBc5QgwUVZLjA8OkA==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3"
+        "@tiptap/core": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-bubble-menu": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.6.3.tgz",
-      "integrity": "sha512-H2AUcXPPN56YklKP2LfLd22uBY7oSV0rWSguKxvH3wdsyLKtiDWgLu3MDBwYOBCrg6AgQJE5b3awWPJ6WjgybA==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.6.4.tgz",
+      "integrity": "sha512-rtqV6d4qfoTBcXdiYYMpFi7cRhraVaLiGOrGCsHX0mNr4imDbwxVsge279X7IzyGhTvn+kprTTQG57s67Te5aA==",
       "license": "MIT",
       "dependencies": {
         "tippy.js": "^6.3.7"
@@ -3956,40 +3956,40 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3",
-        "@tiptap/pm": "^2.6.3"
+        "@tiptap/core": "^2.6.4",
+        "@tiptap/pm": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-bullet-list": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.6.3.tgz",
-      "integrity": "sha512-6xplyNrZpYarzwl5QHAwfE/gdMwXZ10rebGwPZW3HyX502Gtplp2GEaZ99dgHyV7cZstvkLcVwgS3w2tIGv/zw==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.6.4.tgz",
+      "integrity": "sha512-SsEqWNvbcLjgPYQXWT+gm8Mdtd6SnM9kr5xdfOvfe9W1RCYi7U7SQjaYGLGQXuy3E8NDugNiG+ss2POMj4RaUQ==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3"
+        "@tiptap/core": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-document": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.6.3.tgz",
-      "integrity": "sha512-JbHV6tTNqGKgkmXQJJzD3emd2cW1XRtfqiogabepserWutRf74q4rq5owK6QcmO1U6QEwPY2UGIevmTRsinjEQ==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.6.4.tgz",
+      "integrity": "sha512-fEQzou6J/w7GWiMqxxiwX2TEB6hgjBsImkHCxU05a4IOnIkzC8C9pV+NWa8u1LGvbERmVPBQqWYJG6phDhtYkg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3"
+        "@tiptap/core": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-floating-menu": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.6.3.tgz",
-      "integrity": "sha512-GHu6xf4bb1nR9Ne38Nd8cpACwhSuE57F8ZzCFj7KvIyXnU7KZuxWuDkQR5JP2qzXutiQWyOzy0yXmNGlHWw8tQ==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.6.4.tgz",
+      "integrity": "sha512-oF5utOabYQ/a0Mpt3RS21NKtz2Kd8jnwHOw+4nMgis8Crb0eO5gizWqWMyktLU7oVFU/v8CKTqMBJOAmF4a+eA==",
       "license": "MIT",
       "dependencies": {
         "tippy.js": "^6.3.7"
@@ -3999,159 +3999,159 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3",
-        "@tiptap/pm": "^2.6.3"
+        "@tiptap/core": "^2.6.4",
+        "@tiptap/pm": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-hard-break": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.6.3.tgz",
-      "integrity": "sha512-W7D2kccsEeHFF65FmZRuWvUso+eD7xQ+yA8VUh+g2PAzu3+lvIPHExj+r+TtgB9p/zgsXG4KyBIp5VSNmt1aqQ==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.6.4.tgz",
+      "integrity": "sha512-kBGGSBtp9oQlRBH7PfRvhbrauEphiJEuFUP9n/amAbrrNSabwmvBgyMl6wFXgMdfHF6CSv2YDgndE1sk8SjPSg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3"
+        "@tiptap/core": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-heading": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.6.3.tgz",
-      "integrity": "sha512-OuT2pAKj7UBOotOjZynwupvalL0dp8gHD411MCwPhzbVW5qGFadCiOp/WgSFMFVl+6uERHQiPfTBYIqYMNuBCQ==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.6.4.tgz",
+      "integrity": "sha512-GHwDguzRXRrB5htGPx6T0f0uN9RPAkjbjrl28T7LFXX5Lb2XO+Esr1l4LNsTU49H4wR9nL/89ZjEcd36BUWkog==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3"
+        "@tiptap/core": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-history": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.6.3.tgz",
-      "integrity": "sha512-S//+Q/eLbnZklvYh9ujU3va5kImnPZWQ74bRgFatfoU3Je9sB3ppcfIj4fx/C6MO0RHSB/yCIVdtro7xYW7Yzg==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.6.4.tgz",
+      "integrity": "sha512-Hr3SrvMsyDHKcsF4u3QPdY/NBYG9V0g5pPmZs/tdysXot3NUdkEYowjs9K9o5osKom364KjxQS0c9mOjyeKu1g==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3",
-        "@tiptap/pm": "^2.6.3"
+        "@tiptap/core": "^2.6.4",
+        "@tiptap/pm": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-italic": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.6.3.tgz",
-      "integrity": "sha512-/2tL3p0ysRYk7aQOSsMGsRZ22GERrZ097PO4vNq6adcJ01oucfK1yBWPwbjQHDiCZ9P2TOODbPEDwXEWHbIqbg==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.6.4.tgz",
+      "integrity": "sha512-XG/zaKVuorKr1vGEWEgLQTnQwOpNn/JyGxO7oC7wfYx5eYpbbCtMTEMvuqNvkm7kpvVAUx3ugi/D8DWyWZEtYg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3"
+        "@tiptap/core": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-list-item": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.6.3.tgz",
-      "integrity": "sha512-UF2rNRz833sIUqVd/+6rpTZrSEBB3QXORZj1JLIMukYQntFWUfZ0OExOTkNZ+Ne1h9Tp25PhddN9PeJuHhAHGg==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.6.4.tgz",
+      "integrity": "sha512-NLP0nshX8eCZMLospdCsUApUQHPL1+T/MIi/Hhr0aNeaAg7KwBNH8/rFPuxPNs4BQkHOCuYq4Fm+klkebkFYJA==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3"
+        "@tiptap/core": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-ordered-list": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.6.3.tgz",
-      "integrity": "sha512-8aS64tCQ5RZW4qbW631IHEVWkk+ZjVw9+6SKb895TD1Gwo4GTM+2RZGA5PFucw2ehb3sXgqqM2rAqRdHLg+EXA==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.6.4.tgz",
+      "integrity": "sha512-ecAEFpRKZc+b3f54EGvaRp7hsVza2i1nRhxHoPElqVR5DiCCSuSgAPCsKhUUT1rKweK9h56HiC4xswAyFrU5Ag==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3"
+        "@tiptap/core": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-paragraph": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.6.3.tgz",
-      "integrity": "sha512-sYhIAzQX9NijRsCztiTk1zjYs1vnU1ycm0RD4cC7q8axytOfVza3JcKofTpKYekV5ZyiMVi4NR5gqrsnt0yZhA==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.6.4.tgz",
+      "integrity": "sha512-JVlvhZPzjz0Q+29KmnrmLr3A3SvAMfKOZxbZZVnzee6vtI6rqjdYGBOtyyyWwrAliNQB6GkHiKmT3GxH76dz7A==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3"
+        "@tiptap/core": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-placeholder": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.6.3.tgz",
-      "integrity": "sha512-r7hXODa+/IKnC4CbrNn1QFzUpF/+Nvfp6aOLKZvmY3GYvB6oOTXTkt/JRHlu8XhKxRuw1dkzwUn16yzDiVb6yQ==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.6.4.tgz",
+      "integrity": "sha512-2F6gmVDtXfXRU6G4aE+vSZYtkwuaJLZE2r4B8/t83ei1z+elnNT2SWD3Dy5K3zDXhBupvqcMFKgjMnIlUXG0QA==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3",
-        "@tiptap/pm": "^2.6.3"
+        "@tiptap/core": "^2.6.4",
+        "@tiptap/pm": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-strike": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.6.3.tgz",
-      "integrity": "sha512-UypFU+ttVgkJyPhZ/4OFSygFZpXjJ67lDKCRTgKyQV7tMZRrQI3hHSS+GyEe5xJnCVqDuE7ofFt4S7q+rGq2Cg==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.6.4.tgz",
+      "integrity": "sha512-EV4hEA5qnRtKViaLKcucFvXP9xEUJOFgpFeOrp2xIgSXJLSmutkaDfz7nxJ2RLzwwYvPfWUL7ay97JSCzSuaIA==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3"
+        "@tiptap/core": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-text": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.6.3.tgz",
-      "integrity": "sha512-N4nBDMcrZScN+c+KYTY258XrVQRmI5cyi8uk3gedRUw+FyGP+o6HFhYYqvKlJLovebhVWl8DNAXKQpC9BacBYw==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.6.4.tgz",
+      "integrity": "sha512-QfspuCTTpmFrSLbDs2z/0W7GLaoNanwj4OCKPSPz5XcraZJgFLsWAqZxZE4aLgZbJH2hcGWMe5ZHmvLf5dJogw==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3"
+        "@tiptap/core": "^2.6.4"
       }
     },
     "node_modules/@tiptap/extension-underline": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.6.3.tgz",
-      "integrity": "sha512-u0PyEVnSUPSNpmzneOoWPneovfm7IEw7HrbRhDQZnx44iuaFYV2GK55U3eekawnUmmu3r40Q2xDhN+6gt/kQkA==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.6.4.tgz",
+      "integrity": "sha512-1MSCmX4L2l8DKqIJ6BLMp/XUzWK1lW+BI1+rLBd4N/kU8CdF5UqjWFijsu3UBCibV/fliyAzCoLoKO/lHRUUcA==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3"
+        "@tiptap/core": "^2.6.4"
       }
     },
     "node_modules/@tiptap/pm": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.6.3.tgz",
-      "integrity": "sha512-PxLYNtDzpvDFuW26Bln8umJdJa5lUrkELUbk2QemgxDmkNzlQQIa/n/2YVbW2VeFL9jcLkFbwnpPumyJTlJx4g==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.6.4.tgz",
+      "integrity": "sha512-k/AyigUioZVxFTcF7kWcUh5xeOV0bdGzHz+wmtP33md2jo8SJP29yEZ4Kshvk0IcFnVFEDrsfKiGhLRWpKx+YQ==",
       "license": "MIT",
       "dependencies": {
         "prosemirror-changeset": "^2.2.1",
@@ -4179,13 +4179,13 @@
       }
     },
     "node_modules/@tiptap/vue-2": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/@tiptap/vue-2/-/vue-2-2.6.3.tgz",
-      "integrity": "sha512-+X63Li01qfyM7dlF9sbuewXFIqqQSpguc0uzktk1Y+2xAqpJBk77iUUknwD3bhwQu3BLw55vlYIjlFXl01puAw==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@tiptap/vue-2/-/vue-2-2.6.4.tgz",
+      "integrity": "sha512-NHd+IuJ1Mp7gmXbk6xNREwjsZa1pTKRwTvXLSJDNQscQrdvuyexa8lkljrzpdC6dvDqlsYPCR5yDlDIJPn8M6g==",
       "license": "MIT",
       "dependencies": {
-        "@tiptap/extension-bubble-menu": "^2.6.3",
-        "@tiptap/extension-floating-menu": "^2.6.3",
+        "@tiptap/extension-bubble-menu": "^2.6.4",
+        "@tiptap/extension-floating-menu": "^2.6.4",
         "vue-ts-types": "^1.6.0"
       },
       "funding": {
@@ -4193,8 +4193,8 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.3",
-        "@tiptap/pm": "^2.6.3",
+        "@tiptap/core": "^2.6.4",
+        "@tiptap/pm": "^2.6.4",
         "vue": "^2.6.0"
       }
     },
diff --git a/frontend/package.json b/frontend/package.json
index f889085769..574ea09d1d 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -28,23 +28,23 @@
     "@react-pdf/render": "3.4.4",
     "@sentry/browser": "8.26.0",
     "@sentry/vue": "8.26.0",
-    "@tiptap/extension-bold": "2.6.3",
-    "@tiptap/extension-bubble-menu": "2.6.3",
-    "@tiptap/extension-bullet-list": "2.6.3",
-    "@tiptap/extension-document": "2.6.3",
-    "@tiptap/extension-hard-break": "2.6.3",
-    "@tiptap/extension-heading": "2.6.3",
-    "@tiptap/extension-history": "2.6.3",
-    "@tiptap/extension-italic": "2.6.3",
-    "@tiptap/extension-list-item": "2.6.3",
-    "@tiptap/extension-ordered-list": "2.6.3",
-    "@tiptap/extension-paragraph": "2.6.3",
-    "@tiptap/extension-placeholder": "2.6.3",
-    "@tiptap/extension-strike": "2.6.3",
-    "@tiptap/extension-text": "2.6.3",
-    "@tiptap/extension-underline": "2.6.3",
-    "@tiptap/pm": "2.6.3",
-    "@tiptap/vue-2": "2.6.3",
+    "@tiptap/extension-bold": "2.6.4",
+    "@tiptap/extension-bubble-menu": "2.6.4",
+    "@tiptap/extension-bullet-list": "2.6.4",
+    "@tiptap/extension-document": "2.6.4",
+    "@tiptap/extension-hard-break": "2.6.4",
+    "@tiptap/extension-heading": "2.6.4",
+    "@tiptap/extension-history": "2.6.4",
+    "@tiptap/extension-italic": "2.6.4",
+    "@tiptap/extension-list-item": "2.6.4",
+    "@tiptap/extension-ordered-list": "2.6.4",
+    "@tiptap/extension-paragraph": "2.6.4",
+    "@tiptap/extension-placeholder": "2.6.4",
+    "@tiptap/extension-strike": "2.6.4",
+    "@tiptap/extension-text": "2.6.4",
+    "@tiptap/extension-underline": "2.6.4",
+    "@tiptap/pm": "2.6.4",
+    "@tiptap/vue-2": "2.6.4",
     "@zxcvbn-ts/core": "3.0.4",
     "@zxcvbn-ts/language-common": "3.0.4",
     "@zxcvbn-ts/language-de": "3.0.2",

From bbe4e8b9686be291da0f63d964d1e842c6d2cd8f Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 15 Aug 2024 14:41:39 +0000
Subject: [PATCH 063/273] chore(deps): update dependency vite to v5.4.1

---
 frontend/package-lock.json | 10 +++++-----
 frontend/package.json      |  2 +-
 pdf/package-lock.json      | 10 +++++-----
 pdf/package.json           |  2 +-
 4 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 4a69ec1810..a744da51f9 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -99,7 +99,7 @@
         "prettier": "3.3.3",
         "sass": "1.32.13",
         "unplugin-vue-components": "0.27.4",
-        "vite": "5.4.0",
+        "vite": "5.4.1",
         "vite-plugin-comlink": "5.0.1",
         "vite-plugin-vue2-svg": "0.4.0",
         "vitest": "2.0.5",
@@ -12694,14 +12694,14 @@
       }
     },
     "node_modules/vite": {
-      "version": "5.4.0",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz",
-      "integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==",
+      "version": "5.4.1",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz",
+      "integrity": "sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
-        "postcss": "^8.4.40",
+        "postcss": "^8.4.41",
         "rollup": "^4.13.0"
       },
       "bin": {
diff --git a/frontend/package.json b/frontend/package.json
index f889085769..7393b97241 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -111,7 +111,7 @@
     "prettier": "3.3.3",
     "sass": "1.32.13",
     "unplugin-vue-components": "0.27.4",
-    "vite": "5.4.0",
+    "vite": "5.4.1",
     "vite-plugin-comlink": "5.0.1",
     "vite-plugin-vue2-svg": "0.4.0",
     "vitest": "2.0.5",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index b8a7cd6325..099c04ec15 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -36,7 +36,7 @@
         "jsdom": "24.1.1",
         "prettier": "3.3.3",
         "url-template": "3.1.1",
-        "vite": "5.4.0",
+        "vite": "5.4.1",
         "vitest": "2.0.5"
       },
       "peerDependencies": {
@@ -7799,14 +7799,14 @@
       "license": "MIT"
     },
     "node_modules/vite": {
-      "version": "5.4.0",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz",
-      "integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==",
+      "version": "5.4.1",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz",
+      "integrity": "sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
-        "postcss": "^8.4.40",
+        "postcss": "^8.4.41",
         "rollup": "^4.13.0"
       },
       "bin": {
diff --git a/pdf/package.json b/pdf/package.json
index 375a846c09..13ed96f423 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -56,7 +56,7 @@
     "jsdom": "24.1.1",
     "prettier": "3.3.3",
     "url-template": "3.1.1",
-    "vite": "5.4.0",
+    "vite": "5.4.1",
     "vitest": "2.0.5"
   }
 }

From 528dec019aa2ee252bf69a56397c3500b93edc1b Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 15 Aug 2024 17:00:17 +0000
Subject: [PATCH 064/273] chore(deps): update dependency @nuxtjs/i18n to v8.4.0

---
 print/package-lock.json | 14 +++++++-------
 print/package.json      |  2 +-
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index 812e56b100..318292dfc0 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -23,7 +23,7 @@
       "devDependencies": {
         "@nuxt/eslint-config": "0.5.0",
         "@nuxtjs/eslint-module": "4.1.0",
-        "@nuxtjs/i18n": "8.3.3",
+        "@nuxtjs/i18n": "8.4.0",
         "@nuxtjs/tailwindcss": "6.12.1",
         "@tailwindcss/typography": "0.5.14",
         "@typescript-eslint/eslint-plugin": "7.18.0",
@@ -2464,9 +2464,9 @@
       }
     },
     "node_modules/@nuxtjs/i18n": {
-      "version": "8.3.3",
-      "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.3.3.tgz",
-      "integrity": "sha512-R/Q7GgBf9sVKlB4Mz/2KPhlZwO7nm+YcADcJcBDGfQVoNZjGg2muDCkCXSqpqIjkm264QcERFoPP42aBR+SlgA==",
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.4.0.tgz",
+      "integrity": "sha512-+iFDUlWNT99jVlXoVTcaEJdiE/psWBVMyVvDl4aB58/nB9ICzNy1bLAYrUxtoEtxhFF2tF+DHTdcs8dSVWeHWQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2475,9 +2475,9 @@
         "@intlify/unplugin-vue-i18n": "^3.0.1",
         "@intlify/utils": "^0.12.0",
         "@miyaneee/rollup-plugin-json5": "^1.2.0",
-        "@nuxt/kit": "^3.10.3",
+        "@nuxt/kit": "^3.12.4",
         "@rollup/plugin-yaml": "^4.1.2",
-        "@vue/compiler-sfc": "^3.4.30",
+        "@vue/compiler-sfc": "^3.4.37",
         "debug": "^4.3.5",
         "defu": "^6.1.2",
         "estree-walker": "^3.0.3",
@@ -2491,7 +2491,7 @@
         "ufo": "^1.3.1",
         "unplugin": "^1.10.1",
         "vue-i18n": "^9.9.0",
-        "vue-router": "^4.2.5"
+        "vue-router": "^4.4.0"
       },
       "engines": {
         "node": "^14.16.0 || >=16.11.0"
diff --git a/print/package.json b/print/package.json
index fd91c499b7..c0739013f5 100644
--- a/print/package.json
+++ b/print/package.json
@@ -32,7 +32,7 @@
   "devDependencies": {
     "@nuxt/eslint-config": "0.5.0",
     "@nuxtjs/eslint-module": "4.1.0",
-    "@nuxtjs/i18n": "8.3.3",
+    "@nuxtjs/i18n": "8.4.0",
     "@nuxtjs/tailwindcss": "6.12.1",
     "@tailwindcss/typography": "0.5.14",
     "@typescript-eslint/eslint-plugin": "7.18.0",

From 42e7b4f80763385e77f195e7fc8ab9c7987f755a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 15 Aug 2024 22:52:20 +0000
Subject: [PATCH 065/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.31

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 1bf8e57edf..a31491cb2b 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.30
+    image: amazon/aws-cli:2.17.31
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From 3bbdff00266b58f94a0f055cb4b88527e5b8fbb4 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 16 Aug 2024 19:40:05 +0000
Subject: [PATCH 066/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.32

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index a31491cb2b..d821f8896e 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.31
+    image: amazon/aws-cli:2.17.32
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From 41395069a673de4e982dfa0e3b2a147307eeb234 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 16 Aug 2024 19:40:32 +0000
Subject: [PATCH 067/273] chore(deps): update dependency @intlify/core to
 v9.14.0

---
 pdf/package-lock.json | 34 +++++++++++++++++-----------------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index ac408f1a7d..c61e2b3ea7 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -2517,14 +2517,14 @@
       "license": "BSD-3-Clause"
     },
     "node_modules/@intlify/core": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.13.1.tgz",
-      "integrity": "sha512-R+l9DRqzfK0yT9UgaCq3sl24NJAP4f/djAu4z9zLknAUBEal2q/tXFV+oGzcGpvi3uXWNvF9Gctj+IsuPwJjoA==",
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.14.0.tgz",
+      "integrity": "sha512-lPZ78GkDFcppC9Ol8oruyPGJbBWvTYDTEAJBebDtGmDIeggDJAiR+XMbCPZAOeW4/XszcIeiGYKEx0BvQDjVTw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/core-base": "9.13.1",
-        "@intlify/shared": "9.13.1"
+        "@intlify/core-base": "9.14.0",
+        "@intlify/shared": "9.14.0"
       },
       "engines": {
         "node": ">= 16"
@@ -2534,14 +2534,14 @@
       }
     },
     "node_modules/@intlify/core-base": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.13.1.tgz",
-      "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.0.tgz",
+      "integrity": "sha512-zJn0imh9HIsZZUtt9v8T16PeVstPv6bP2YzlrYJwoF8F30gs4brZBwW2KK6EI5WYKFi3NeqX6+UU4gniz5TkGg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/message-compiler": "9.13.1",
-        "@intlify/shared": "9.13.1"
+        "@intlify/message-compiler": "9.14.0",
+        "@intlify/shared": "9.14.0"
       },
       "engines": {
         "node": ">= 16"
@@ -2551,13 +2551,13 @@
       }
     },
     "node_modules/@intlify/message-compiler": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
-      "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.0.tgz",
+      "integrity": "sha512-sXNsoMI0YsipSXW8SR75drmVK56tnJHoYbPXUv2Cf9lz6FzvwsosFm6JtC1oQZI/kU+n7qx0qRrEWkeYFTgETA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/shared": "9.13.1",
+        "@intlify/shared": "9.14.0",
         "source-map-js": "^1.0.2"
       },
       "engines": {
@@ -2568,9 +2568,9 @@
       }
     },
     "node_modules/@intlify/shared": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.13.1.tgz",
-      "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==",
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.0.tgz",
+      "integrity": "sha512-r+N8KRQL7LgN1TMTs1A2svfuAU0J94Wu9wWdJVJqYsoMMLIeJxrPjazihfHpmJqfgZq0ah3Y9Q4pgWV2O90Fyg==",
       "dev": true,
       "license": "MIT",
       "engines": {

From 3adad13a97d974fbe465da09f450743053c001ec Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 16 Aug 2024 22:45:35 +0000
Subject: [PATCH 068/273] chore(deps): update dependency @types/node to
 v20.15.0

---
 .ops/aws-setup/package-lock.json | 16 +++++++--------
 .ops/aws-setup/package.json      |  2 +-
 pdf/package-lock.json            | 34 ++++++++++++++++----------------
 3 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index e97ba93b2d..7cb97a384e 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -12,7 +12,7 @@
             },
             "devDependencies": {
                 "@babel/eslint-parser": "7.25.1",
-                "@types/node": "20.14.15",
+                "@types/node": "20.15.0",
                 "eslint": "8.57.0",
                 "eslint-config-prettier": "9.1.0",
                 "eslint-plugin-import": "2.29.1",
@@ -2866,12 +2866,12 @@
             }
         },
         "node_modules/@types/node": {
-            "version": "20.14.15",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.15.tgz",
-            "integrity": "sha512-Fz1xDMCF/B00/tYSVMlmK7hVeLh7jE5f3B7X1/hmV0MJBwE27KlS7EvD/Yp+z1lm8mVhwV5w+n8jOZG8AfTlKw==",
+            "version": "20.15.0",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.15.0.tgz",
+            "integrity": "sha512-eQf4OkH6gA9v1W0iEpht/neozCsZKMTK+C4cU6/fv7wtJCCL8LEQ4hie2Ln8ZP/0YYM2xGj7//f8xyqItkJ6QA==",
             "license": "MIT",
             "dependencies": {
-                "undici-types": "~5.26.4"
+                "undici-types": "~6.13.0"
             }
         },
         "node_modules/@types/responselike": {
@@ -8205,9 +8205,9 @@
             }
         },
         "node_modules/undici-types": {
-            "version": "5.26.5",
-            "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
-            "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+            "version": "6.13.0",
+            "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz",
+            "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==",
             "license": "MIT"
         },
         "node_modules/unique-filename": {
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 2cd6a9d7bc..a0a6c41a78 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -16,7 +16,7 @@
     },
     "devDependencies": {
         "@babel/eslint-parser": "7.25.1",
-        "@types/node": "20.14.15",
+        "@types/node": "20.15.0",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
         "eslint-plugin-import": "2.29.1",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index c61e2b3ea7..ac408f1a7d 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -2517,14 +2517,14 @@
       "license": "BSD-3-Clause"
     },
     "node_modules/@intlify/core": {
-      "version": "9.14.0",
-      "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.14.0.tgz",
-      "integrity": "sha512-lPZ78GkDFcppC9Ol8oruyPGJbBWvTYDTEAJBebDtGmDIeggDJAiR+XMbCPZAOeW4/XszcIeiGYKEx0BvQDjVTw==",
+      "version": "9.13.1",
+      "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.13.1.tgz",
+      "integrity": "sha512-R+l9DRqzfK0yT9UgaCq3sl24NJAP4f/djAu4z9zLknAUBEal2q/tXFV+oGzcGpvi3uXWNvF9Gctj+IsuPwJjoA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/core-base": "9.14.0",
-        "@intlify/shared": "9.14.0"
+        "@intlify/core-base": "9.13.1",
+        "@intlify/shared": "9.13.1"
       },
       "engines": {
         "node": ">= 16"
@@ -2534,14 +2534,14 @@
       }
     },
     "node_modules/@intlify/core-base": {
-      "version": "9.14.0",
-      "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.0.tgz",
-      "integrity": "sha512-zJn0imh9HIsZZUtt9v8T16PeVstPv6bP2YzlrYJwoF8F30gs4brZBwW2KK6EI5WYKFi3NeqX6+UU4gniz5TkGg==",
+      "version": "9.13.1",
+      "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.13.1.tgz",
+      "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/message-compiler": "9.14.0",
-        "@intlify/shared": "9.14.0"
+        "@intlify/message-compiler": "9.13.1",
+        "@intlify/shared": "9.13.1"
       },
       "engines": {
         "node": ">= 16"
@@ -2551,13 +2551,13 @@
       }
     },
     "node_modules/@intlify/message-compiler": {
-      "version": "9.14.0",
-      "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.0.tgz",
-      "integrity": "sha512-sXNsoMI0YsipSXW8SR75drmVK56tnJHoYbPXUv2Cf9lz6FzvwsosFm6JtC1oQZI/kU+n7qx0qRrEWkeYFTgETA==",
+      "version": "9.13.1",
+      "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
+      "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/shared": "9.14.0",
+        "@intlify/shared": "9.13.1",
         "source-map-js": "^1.0.2"
       },
       "engines": {
@@ -2568,9 +2568,9 @@
       }
     },
     "node_modules/@intlify/shared": {
-      "version": "9.14.0",
-      "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.0.tgz",
-      "integrity": "sha512-r+N8KRQL7LgN1TMTs1A2svfuAU0J94Wu9wWdJVJqYsoMMLIeJxrPjazihfHpmJqfgZq0ah3Y9Q4pgWV2O90Fyg==",
+      "version": "9.13.1",
+      "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.13.1.tgz",
+      "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==",
       "dev": true,
       "license": "MIT",
       "engines": {

From 39994e45d7510cfb74aaaa4b8d559ca4d1524ed5 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 16 Aug 2024 22:45:48 +0000
Subject: [PATCH 069/273] fix(deps): update dependency @intlify/core to v9.14.0

---
 frontend/package-lock.json | 36 ++++++++++++++++++------------------
 frontend/package.json      |  2 +-
 pdf/package-lock.json      | 34 +++++++++++++++++-----------------
 3 files changed, 36 insertions(+), 36 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index ed751e0e86..0ecf9c449a 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -7,7 +7,7 @@
       "name": "@ecamp3/frontend",
       "hasInstallScript": true,
       "dependencies": {
-        "@intlify/core": "9.13.1",
+        "@intlify/core": "9.14.0",
         "@mdi/font": "7.4.47",
         "@react-pdf/font": "2.5.1",
         "@react-pdf/layout": "3.12.1",
@@ -2530,13 +2530,13 @@
       "license": "BSD-3-Clause"
     },
     "node_modules/@intlify/core": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.13.1.tgz",
-      "integrity": "sha512-R+l9DRqzfK0yT9UgaCq3sl24NJAP4f/djAu4z9zLknAUBEal2q/tXFV+oGzcGpvi3uXWNvF9Gctj+IsuPwJjoA==",
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.14.0.tgz",
+      "integrity": "sha512-lPZ78GkDFcppC9Ol8oruyPGJbBWvTYDTEAJBebDtGmDIeggDJAiR+XMbCPZAOeW4/XszcIeiGYKEx0BvQDjVTw==",
       "license": "MIT",
       "dependencies": {
-        "@intlify/core-base": "9.13.1",
-        "@intlify/shared": "9.13.1"
+        "@intlify/core-base": "9.14.0",
+        "@intlify/shared": "9.14.0"
       },
       "engines": {
         "node": ">= 16"
@@ -2546,13 +2546,13 @@
       }
     },
     "node_modules/@intlify/core-base": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.13.1.tgz",
-      "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.0.tgz",
+      "integrity": "sha512-zJn0imh9HIsZZUtt9v8T16PeVstPv6bP2YzlrYJwoF8F30gs4brZBwW2KK6EI5WYKFi3NeqX6+UU4gniz5TkGg==",
       "license": "MIT",
       "dependencies": {
-        "@intlify/message-compiler": "9.13.1",
-        "@intlify/shared": "9.13.1"
+        "@intlify/message-compiler": "9.14.0",
+        "@intlify/shared": "9.14.0"
       },
       "engines": {
         "node": ">= 16"
@@ -2562,12 +2562,12 @@
       }
     },
     "node_modules/@intlify/message-compiler": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
-      "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.0.tgz",
+      "integrity": "sha512-sXNsoMI0YsipSXW8SR75drmVK56tnJHoYbPXUv2Cf9lz6FzvwsosFm6JtC1oQZI/kU+n7qx0qRrEWkeYFTgETA==",
       "license": "MIT",
       "dependencies": {
-        "@intlify/shared": "9.13.1",
+        "@intlify/shared": "9.14.0",
         "source-map-js": "^1.0.2"
       },
       "engines": {
@@ -2578,9 +2578,9 @@
       }
     },
     "node_modules/@intlify/shared": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.13.1.tgz",
-      "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==",
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.0.tgz",
+      "integrity": "sha512-r+N8KRQL7LgN1TMTs1A2svfuAU0J94Wu9wWdJVJqYsoMMLIeJxrPjazihfHpmJqfgZq0ah3Y9Q4pgWV2O90Fyg==",
       "license": "MIT",
       "engines": {
         "node": ">= 16"
diff --git a/frontend/package.json b/frontend/package.json
index 3bed4acbc0..a66d8cf05c 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -19,7 +19,7 @@
     "postinstall": "./scripts/install-twemoji.sh"
   },
   "dependencies": {
-    "@intlify/core": "9.13.1",
+    "@intlify/core": "9.14.0",
     "@mdi/font": "7.4.47",
     "@react-pdf/font": "2.5.1",
     "@react-pdf/layout": "3.12.1",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index c61e2b3ea7..ac408f1a7d 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -2517,14 +2517,14 @@
       "license": "BSD-3-Clause"
     },
     "node_modules/@intlify/core": {
-      "version": "9.14.0",
-      "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.14.0.tgz",
-      "integrity": "sha512-lPZ78GkDFcppC9Ol8oruyPGJbBWvTYDTEAJBebDtGmDIeggDJAiR+XMbCPZAOeW4/XszcIeiGYKEx0BvQDjVTw==",
+      "version": "9.13.1",
+      "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.13.1.tgz",
+      "integrity": "sha512-R+l9DRqzfK0yT9UgaCq3sl24NJAP4f/djAu4z9zLknAUBEal2q/tXFV+oGzcGpvi3uXWNvF9Gctj+IsuPwJjoA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/core-base": "9.14.0",
-        "@intlify/shared": "9.14.0"
+        "@intlify/core-base": "9.13.1",
+        "@intlify/shared": "9.13.1"
       },
       "engines": {
         "node": ">= 16"
@@ -2534,14 +2534,14 @@
       }
     },
     "node_modules/@intlify/core-base": {
-      "version": "9.14.0",
-      "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.0.tgz",
-      "integrity": "sha512-zJn0imh9HIsZZUtt9v8T16PeVstPv6bP2YzlrYJwoF8F30gs4brZBwW2KK6EI5WYKFi3NeqX6+UU4gniz5TkGg==",
+      "version": "9.13.1",
+      "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.13.1.tgz",
+      "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/message-compiler": "9.14.0",
-        "@intlify/shared": "9.14.0"
+        "@intlify/message-compiler": "9.13.1",
+        "@intlify/shared": "9.13.1"
       },
       "engines": {
         "node": ">= 16"
@@ -2551,13 +2551,13 @@
       }
     },
     "node_modules/@intlify/message-compiler": {
-      "version": "9.14.0",
-      "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.0.tgz",
-      "integrity": "sha512-sXNsoMI0YsipSXW8SR75drmVK56tnJHoYbPXUv2Cf9lz6FzvwsosFm6JtC1oQZI/kU+n7qx0qRrEWkeYFTgETA==",
+      "version": "9.13.1",
+      "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
+      "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/shared": "9.14.0",
+        "@intlify/shared": "9.13.1",
         "source-map-js": "^1.0.2"
       },
       "engines": {
@@ -2568,9 +2568,9 @@
       }
     },
     "node_modules/@intlify/shared": {
-      "version": "9.14.0",
-      "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.0.tgz",
-      "integrity": "sha512-r+N8KRQL7LgN1TMTs1A2svfuAU0J94Wu9wWdJVJqYsoMMLIeJxrPjazihfHpmJqfgZq0ah3Y9Q4pgWV2O90Fyg==",
+      "version": "9.13.1",
+      "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.13.1.tgz",
+      "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==",
       "dev": true,
       "license": "MIT",
       "engines": {

From 0be4e883f67a5c3b9be3f68c0848572dc561bc48 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 17 Aug 2024 04:16:36 +0000
Subject: [PATCH 070/273] chore(deps): update dependency @intlify/core to
 v9.14.0

---
 pdf/package-lock.json | 34 +++++++++++++++++-----------------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index ac408f1a7d..c61e2b3ea7 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -2517,14 +2517,14 @@
       "license": "BSD-3-Clause"
     },
     "node_modules/@intlify/core": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.13.1.tgz",
-      "integrity": "sha512-R+l9DRqzfK0yT9UgaCq3sl24NJAP4f/djAu4z9zLknAUBEal2q/tXFV+oGzcGpvi3uXWNvF9Gctj+IsuPwJjoA==",
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.14.0.tgz",
+      "integrity": "sha512-lPZ78GkDFcppC9Ol8oruyPGJbBWvTYDTEAJBebDtGmDIeggDJAiR+XMbCPZAOeW4/XszcIeiGYKEx0BvQDjVTw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/core-base": "9.13.1",
-        "@intlify/shared": "9.13.1"
+        "@intlify/core-base": "9.14.0",
+        "@intlify/shared": "9.14.0"
       },
       "engines": {
         "node": ">= 16"
@@ -2534,14 +2534,14 @@
       }
     },
     "node_modules/@intlify/core-base": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.13.1.tgz",
-      "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.0.tgz",
+      "integrity": "sha512-zJn0imh9HIsZZUtt9v8T16PeVstPv6bP2YzlrYJwoF8F30gs4brZBwW2KK6EI5WYKFi3NeqX6+UU4gniz5TkGg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/message-compiler": "9.13.1",
-        "@intlify/shared": "9.13.1"
+        "@intlify/message-compiler": "9.14.0",
+        "@intlify/shared": "9.14.0"
       },
       "engines": {
         "node": ">= 16"
@@ -2551,13 +2551,13 @@
       }
     },
     "node_modules/@intlify/message-compiler": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
-      "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.0.tgz",
+      "integrity": "sha512-sXNsoMI0YsipSXW8SR75drmVK56tnJHoYbPXUv2Cf9lz6FzvwsosFm6JtC1oQZI/kU+n7qx0qRrEWkeYFTgETA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/shared": "9.13.1",
+        "@intlify/shared": "9.14.0",
         "source-map-js": "^1.0.2"
       },
       "engines": {
@@ -2568,9 +2568,9 @@
       }
     },
     "node_modules/@intlify/shared": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.13.1.tgz",
-      "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==",
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.0.tgz",
+      "integrity": "sha512-r+N8KRQL7LgN1TMTs1A2svfuAU0J94Wu9wWdJVJqYsoMMLIeJxrPjazihfHpmJqfgZq0ah3Y9Q4pgWV2O90Fyg==",
       "dev": true,
       "license": "MIT",
       "engines": {

From 20970035d426d3a97efee1ef7e06ea6a7df5d38e Mon Sep 17 00:00:00 2001
From: Manuel Meister <news.manuelsworld@gmail.com>
Date: Sat, 17 Aug 2024 15:19:56 +0200
Subject: [PATCH 071/273] Replace usages of camp.name with camp.shortTitle

- Switch title and shortTitle content in DB if shortTitle length is longer than 16 chars and title length is shorter than shortTitle.
- Title should be shown instead of shortTitle, except for TopNavigation & BottomNavigation and URLs & filenames
- ShortTitle is now nullable and is automatically filled out if nothing has been set
- Optimize mobile bottom bar shortTitle display to account for 16 characters. Limit shortTitle to 16 characters in frontend, but do not limit it yet in the api.
- Adjust print cover to reflect the changes as well
- Delete loading filter as filters are deprecated and this was not working anymore

Fixes #2992
---
 api/fixtures/camps.yml                        |   8 +-
 api/fixtures/performance_test/camps.yml       |   2 +-
 .../schema/Version20240817112552.php          |  31 +++
 api/src/Entity/Camp.php                       |   8 +-
 api/src/Service/MailService.php               |   4 +-
 .../campCollaborationInvite.de.html.twig      |   8 +-
 .../campCollaborationInvite.de.text.twig      |   4 +-
 .../campCollaborationInvite.en.html.twig      |  12 +-
 .../campCollaborationInvite.en.text.twig      |   4 +-
 api/tests/Api/Camps/CreateCampTest.php        |  44 +---
 api/tests/Api/Camps/ReadCampTest.php          |  10 +-
 api/tests/Api/Camps/UpdateCampTest.php        |  29 +--
 ... with data set camp_collaborations__1.json |  24 +-
 ...tchesStructure with data set camps__1.json |   6 +-
 ... with data set camp_collaborations__1.json |   2 +-
 ...tchesStructure with data set camps__1.json |   2 +-
 ...hesStructure with data set periods__1.json |   2 +-
 ...est__testOpenApiSpecMatchesSnapshot__1.yml | 219 ++++++++++--------
 api/tests/Entity/CampTest.php                 |   2 +-
 api/tests/Service/MailServiceTest.php         |  12 +-
 api/translations/email+intl-icu.de.json       |   2 +-
 api/translations/email+intl-icu.en.json       |   2 +-
 .../helpers/__tests__/campShortTitle.spec.js  |  35 +++
 common/helpers/campShortTitle.js              |  59 +++++
 common/locales/de.json                        |   4 +-
 common/locales/en.json                        |   6 +-
 common/locales/fr.json                        |   4 +-
 common/locales/it.json                        |   4 +-
 e2e/specs/nuxtPrint.cy.js                     |   1 -
 frontend/src/App.vue                          |   1 +
 frontend/src/components/camp/CampListItem.vue |  45 ++++
 .../components/campAdmin/CampDangerZone.vue   |   6 +-
 .../src/components/campAdmin/CampSettings.vue |  14 +-
 .../components/campCreate/CampCreateStep1.vue |  11 +-
 .../src/components/layout/SidebarListItem.vue |   5 +-
 .../material/useMaterialViewHelper.js         |   3 +-
 .../components/print/PrintConfigurator.vue    |   3 +-
 .../print/__tests__/repairPrintConfig.spec.js |   2 +-
 .../src/components/print/repairPrintConfig.js |   3 +-
 frontend/src/locales/de-CH-scout.json         |   7 +
 frontend/src/locales/de.json                  |  11 +-
 frontend/src/locales/en.json                  |   6 +-
 frontend/src/locales/fr.json                  |   4 +-
 frontend/src/locales/it.json                  |   4 +-
 frontend/src/locales/rm.json                  |   4 +-
 frontend/src/main.js                          |   2 -
 frontend/src/plugins/filterLoading.js         |  20 --
 frontend/src/plugins/index.js                 |   1 -
 frontend/src/router.js                        |  29 +--
 frontend/src/scss/global.scss                 |  12 -
 frontend/src/scss/tailwind.scss               |  25 ++
 frontend/src/views/Camps.vue                  |  51 ++--
 .../views/camp/navigation/NavigationCamp.vue  |  17 +-
 .../camp/navigation/desktop/NavTopbar.vue     |  13 +-
 .../camp/navigation/mobile/NavBottombar.vue   |  24 +-
 .../camp/navigation/mobile/NavSidebar.vue     |   9 +-
 pdf/src/CampPrint.vue                         |   2 +
 .../fonts/Inter/InterDisplay-Medium.ttf       | Bin 0 -> 410472 bytes
 pdf/src/campPrint/cover/Cover.vue             |  41 ++--
 .../__snapshots__/cover_page.spec.json.snap   |  84 +++----
 print/components/config/Cover.vue             |  11 +-
 61 files changed, 565 insertions(+), 455 deletions(-)
 create mode 100644 api/migrations/schema/Version20240817112552.php
 create mode 100644 common/helpers/__tests__/campShortTitle.spec.js
 create mode 100644 common/helpers/campShortTitle.js
 create mode 100644 frontend/src/components/camp/CampListItem.vue
 delete mode 100644 frontend/src/plugins/filterLoading.js
 create mode 100644 frontend/src/scss/tailwind.scss
 create mode 100644 pdf/src/assets/fonts/Inter/InterDisplay-Medium.ttf

diff --git a/api/fixtures/camps.yml b/api/fixtures/camps.yml
index aae7f18664..aa99082f3d 100644
--- a/api/fixtures/camps.yml
+++ b/api/fixtures/camps.yml
@@ -1,6 +1,6 @@
 App\Entity\Camp:
   camp1:
-    name: Camp1
+    shortTitle: Camp1
     title: <word()>
     motto: <sentence()>
     addressName: <word()>
@@ -12,7 +12,7 @@ App\Entity\Camp:
     isPrototype: false
     campPrototypeId: null
   camp2:
-    name: Camp2
+    shortTitle: Camp2
     title: <word()>
     motto: <sentence()>
     addressName: <word()>
@@ -24,7 +24,7 @@ App\Entity\Camp:
     isPrototype: false
     campPrototypeId: null
   campUnrelated:
-    name: CampUnrelated
+    shortTitle: CampUnrelated
     title: <word()>
     motto: <sentence()>
     addressName: <word()>
@@ -36,7 +36,7 @@ App\Entity\Camp:
     isPrototype: false
     campPrototypeId: null
   campPrototype:
-    name: CampPrototype
+    shortTitle: CampPrototype
     title: <word()>
     motto: <sentence()>
     addressName: <word()>
diff --git a/api/fixtures/performance_test/camps.yml b/api/fixtures/performance_test/camps.yml
index 89ec5d7904..2587054ac6 100644
--- a/api/fixtures/performance_test/camps.yml
+++ b/api/fixtures/performance_test/camps.yml
@@ -1,6 +1,6 @@
 App\Entity\Camp:
   additionalCamp_{1..400}:
-    name:  <word()>
+    shortTitle:  <word()>
     title: <word()>
     motto: <sentence()>
     addressName: <word()>
diff --git a/api/migrations/schema/Version20240817112552.php b/api/migrations/schema/Version20240817112552.php
new file mode 100644
index 0000000000..591c0e1c84
--- /dev/null
+++ b/api/migrations/schema/Version20240817112552.php
@@ -0,0 +1,31 @@
+<?php
+
+declare(strict_types=1);
+
+namespace DoctrineMigrations;
+
+use Doctrine\DBAL\Schema\Schema;
+use Doctrine\Migrations\AbstractMigration;
+
+/**
+ * Auto-generated Migration: Please modify to your needs!
+ */
+final class Version20240817112552 extends AbstractMigration {
+    public function getDescription(): string {
+        return 'Rename camp.name to shortTitle and switch shortTitle with title if shortTitle is longer than 16 characters and title is shorter than shortTitle';
+    }
+
+    public function up(Schema $schema): void {
+        $this->addSql('ALTER TABLE camp RENAME COLUMN name TO shortTitle');
+        $this->addSql('ALTER TABLE camp ALTER shortTitle DROP NOT NULL, ALTER shortTitle TYPE TEXT');
+        $this->addSql('UPDATE camp SET shortTitle = null WHERE shortTitle = title');
+        $this->addSql('UPDATE camp SET shortTitle = title, title = shortTitle WHERE char_length(shortTitle) > 16 AND char_length(title) < char_length(shortTitle);');
+        // $this->addSql('UPDATE camp SET shortTitle = left(shortTitle, 16) WHERE char_length(shortTitle) > 16;');
+    }
+
+    public function down(Schema $schema): void {
+        $this->addSql("UPDATE camp SET shortTitle = '' WHERE shortTitle IS NULL");
+        $this->addSql('ALTER TABLE camp ALTER shortTitle SET NOT NULL, ALTER shortTitle TYPE VARCHAR(32)');
+        $this->addSql('ALTER TABLE camp RENAME COLUMN shortTitle TO name');
+    }
+}
diff --git a/api/src/Entity/Camp.php b/api/src/Entity/Camp.php
index eea7559c5e..c15f4809e5 100644
--- a/api/src/Entity/Camp.php
+++ b/api/src/Entity/Camp.php
@@ -169,15 +169,15 @@ class Camp extends BaseEntity implements BelongsToCampInterface, CopyFromPrototy
     public bool $isPrototype = false;
 
     /**
-     * A short name for the camp.
+     * A short title for the camp.
      */
     #[InputFilter\Trim]
     #[InputFilter\CleanText]
-    #[Assert\NotBlank]
+    #[Assert\Length(max: 32)]
     #[ApiProperty(example: 'SoLa 2022')]
     #[Groups(['read', 'write'])]
-    #[ORM\Column(type: 'string', length: 32)]
-    public string $name;
+    #[ORM\Column(type: 'text', nullable: true)]
+    public ?string $shortTitle;
 
     /**
      * The full title of the camp.
diff --git a/api/src/Service/MailService.php b/api/src/Service/MailService.php
index f0d64b3765..dfaa8c0cff 100644
--- a/api/src/Service/MailService.php
+++ b/api/src/Service/MailService.php
@@ -29,14 +29,14 @@ public function sendInviteToCampMail(User $byUser, Camp $camp, string $key, stri
         $email = (new TemplatedEmail())
             ->from(new Address($this->senderEmail, $this->senderName))
             ->to(new Address($emailToInvite))
-            ->subject($this->translator->trans('inviteToCamp.subject', ['campName' => $camp->name], self::TRANSLATE_DOMAIN, $byUser->profile->language))
+            ->subject($this->translator->trans('inviteToCamp.subject', ['campTitle' => $camp->title], self::TRANSLATE_DOMAIN, $byUser->profile->language))
             ->htmlTemplate($this->getTemplate('emails/campCollaborationInvite.{language}.html.twig', $byUser))
             ->textTemplate($this->getTemplate('emails/campCollaborationInvite.{language}.text.twig', $byUser))
             ->context([
                 'by_user' => $byUser->getDisplayName(),
                 'url' => "{$this->frontendBaseUrl}/camps/invitation/{$key}",
-                'camp_name' => $camp->name,
                 'camp_title' => $camp->title,
+                'camp_organizer' => $camp->organizer,
             ])
         ;
 
diff --git a/api/templates/emails/campCollaborationInvite.de.html.twig b/api/templates/emails/campCollaborationInvite.de.html.twig
index 707ff4240b..30382672a7 100644
--- a/api/templates/emails/campCollaborationInvite.de.html.twig
+++ b/api/templates/emails/campCollaborationInvite.de.html.twig
@@ -1,15 +1,15 @@
-{% set preheader = 'Einladung zur Mitarbeit beim Lager ' ~ camp_name %}
+{% set preheader = 'Einladung zur Mitarbeit beim Lager ' ~ camp_title %}
 {% extends 'emails/baseLayout.twig' %}
 
 {% block content %}
-    <h1>Einladung zur Mitarbeit beim Lager "{{ camp_name }}"</h1>
+    <h1>Einladung zur Mitarbeit beim Lager "{{ camp_title }}"</h1>
     <p>Hallo,</p>
     <p>
         Du wurdest von {{ by_user }} eingeladen, bei folgendem Lager mitzuwirken:
     </p>
     <p>
-        <strong>Name:</strong> {{ camp_name }} <br />
-        <strong>Titel:</strong> {{ camp_title }}
+        <strong>Lagertitel:</strong> {{ camp_title }} <br />
+        <strong>Organisator:</strong> {{ camp_organizer }}
     </p>
 
     {% with { title: 'Einladung beantworten', url: url } %}
diff --git a/api/templates/emails/campCollaborationInvite.de.text.twig b/api/templates/emails/campCollaborationInvite.de.text.twig
index 73dcedf35a..8ac473c84a 100644
--- a/api/templates/emails/campCollaborationInvite.de.text.twig
+++ b/api/templates/emails/campCollaborationInvite.de.text.twig
@@ -1,9 +1,9 @@
-Einladung zur Mitarbeit beim Lager "{{ camp_name | raw }}"
+Einladung zur Mitarbeit beim Lager "{{ camp_title | raw }}"
 
 Du wurdest von {{ by_user | raw }} eingeladen, bei folgendem Lager mitzuwirken.
 
-Name: {{ camp_name | raw }}
 Titel: {{ camp_title | raw }}
+Organisator: {{ camp_organizer | raw }}
 
 Klicke hier, um die Einladung zu beantworten:
 {{ url | raw }}
diff --git a/api/templates/emails/campCollaborationInvite.en.html.twig b/api/templates/emails/campCollaborationInvite.en.html.twig
index dc03914b4c..0c99c4d53b 100644
--- a/api/templates/emails/campCollaborationInvite.en.html.twig
+++ b/api/templates/emails/campCollaborationInvite.en.html.twig
@@ -1,16 +1,16 @@
-{% set preheader = 'Invitation to camp ' ~ camp_name %}
+{% set preheader = 'Invitation to camp ' ~ camp_title %}
 {% extends 'emails/baseLayout.twig' %}
 
 
 {% block content %}
-    <h1>Invitation to camp "{{ camp_name }}"</h1>
+    <h1>Invitation to camp "{{ camp_title }}"</h1>
     <p>Hi,</p>
     <p>
-        You have been invited by {{ by_user }} to collaborate in the following camp: 
-    </p> 
+        You have been invited by {{ by_user }} to collaborate in the following camp:
+    </p>
     <p>
-        <strong>Name:</strong> {{ camp_name }} <br />
-        <strong>Title:</strong> {{ camp_title }}
+        <strong>Title:</strong> {{ camp_title }} <br />
+        <strong>Organizer:</strong> {{ camp_organizer }}
     </p>
 
     {% with { title: 'Answer the invitation', url: url } %}
diff --git a/api/templates/emails/campCollaborationInvite.en.text.twig b/api/templates/emails/campCollaborationInvite.en.text.twig
index fd9973633d..0e63c649d7 100644
--- a/api/templates/emails/campCollaborationInvite.en.text.twig
+++ b/api/templates/emails/campCollaborationInvite.en.text.twig
@@ -1,9 +1,9 @@
-Invitation to camp "{{ camp_name | raw }}"
+Invitation to camp "{{ camp_title | raw }}"
 
 You have been invited by {{ by_user | raw }} to collaborate in the following camp:
 
-Name: {{ camp_name | raw }}
 Title: {{ camp_title | raw }}
+Organizer: {{ camp_organizer | raw }}
 
 Answer the invitation:
 {{ url | raw }}
diff --git a/api/tests/Api/Camps/CreateCampTest.php b/api/tests/Api/Camps/CreateCampTest.php
index f9a12d5e10..1024815a4c 100644
--- a/api/tests/Api/Camps/CreateCampTest.php
+++ b/api/tests/Api/Camps/CreateCampTest.php
@@ -215,66 +215,36 @@ public function testCreateCampCreatesPeriodAndDays() {
 
     public function testCreateCampTrimsName() {
         static::createClientWithCredentials()->request('POST', '/camps', ['json' => $this->getExampleWritePayload([
-            'name' => " So-La\t ",
+            'shortTitle' => " So-La\t ",
         ])]);
 
         $this->assertResponseStatusCodeSame(201);
         $this->assertJsonContains($this->getExampleReadPayload([
-            'name' => 'So-La',
+            'shortTitle' => 'So-La',
         ]));
     }
 
     public function testCreateCampCleansForbiddenCharactersFromName() {
         static::createClientWithCredentials()->request('POST', '/camps', ['json' => $this->getExampleWritePayload([
-            'name' => "So-\n\tLa",
+            'shortTitle' => "So-\n\tLa",
         ])]);
 
         $this->assertResponseStatusCodeSame(201);
         $this->assertJsonContains($this->getExampleReadPayload([
-            'name' => 'So-La',
+            'shortTitle' => 'So-La',
         ]));
     }
 
-    public function testCreateCampValidatesMissingName() {
-        static::createClientWithCredentials()->request('POST', '/camps', ['json' => $this->getExampleWritePayload([], ['name'])]);
-
-        $this->assertResponseStatusCodeSame(422);
-        $this->assertJsonContains([
-            'violations' => [
-                [
-                    'propertyPath' => 'name',
-                    'message' => 'This value should not be blank.',
-                ],
-            ],
-        ]);
-    }
-
-    public function testCreateCampValidatesBlankName() {
-        static::createClientWithCredentials()->request('POST', '/camps', ['json' => $this->getExampleWritePayload([
-            'name' => '',
-        ])]);
-
-        $this->assertResponseStatusCodeSame(422);
-        $this->assertJsonContains([
-            'violations' => [
-                [
-                    'propertyPath' => 'name',
-                    'message' => 'This value should not be blank.',
-                ],
-            ],
-        ]);
-    }
-
     public function testCreateCampValidatesLongName() {
         static::createClientWithCredentials()->request('POST', '/camps', ['json' => $this->getExampleWritePayload([
-            'name' => 'A very long camp name which is not really useful',
+            'shortTitle' => 'A very long camp name which is not really useful',
         ])]);
 
         $this->assertResponseStatusCodeSame(422);
         $this->assertJsonContains([
             'violations' => [
                 [
-                    'propertyPath' => 'name',
+                    'propertyPath' => 'shortTitle',
                     'message' => 'This value is too long. It should have 32 characters or less.',
                 ],
             ],
@@ -762,7 +732,7 @@ public function testCreateCampReturnsProperDatesInTimezoneBehindUTC() {
 
     public function testCreateCampValidatesTooLongNameAndIncludesTranslationInfo() {
         static::createClientWithCredentials()->request('POST', '/camps', ['json' => $this->getExampleWritePayload([
-            'name' => 'This camp name has 33 characters!',
+            'shortTitle' => 'This camp name has 33 characters!',
         ])]);
 
         $this->assertResponseStatusCodeSame(422);
diff --git a/api/tests/Api/Camps/ReadCampTest.php b/api/tests/Api/Camps/ReadCampTest.php
index df95ce9973..1742b2c2b0 100644
--- a/api/tests/Api/Camps/ReadCampTest.php
+++ b/api/tests/Api/Camps/ReadCampTest.php
@@ -49,7 +49,7 @@ public function testGetSingleCampIsAllowedForGuest() {
         $this->assertResponseStatusCodeSame(200);
         $this->assertJsonContains([
             'id' => $camp->getId(),
-            'name' => $camp->name,
+            'shortTitle' => $camp->shortTitle,
             'title' => $camp->title,
             'motto' => $camp->motto,
             'addressName' => $camp->addressName,
@@ -83,7 +83,7 @@ public function testGetSingleCampIsAllowedForMember() {
         $this->assertResponseStatusCodeSame(200);
         $this->assertJsonContains([
             'id' => $camp->getId(),
-            'name' => $camp->name,
+            'shortTitle' => $camp->shortTitle,
             'title' => $camp->title,
             'motto' => $camp->motto,
             'addressName' => $camp->addressName,
@@ -110,7 +110,7 @@ public function testGetSingleCampIsAllowedForManager() {
         $this->assertResponseStatusCodeSame(200);
         $this->assertJsonContains([
             'id' => $camp->getId(),
-            'name' => $camp->name,
+            'shortTitle' => $camp->shortTitle,
             'title' => $camp->title,
             'motto' => $camp->motto,
             'addressName' => $camp->addressName,
@@ -137,7 +137,7 @@ public function testGetSinglePrototypeCampIsAllowedForUnrelatedUser() {
         $this->assertResponseStatusCodeSame(200);
         $this->assertJsonContains([
             'id' => $camp->getId(),
-            'name' => $camp->name,
+            'shortTitle' => $camp->shortTitle,
             'title' => $camp->title,
             'motto' => $camp->motto,
             'addressName' => $camp->addressName,
@@ -163,7 +163,7 @@ public function testGetSinglePrototypeCampIsAllowedForUnrelatedUserEvenWithoutAn
         $this->assertResponseStatusCodeSame(200);
         $this->assertJsonContains([
             'id' => $camp->getId(),
-            'name' => $camp->name,
+            'shortTitle' => $camp->shortTitle,
             'title' => $camp->title,
             'motto' => $camp->motto,
             'addressName' => $camp->addressName,
diff --git a/api/tests/Api/Camps/UpdateCampTest.php b/api/tests/Api/Camps/UpdateCampTest.php
index c6b83ebcfc..9ccdebd592 100644
--- a/api/tests/Api/Camps/UpdateCampTest.php
+++ b/api/tests/Api/Camps/UpdateCampTest.php
@@ -125,55 +125,38 @@ public function testPatchCampDisallowsSettingIsPrototype() {
     public function testPatchCampTrimsName() {
         $camp = static::getFixture('camp1');
         static::createClientWithCredentials()->request('PATCH', '/camps/'.$camp->getId(), ['json' => [
-            'name' => " So-La\t ",
+            'shortTitle' => " So-La\t ",
         ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
 
         $this->assertResponseStatusCodeSame(200);
         $this->assertJsonContains([
-            'name' => 'So-La',
+            'shortTitle' => 'So-La',
         ]);
     }
 
     public function testPatchCampCleansForbiddenCharactersFromName() {
         $camp = static::getFixture('camp1');
         static::createClientWithCredentials()->request('PATCH', '/camps/'.$camp->getId(), ['json' => [
-            'name' => "So-\n\tLa",
+            'shortTitle' => "So-\n\tLa",
         ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
 
         $this->assertResponseStatusCodeSame(200);
         $this->assertJsonContains([
-            'name' => 'So-La',
-        ]);
-    }
-
-    public function testPatchCampValidatesBlankName() {
-        $camp = static::getFixture('camp1');
-        static::createClientWithCredentials()->request('PATCH', '/camps/'.$camp->getId(), ['json' => [
-            'name' => '',
-        ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
-
-        $this->assertResponseStatusCodeSame(422);
-        $this->assertJsonContains([
-            'violations' => [
-                [
-                    'propertyPath' => 'name',
-                    'message' => 'This value should not be blank.',
-                ],
-            ],
+            'shortTitle' => 'So-La',
         ]);
     }
 
     public function testPatchCampValidatesLongName() {
         $camp = static::getFixture('camp1');
         static::createClientWithCredentials()->request('PATCH', '/camps/'.$camp->getId(), ['json' => [
-            'name' => 'A very long camp name which is not really useful',
+            'shortTitle' => 'A very long camp name which is not really useful',
         ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
 
         $this->assertResponseStatusCodeSame(422);
         $this->assertJsonContains([
             'violations' => [
                 [
-                    'propertyPath' => 'name',
+                    'propertyPath' => 'shortTitle',
                     'message' => 'This value is too long. It should have 32 characters or less.',
                 ],
             ],
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camp_collaborations__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camp_collaborations__1.json
index e2ff2cbcd4..7c4abf4910 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camp_collaborations__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camp_collaborations__1.json	
@@ -44,7 +44,7 @@
                         "isPrototype": "escaped_value",
                         "kind": "escaped_value",
                         "motto": "escaped_value",
-                        "name": "escaped_value",
+                        "shortTitle": "escaped_value",
                         "organizer": "escaped_value",
                         "printYSLogoOnPicasso": "escaped_value",
                         "title": "escaped_value",
@@ -111,7 +111,7 @@
                         "isPrototype": "escaped_value",
                         "kind": "escaped_value",
                         "motto": "escaped_value",
-                        "name": "escaped_value",
+                        "shortTitle": "escaped_value",
                         "organizer": "escaped_value",
                         "printYSLogoOnPicasso": "escaped_value",
                         "title": "escaped_value",
@@ -193,7 +193,7 @@
                         "isPrototype": "escaped_value",
                         "kind": "escaped_value",
                         "motto": "escaped_value",
-                        "name": "escaped_value",
+                        "shortTitle": "escaped_value",
                         "organizer": "escaped_value",
                         "printYSLogoOnPicasso": "escaped_value",
                         "title": "escaped_value",
@@ -275,7 +275,7 @@
                         "isPrototype": "escaped_value",
                         "kind": "escaped_value",
                         "motto": "escaped_value",
-                        "name": "escaped_value",
+                        "shortTitle": "escaped_value",
                         "organizer": "escaped_value",
                         "printYSLogoOnPicasso": "escaped_value",
                         "title": "escaped_value",
@@ -357,7 +357,7 @@
                         "isPrototype": "escaped_value",
                         "kind": "escaped_value",
                         "motto": "escaped_value",
-                        "name": "escaped_value",
+                        "shortTitle": "escaped_value",
                         "organizer": "escaped_value",
                         "printYSLogoOnPicasso": "escaped_value",
                         "title": "escaped_value",
@@ -439,7 +439,7 @@
                         "isPrototype": "escaped_value",
                         "kind": "escaped_value",
                         "motto": "escaped_value",
-                        "name": "escaped_value",
+                        "shortTitle": "escaped_value",
                         "organizer": "escaped_value",
                         "printYSLogoOnPicasso": "escaped_value",
                         "title": "escaped_value",
@@ -521,7 +521,7 @@
                         "isPrototype": "escaped_value",
                         "kind": "escaped_value",
                         "motto": "escaped_value",
-                        "name": "escaped_value",
+                        "shortTitle": "escaped_value",
                         "organizer": "escaped_value",
                         "printYSLogoOnPicasso": "escaped_value",
                         "title": "escaped_value",
@@ -603,7 +603,7 @@
                         "isPrototype": "escaped_value",
                         "kind": "escaped_value",
                         "motto": "escaped_value",
-                        "name": "escaped_value",
+                        "shortTitle": "escaped_value",
                         "organizer": "escaped_value",
                         "printYSLogoOnPicasso": "escaped_value",
                         "title": "escaped_value",
@@ -685,7 +685,7 @@
                         "isPrototype": "escaped_value",
                         "kind": "escaped_value",
                         "motto": "escaped_value",
-                        "name": "escaped_value",
+                        "shortTitle": "escaped_value",
                         "organizer": "escaped_value",
                         "printYSLogoOnPicasso": "escaped_value",
                         "title": "escaped_value",
@@ -767,7 +767,7 @@
                         "isPrototype": "escaped_value",
                         "kind": "escaped_value",
                         "motto": "escaped_value",
-                        "name": "escaped_value",
+                        "shortTitle": "escaped_value",
                         "organizer": "escaped_value",
                         "printYSLogoOnPicasso": "escaped_value",
                         "title": "escaped_value",
@@ -849,7 +849,7 @@
                         "isPrototype": "escaped_value",
                         "kind": "escaped_value",
                         "motto": "escaped_value",
-                        "name": "escaped_value",
+                        "shortTitle": "escaped_value",
                         "organizer": "escaped_value",
                         "printYSLogoOnPicasso": "escaped_value",
                         "title": "escaped_value",
@@ -931,7 +931,7 @@
                         "isPrototype": "escaped_value",
                         "kind": "escaped_value",
                         "motto": "escaped_value",
-                        "name": "escaped_value",
+                        "shortTitle": "escaped_value",
                         "organizer": "escaped_value",
                         "printYSLogoOnPicasso": "escaped_value",
                         "title": "escaped_value",
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camps__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camps__1.json
index 2fa972bec6..066519f54a 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camps__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camps__1.json	
@@ -42,7 +42,7 @@
                 "isPrototype": "escaped_value",
                 "kind": "escaped_value",
                 "motto": "escaped_value",
-                "name": "escaped_value",
+                "shortTitle": "escaped_value",
                 "organizer": "escaped_value",
                 "printYSLogoOnPicasso": "escaped_value",
                 "title": "escaped_value",
@@ -89,7 +89,7 @@
                 "isPrototype": "escaped_value",
                 "kind": "escaped_value",
                 "motto": "escaped_value",
-                "name": "escaped_value",
+                "shortTitle": "escaped_value",
                 "organizer": "escaped_value",
                 "printYSLogoOnPicasso": "escaped_value",
                 "title": "escaped_value",
@@ -136,7 +136,7 @@
                 "isPrototype": "escaped_value",
                 "kind": "escaped_value",
                 "motto": "escaped_value",
-                "name": "escaped_value",
+                "shortTitle": "escaped_value",
                 "organizer": "escaped_value",
                 "printYSLogoOnPicasso": "escaped_value",
                 "title": "escaped_value",
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camp_collaborations__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camp_collaborations__1.json
index c84f1c605b..50cdbc9b41 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camp_collaborations__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camp_collaborations__1.json	
@@ -41,7 +41,7 @@
             "isPrototype": "escaped_value",
             "kind": "escaped_value",
             "motto": "escaped_value",
-            "name": "escaped_value",
+            "shortTitle": "escaped_value",
             "organizer": "escaped_value",
             "printYSLogoOnPicasso": "escaped_value",
             "title": "escaped_value",
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camps__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camps__1.json
index 9afc1cba01..8bdacca806 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camps__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camps__1.json	
@@ -432,7 +432,7 @@
     "isPrototype": "escaped_value",
     "kind": "escaped_value",
     "motto": "escaped_value",
-    "name": "escaped_value",
+    "shortTitle": "escaped_value",
     "organizer": "escaped_value",
     "printYSLogoOnPicasso": "escaped_value",
     "title": "escaped_value",
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set periods__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set periods__1.json
index 2075727cda..78fd47a3d6 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set periods__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set periods__1.json	
@@ -41,7 +41,7 @@
             "isPrototype": "escaped_value",
             "kind": "escaped_value",
             "motto": "escaped_value",
-            "name": "escaped_value",
+            "shortTitle": "escaped_value",
             "organizer": "escaped_value",
             "printYSLogoOnPicasso": "escaped_value",
             "title": "escaped_value",
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
index 4a919ee253..37289afe34 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
@@ -2398,11 +2398,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -2444,6 +2439,13 @@ components:
             type: string
           readOnly: true
           type: array
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -2461,7 +2463,6 @@ components:
         - campCollaborations
         - categories
         - materialLists
-        - name
         - periods
         - printYSLogoOnPicasso
         - progressLabels
@@ -2591,11 +2592,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -2630,6 +2626,13 @@ components:
             type: string
           readOnly: true
           type: array
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -2647,7 +2650,6 @@ components:
         - campCollaborations
         - categories
         - materialLists
-        - name
         - periods
         - printYSLogoOnPicasso
         - progressLabels
@@ -2773,11 +2775,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -2819,6 +2816,13 @@ components:
             type: string
           readOnly: true
           type: array
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -2836,7 +2840,6 @@ components:
         - campCollaborations
         - categories
         - materialLists
-        - name
         - periods
         - printYSLogoOnPicasso
         - progressLabels
@@ -2962,11 +2965,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -3008,6 +3006,13 @@ components:
             type: string
           readOnly: true
           type: array
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -3025,7 +3030,6 @@ components:
         - campCollaborations
         - categories
         - materialLists
-        - name
         - periods
         - printYSLogoOnPicasso
         - progressLabels
@@ -3108,11 +3112,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -3135,6 +3134,13 @@ components:
           description: 'Whether the Y+S logo should be printed on the picasso of this camp.'
           example: true
           type: boolean
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -3148,7 +3154,6 @@ components:
             - 'null'
             - string
       required:
-        - name
         - periods
         - printYSLogoOnPicasso
         - title
@@ -3222,11 +3227,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -3238,6 +3238,13 @@ components:
           description: 'Whether the Y+S logo should be printed on the picasso of this camp.'
           example: true
           type: boolean
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -3251,7 +3258,6 @@ components:
             - 'null'
             - string
       required:
-        - name
         - printYSLogoOnPicasso
         - title
       type: object
@@ -3329,11 +3335,6 @@ components:
                   example: Piraten
                   maxLength: 128
                   type: ['null', string]
-                name:
-                  description: 'A short name for the camp.'
-                  example: 'SoLa 2022'
-                  maxLength: 32
-                  type: string
                 organizer:
                   description: 'The name of the organization which plans and carries out the camp.'
                   example: 'Pfadi Luftig'
@@ -3343,6 +3344,11 @@ components:
                   description: 'Whether the Y+S logo should be printed on the picasso of this camp.'
                   example: true
                   type: boolean
+                shortTitle:
+                  description: 'A short title for the camp.'
+                  example: 'SoLa 2022'
+                  maxLength: 32
+                  type: ['null', string]
                 title:
                   description: 'The full title of the camp.'
                   example: 'Abteilungs-Sommerlager 2022'
@@ -3354,7 +3360,6 @@ components:
                   maxLength: 64
                   type: ['null', string]
               required:
-                - name
                 - printYSLogoOnPicasso
                 - title
               type: object
@@ -3558,11 +3563,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -3604,6 +3604,13 @@ components:
             type: string
           readOnly: true
           type: array
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -3621,7 +3628,6 @@ components:
         - campCollaborations
         - categories
         - materialLists
-        - name
         - periods
         - printYSLogoOnPicasso
         - progressLabels
@@ -3760,11 +3766,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -3799,6 +3800,13 @@ components:
             type: string
           readOnly: true
           type: array
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -3816,7 +3824,6 @@ components:
         - campCollaborations
         - categories
         - materialLists
-        - name
         - periods
         - printYSLogoOnPicasso
         - progressLabels
@@ -3951,11 +3958,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -3997,6 +3999,13 @@ components:
             type: string
           readOnly: true
           type: array
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -4014,7 +4023,6 @@ components:
         - campCollaborations
         - categories
         - materialLists
-        - name
         - periods
         - printYSLogoOnPicasso
         - progressLabels
@@ -4149,11 +4157,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -4195,6 +4198,13 @@ components:
             type: string
           readOnly: true
           type: array
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -4212,7 +4222,6 @@ components:
         - campCollaborations
         - categories
         - materialLists
-        - name
         - periods
         - printYSLogoOnPicasso
         - progressLabels
@@ -4304,11 +4313,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -4331,6 +4335,13 @@ components:
           description: 'Whether the Y+S logo should be printed on the picasso of this camp.'
           example: true
           type: boolean
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -4344,7 +4355,6 @@ components:
             - 'null'
             - string
       required:
-        - name
         - periods
         - printYSLogoOnPicasso
         - title
@@ -4494,11 +4504,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -4540,6 +4545,13 @@ components:
             type: string
           readOnly: true
           type: array
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -4557,7 +4569,6 @@ components:
         - campCollaborations
         - categories
         - materialLists
-        - name
         - periods
         - printYSLogoOnPicasso
         - progressLabels
@@ -4710,11 +4721,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -4749,6 +4755,13 @@ components:
             type: string
           readOnly: true
           type: array
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -4766,7 +4779,6 @@ components:
         - campCollaborations
         - categories
         - materialLists
-        - name
         - periods
         - printYSLogoOnPicasso
         - progressLabels
@@ -4915,11 +4927,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -4961,6 +4968,13 @@ components:
             type: string
           readOnly: true
           type: array
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -4978,7 +4992,6 @@ components:
         - campCollaborations
         - categories
         - materialLists
-        - name
         - periods
         - printYSLogoOnPicasso
         - progressLabels
@@ -5127,11 +5140,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -5173,6 +5181,13 @@ components:
             type: string
           readOnly: true
           type: array
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -5190,7 +5205,6 @@ components:
         - campCollaborations
         - categories
         - materialLists
-        - name
         - periods
         - printYSLogoOnPicasso
         - progressLabels
@@ -5273,11 +5287,6 @@ components:
           type:
             - 'null'
             - string
-        name:
-          description: 'A short name for the camp.'
-          example: 'SoLa 2022'
-          maxLength: 32
-          type: string
         organizer:
           description: 'The name of the organization which plans and carries out the camp.'
           example: 'Pfadi Luftig'
@@ -5300,6 +5309,13 @@ components:
           description: 'Whether the Y+S logo should be printed on the picasso of this camp.'
           example: true
           type: boolean
+        shortTitle:
+          description: 'A short title for the camp.'
+          example: 'SoLa 2022'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
         title:
           description: 'The full title of the camp.'
           example: 'Abteilungs-Sommerlager 2022'
@@ -5313,7 +5329,6 @@ components:
             - 'null'
             - string
       required:
-        - name
         - periods
         - printYSLogoOnPicasso
         - title
diff --git a/api/tests/Entity/CampTest.php b/api/tests/Entity/CampTest.php
index e83f008472..b228b48fcf 100644
--- a/api/tests/Entity/CampTest.php
+++ b/api/tests/Entity/CampTest.php
@@ -25,7 +25,7 @@ class CampTest extends TestCase {
     public function setUp(): void {
         $this->campPrototype = new Camp();
         $this->campPrototype->isPrototype = true;
-        $this->campPrototype->name = 'camp-name';
+        $this->campPrototype->shortTitle = 'camp-name';
         $this->campPrototype->title = 'camp-title';
         $this->campPrototype->motto = 'camp-motto';
 
diff --git a/api/tests/Service/MailServiceTest.php b/api/tests/Service/MailServiceTest.php
index 14846bfaa7..714dcb69cc 100644
--- a/api/tests/Service/MailServiceTest.php
+++ b/api/tests/Service/MailServiceTest.php
@@ -41,7 +41,7 @@ protected function setUp(): void {
         $this->user->profile = $profile;
 
         $this->camp = new Camp();
-        $this->camp->name = 'some camp';
+        $this->camp->shortTitle = 'some camp';
         $this->camp->title = 'some camp title';
     }
 
@@ -52,13 +52,13 @@ public function testSendInviteToCampMailDeChScout() {
         self::assertEmailCount(1);
         $mailerMessage = self::getMailerMessage(0);
         self::assertEmailAddressContains($mailerMessage, 'To', self::INVITE_MAIL);
-        self::assertEmailHeaderSame($mailerMessage, 'subject', '[eCamp v3] Du wurdest ins Lager "some camp" eingeladen');
+        self::assertEmailHeaderSame($mailerMessage, 'subject', '[eCamp v3] Du wurdest ins Lager "some camp title" eingeladen');
 
-        self::assertEmailHtmlBodyContains($mailerMessage, $this->camp->name);
+        self::assertEmailHtmlBodyContains($mailerMessage, $this->camp->title);
         self::assertEmailHtmlBodyContains($mailerMessage, $this->user->getDisplayName());
         self::assertEmailHtmlBodyContains($mailerMessage, self::INVITE_KEY);
 
-        self::assertEmailTextBodyContains($mailerMessage, $this->camp->name);
+        self::assertEmailTextBodyContains($mailerMessage, $this->camp->title);
         self::assertEmailTextBodyContains($mailerMessage, $this->user->getDisplayName());
         self::assertEmailTextBodyContains($mailerMessage, self::INVITE_KEY);
     }
@@ -72,11 +72,11 @@ public function testSendInvitationMailDoesNotCrashForAllLanguages(string $langua
         $mailerMessage = self::getMailerMessage(0);
         self::assertEmailAddressContains($mailerMessage, 'To', self::INVITE_MAIL);
 
-        self::assertEmailHtmlBodyContains($mailerMessage, $this->camp->name);
+        self::assertEmailHtmlBodyContains($mailerMessage, $this->camp->title);
         self::assertEmailHtmlBodyContains($mailerMessage, $this->user->getDisplayName());
         self::assertEmailHtmlBodyContains($mailerMessage, self::INVITE_KEY);
 
-        self::assertEmailTextBodyContains($mailerMessage, $this->camp->name);
+        self::assertEmailTextBodyContains($mailerMessage, $this->camp->title);
         self::assertEmailTextBodyContains($mailerMessage, $this->user->getDisplayName());
         self::assertEmailTextBodyContains($mailerMessage, self::INVITE_KEY);
     }
diff --git a/api/translations/email+intl-icu.de.json b/api/translations/email+intl-icu.de.json
index 08097db216..81a3d5388c 100644
--- a/api/translations/email+intl-icu.de.json
+++ b/api/translations/email+intl-icu.de.json
@@ -1,6 +1,6 @@
 {
     "inviteToCamp": {
-        "subject": "[eCamp v3] Du wurdest ins Lager \"{campName}\" eingeladen"
+        "subject": "[eCamp v3] Du wurdest ins Lager \"{campTitle}\" eingeladen"
     },
     "userActivation": {
         "subject": "Willkommen bei eCamp v3"
diff --git a/api/translations/email+intl-icu.en.json b/api/translations/email+intl-icu.en.json
index df5e61e81e..6e6c763fba 100644
--- a/api/translations/email+intl-icu.en.json
+++ b/api/translations/email+intl-icu.en.json
@@ -1,6 +1,6 @@
 {
     "inviteToCamp": {
-        "subject": "[eCamp v3] You were invited to collaborate in camp \"{campName}\""
+        "subject": "[eCamp v3] You were invited to collaborate in camp \"{campTitle}\""
     },
     "userActivation": {
         "subject": "Welcome to eCamp v3"
diff --git a/common/helpers/__tests__/campShortTitle.spec.js b/common/helpers/__tests__/campShortTitle.spec.js
new file mode 100644
index 0000000000..9f9dd11640
--- /dev/null
+++ b/common/helpers/__tests__/campShortTitle.spec.js
@@ -0,0 +1,35 @@
+import { campShortTitle } from '../campShortTitle.js'
+
+describe('campShortTitle', () => {
+  it.each([
+    [{ shortTitle: null, title: 'Sommerlager Pfadistufe 2024' }, 'SoLa24 Pfadis'],
+    [{ shortTitle: null, title: 'HeLa Wolfsstufe 2024' }, 'HeLa24 Wölfli'],
+    [{ shortTitle: null, title: 'Bezirkspfingstlager Rover 2025' }, 'BezPfiLa25 Rover'],
+    [{ shortTitle: null, title: 'PfiLa Pfadistufe 2024' }, 'PfiLa24 Pfadis'],
+    [{ shortTitle: null, title: 'Pfingstlager 2024' }, 'PfiLa 2024'],
+    [{ shortTitle: null, title: 'Pio SoLa 2024' }, 'Pio SoLa 2024'],
+    [{ shortTitle: null, title: 'Herbstlager 2024' }, 'HeLa 2024'],
+    [{ shortTitle: null, title: 'Auffahrtslager 2025 Pfadi Olymp' }, 'AufLa25PfadiOlym'],
+    [{ shortTitle: null, title: 'Sola 2024 Jubla BuechBerg' }, 'SoLa24JublaBuech'],
+    [{ shortTitle: null, title: 'Pfingstlager PTA Bern 2024' }, 'PfiLa24 PTA Bern'],
+    [{ shortTitle: null, title: 'PfiLa 24 -Wolfsstufe Falkenstein' }, 'PfiLa24-WölfliFa'],
+    [{ shortTitle: null, title: 'MoBe Klassenlager 2018 Scuol' }, 'MoBeKlaLa18Scuol'],
+    [{ shortTitle: null, title: 'Cevilager Thun 2024' }, 'Cevilager24 Thun'],
+    [{ shortTitle: null, title: 'Sommerlager Blauring 2024' }, 'SoLa24 Blauring'],
+    [{ shortTitle: null, title: 'Sola24 Pfadistufe und Wölfli' }, 'SoLa24Pfadis&Wöl'],
+    [{ shortTitle: null, title: 'Dracheburg Pfila 2024' }, 'DracheburgPfiLa2'],
+    [{ shortTitle: null, title: 'Pio Bezirkspfila 2024' }, 'Pio BezPfiLa24'],
+    [{ shortTitle: null, title: 'Piostufensola 12.12.2026' }, 'PioSoLa26 12.12.'],
+
+    [{ shortTitle: 'Pfila 2024', title: 'Pfingstlager 2024' }, 'Pfila 2024'],
+    [{ shortTitle: 'Pfila 2024', title: null }, 'Pfila 2024'],
+    [{ shortTitle: null, title: null }, ''],
+    [{ shortTitle: undefined, title: null }, ''],
+    [{ shortTitle: '0', title: 'Sola24' }, '0'],
+    [{ shortTitle: '', title: 'Sola24' }, 'SoLa24'],
+    [null, ''],
+    [undefined, ''],
+  ])('maps "%s" to "%s"', (input, expected) => {
+    expect(campShortTitle(input)).toEqual(expected)
+  })
+})
diff --git a/common/helpers/campShortTitle.js b/common/helpers/campShortTitle.js
new file mode 100644
index 0000000000..605674fc70
--- /dev/null
+++ b/common/helpers/campShortTitle.js
@@ -0,0 +1,59 @@
+const AUTOMATIC_SHORTNERS = [
+  { regex: /So(?:mmer)?la(?:ger)?/gi, text: 'SoLa' },
+  { regex: /Pfi(?:ngst)?la(?:ger)?/gi, text: 'PfiLa' },
+  { regex: /He(?:rbst)?la(?:ger)?/gi, text: 'HeLa' },
+]
+
+const ADDITIONAL_SHORTNERS = [
+  { regex: /Auslandssola/gi, text: 'AuLa' },
+  { regex: /Auffahrtslager/gi, text: 'AufLa' },
+  { regex: /Abteilungslager/gi, text: 'AbLa' },
+  { regex: /Klassenlager/gi, text: 'KlaLa' },
+  {
+    regex: /(Bez)irks(So|Ab|Au|Auf|He|Pfi)La|(Ka)ntonslager|(Bu)ndeslager/gi,
+    text: '$1$2$3$4La',
+  },
+  {
+    regex:
+      /(?<start>.*?\b)?(?<camp>[a-z]{2,}La(?:ger)?)(?<middle>(?:\s(?!19|20))|.*?)\s?(?:(?:19|20)(?<year>\d{2}))(?<end>.*)/gi,
+    text: '$<start>$<camp>$<year>$<middle>$<end>',
+  },
+  { regex: /(Pfadi|Pio|Rover)stufe(?!n)/g, text: '$1s' },
+  { regex: /(B)ieberstufe(?!n)/g, text: '$1ieberli' },
+  { regex: /(W)olfs?stufe(?!n)/g, text: '$1ölfli' },
+  {
+    regex: /(Bieber|Wolfs|Pfadi|Pio|Rover)stufen(So|Ab|Au|Auf|He|Pfi)La/gi,
+    text: '$1$2La',
+  },
+  { regex: /\bund\b/g, text: '&' },
+  { regex: /\b(?:19|20)(\d{2})\b/g, text: '$1' },
+  { regex: /\s/g, text: '' },
+]
+
+function campShortTitle(camp) {
+  if (camp?.shortTitle != null && camp.shortTitle !== '') {
+    return camp.shortTitle.substring(0, 16)
+  }
+
+  let title = camp?.title ?? ''
+
+  for (const { regex, text } of AUTOMATIC_SHORTNERS) {
+    title = title.replace(regex, text)
+  }
+
+  if (title.length <= 16) {
+    return title
+  }
+
+  for (const { regex, text } of ADDITIONAL_SHORTNERS) {
+    title = title.replace(regex, text)
+    if (title.length <= 16) {
+      return title
+    }
+  }
+  return title.substring(0, 16)
+}
+
+export { campShortTitle }
+
+export default campShortTitle
diff --git a/common/locales/de.json b/common/locales/de.json
index c8f3f1d83f..f4269e6170 100644
--- a/common/locales/de.json
+++ b/common/locales/de.json
@@ -128,10 +128,10 @@
         "courseKind": "Kursbezeichnung (bei J+S Kurs: J+S Bezeichnung)",
         "courseNumber": "Kursnummer",
         "kind": "Lagerart (Haus-, Zelt-, Unterwegslager, Sommer-, Herbstlager)",
-        "motto": "Motto",
-        "name": "Lagername",
+        "motto": "Motto / Thema",
         "organizer": "Organisator",
         "printYSLogoOnPicasso": "J+S-Logo auf Grobprogramm drucken (bei J+S-Kursen aktivieren)",
+        "shortTitle": "Kurzer Lagertitel",
         "title": "Lagertitel",
         "trainingAdvisorName": "Bürgerlicher Name der Betreuungsperson"
       },
diff --git a/common/locales/en.json b/common/locales/en.json
index 1093dd758c..37d1da996b 100644
--- a/common/locales/en.json
+++ b/common/locales/en.json
@@ -135,11 +135,11 @@
         "courseKind": "Course kind (for Y+S courses: Y+S course term)",
         "courseNumber": "Course number",
         "kind": "Camp kind (house, tent, traveling, summer, autumn)",
-        "motto": "Motto",
-        "name": "Name",
+        "motto": "Motto / Theme",
         "organizer": "Organizer",
         "printYSLogoOnPicasso": "Print the Y+S logo on the picasso (required for Y+S courses)",
-        "title": "Title",
+        "shortTitle": "Short camp title",
+        "title": "Camp title",
         "trainingAdvisorName": "Name of training advisor"
       },
       "name": "Camp | Camps",
diff --git a/common/locales/fr.json b/common/locales/fr.json
index db1a1a74a4..56d0d34ae0 100644
--- a/common/locales/fr.json
+++ b/common/locales/fr.json
@@ -117,10 +117,10 @@
         "courseKind": "Type de cours (pour les cours J+S: description du cours)",
         "courseNumber": "Numéro de cours",
         "kind": "Type de camp (chalet, tente, itinérant, été, automne)",
-        "motto": "Thème",
-        "name": "Nom du camp",
+        "motto": "Motto / thème",
         "organizer": "Organisateur",
         "printYSLogoOnPicasso": "Imprimer le logo J+S sur le programme général (requis pour les cours J+S)",
+        "shortTitle": "Titre court du camp",
         "title": "Titre du camp",
         "trainingAdvisorName": "Nom du coach J+S"
       },
diff --git a/common/locales/it.json b/common/locales/it.json
index f7ea5a4054..3a9316024a 100644
--- a/common/locales/it.json
+++ b/common/locales/it.json
@@ -114,8 +114,8 @@
         "addressName": "Nome",
         "addressStreet": "Via",
         "addressZipcode": "Codice postale",
-        "motto": "Motto",
-        "name": "Nome",
+        "motto": "Motto / Tema",
+        "shortTitle": "Titolo breve",
         "title": "Titolo"
       },
       "name": "Campo",
diff --git a/e2e/specs/nuxtPrint.cy.js b/e2e/specs/nuxtPrint.cy.js
index e9938c0b04..2b45952d08 100644
--- a/e2e/specs/nuxtPrint.cy.js
+++ b/e2e/specs/nuxtPrint.cy.js
@@ -28,7 +28,6 @@ describe('Nuxt print test', () => {
           '/?config=' +
           encodeURIComponent(JSON.stringify(printConfig))
       )
-      cy.contains(camp.name)
       cy.contains(camp.title)
       cy.contains(camp.motto)
 
diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index 55b1f2bc5a..4d4071fa2a 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -57,6 +57,7 @@ export default {
 }
 </script>
 <style lang="scss">
+@import 'src/scss/tailwind';
 @import 'src/scss/global';
 @import '~@mdi/font/css/materialdesignicons.css';
 
diff --git a/frontend/src/components/camp/CampListItem.vue b/frontend/src/components/camp/CampListItem.vue
new file mode 100644
index 0000000000..cbf857fd4e
--- /dev/null
+++ b/frontend/src/components/camp/CampListItem.vue
@@ -0,0 +1,45 @@
+<template>
+  <v-list-item two-line :to="campRoute(camp)">
+    <v-list-item-content>
+      <v-list-item-title class="d-flex gap-x-2 justify-space-between">
+        <strong class="whitespace-normal">{{ camp.title }}</strong>
+        <span>{{ date }}</span>
+      </v-list-item-title>
+      <v-list-item-subtitle class="d-flex gap-2 flex-wrap-reverse justify-space-between">
+        <span class="whitespace-normal">{{ camp.motto }}</span>
+        <span>{{ camp.organizer }}</span>
+      </v-list-item-subtitle>
+    </v-list-item-content>
+  </v-list-item>
+</template>
+
+<script>
+import { campRoute } from '@/router.js'
+export default {
+  name: 'CampListItem',
+  props: {
+    camp: { type: Object, required: true },
+  },
+  computed: {
+    periods() {
+      return this.camp.periods().items
+    },
+    date() {
+      if (!this.periods.length) return
+      const formatMY = new Intl.DateTimeFormat(this.$i18n.locale, {
+        year: 'numeric',
+        month: 'short',
+      })
+      return [...this.periods]
+        .sort((a, b) => new Date(a.start) - new Date(b.start))
+        .map((period) => {
+          return formatMY.formatRange(new Date(period.start), new Date(period.end))
+        })
+        .join(' | ')
+    },
+  },
+  methods: { campRoute },
+}
+</script>
+
+<style scoped></style>
diff --git a/frontend/src/components/campAdmin/CampDangerZone.vue b/frontend/src/components/campAdmin/CampDangerZone.vue
index 27fee7e7dd..232759aa37 100644
--- a/frontend/src/components/campAdmin/CampDangerZone.vue
+++ b/frontend/src/components/campAdmin/CampDangerZone.vue
@@ -25,7 +25,7 @@ Critical operations on camp
             <v-list-item-action>
               <dialog-entity-delete
                 :entity="camp"
-                :submit-enabled="promptText === camp.name"
+                :submit-enabled="promptText === camp.title"
                 icon="mdi-bomb"
                 @submit="$router.push({ name: 'camps' })"
               >
@@ -44,14 +44,14 @@ Critical operations on camp
                 <p class="body-1">
                   {{
                     $tc('components.campAdmin.campDangerZone.deleteCamp.explanation', 0, {
-                      campName: camp.name,
+                      campTitle: camp.title,
                     })
                   }}
                 </p>
                 <label>
                   {{
                     $tc('components.campAdmin.campDangerZone.deleteCamp.label', 0, {
-                      campName: camp.name,
+                      campTitle: camp.title,
                     })
                   }}
                   <e-text-field v-model="promptText" />
diff --git a/frontend/src/components/campAdmin/CampSettings.vue b/frontend/src/components/campAdmin/CampSettings.vue
index 8d402e47c0..d2face8fec 100644
--- a/frontend/src/components/campAdmin/CampSettings.vue
+++ b/frontend/src/components/campAdmin/CampSettings.vue
@@ -10,9 +10,15 @@ Displays details on a single camp and allows to edit them.
     <v-skeleton-loader v-if="camp._meta.loading" type="article" />
     <div v-else class="mt-3">
       <api-form :entity="camp" name="camp">
-        <api-text-field path="name" vee-rules="required" :disabled="disabled" />
+        <api-text-field path="title" vee-rules="required|max:32" :disabled="disabled" />
 
-        <api-text-field path="title" vee-rules="required" :disabled="disabled" />
+        <api-text-field
+          path="shortTitle"
+          :placeholder="campShortTitle(camp)"
+          :disabled="disabled"
+          persistent-placeholder
+          vee-rules="max:16"
+        />
 
         <api-text-field path="motto" :disabled="disabled" />
       </api-form>
@@ -24,6 +30,7 @@ Displays details on a single camp and allows to edit them.
 import ApiTextField from '@/components/form/api/ApiTextField.vue'
 import ContentGroup from '@/components/layout/ContentGroup.vue'
 import ApiForm from '@/components/form/api/ApiForm.vue'
+import campShortTitle from '@/common/helpers/campShortTitle.js'
 
 export default {
   name: 'CampSettings',
@@ -41,6 +48,9 @@ export default {
   data() {
     return {}
   },
+  methods: {
+    campShortTitle,
+  },
 }
 </script>
 
diff --git a/frontend/src/components/campCreate/CampCreateStep1.vue b/frontend/src/components/campCreate/CampCreateStep1.vue
index da9e095067..c5ebbc000c 100644
--- a/frontend/src/components/campCreate/CampCreateStep1.vue
+++ b/frontend/src/components/campCreate/CampCreateStep1.vue
@@ -4,19 +4,14 @@
       <e-form name="camp">
         <v-form ref="form" @submit.prevent="handleSubmit(() => $emit('next-step'))">
           <v-card-text>
-            <e-text-field
-              v-model="localCamp.name"
-              path="name"
-              vee-rules="required"
-              required
-              autofocus
-            />
             <e-text-field
               v-model="localCamp.title"
               path="title"
-              vee-rules="required"
+              :placeholder="$tc('components.campCreate.campCreateStep1.titlePlaceholder')"
+              vee-rules="required|max:32"
               required
             />
+            <e-text-field v-model="localCamp.organizer" path="organizer" />
             <e-text-field v-model="localCamp.motto" path="motto" />
             <CreateCampPeriods
               :add-period="addPeriod"
diff --git a/frontend/src/components/layout/SidebarListItem.vue b/frontend/src/components/layout/SidebarListItem.vue
index 65ce7b12ea..2982b3edb5 100644
--- a/frontend/src/components/layout/SidebarListItem.vue
+++ b/frontend/src/components/layout/SidebarListItem.vue
@@ -6,7 +6,9 @@
       </v-list-item-icon>
     </slot>
     <v-list-item-content>
-      <v-list-item-title>{{ title }}</v-list-item-title>
+      <v-list-item-title :class="{ 'whitespace-normal': titleMultiline }">{{
+        title
+      }}</v-list-item-title>
       <v-list-item-subtitle v-if="subtitle">{{ subtitle }}</v-list-item-subtitle>
     </v-list-item-content>
     <v-list-item-icon v-if="!hideChevron">
@@ -26,6 +28,7 @@ export default {
     hideChevron: { type: Boolean, default: false },
     to: { type: [String, Object], default: null },
     href: { type: [String, Object], default: null },
+    titleMultiline: { type: Boolean, default: false },
   },
 }
 </script>
diff --git a/frontend/src/components/material/useMaterialViewHelper.js b/frontend/src/components/material/useMaterialViewHelper.js
index d1862e18cc..817d8f5c5a 100644
--- a/frontend/src/components/material/useMaterialViewHelper.js
+++ b/frontend/src/components/material/useMaterialViewHelper.js
@@ -4,6 +4,7 @@ import * as XLSX from 'xlsx'
 import { slugify } from '@/plugins/slugify.js'
 import i18n from '@/plugins/i18n/index.js'
 import dayjs from '@/common/helpers/dayjs.js'
+import { campShortTitle } from '@/common/helpers/campShortTitle.js'
 import { apiStore } from '@/plugins/store/index.js'
 import { materialListFromRoute } from '@/router.js'
 import shortScheduleEntryDescription from './shortScheduleEntryDescription.js'
@@ -12,7 +13,7 @@ function generateFilename(camp, materialList) {
   const description = materialList
     ? [i18n.tc('components.material.useMaterialViewHelper.detail'), materialList]
     : [i18n.tc('components.material.useMaterialViewHelper.overview')]
-  const filename = [camp.name, ...description].map(slugify)
+  const filename = [campShortTitle(camp), ...description].map(slugify)
   return [...filename, dayjs().format('YYMMDDHHmmss')].join('_') + '.xlsx'
 }
 
diff --git a/frontend/src/components/print/PrintConfigurator.vue b/frontend/src/components/print/PrintConfigurator.vue
index 60863f5764..a72c3d04fa 100644
--- a/frontend/src/components/print/PrintConfigurator.vue
+++ b/frontend/src/components/print/PrintConfigurator.vue
@@ -112,6 +112,7 @@ import { getEnv } from '@/environment.js'
 import cloneDeep from 'lodash/cloneDeep'
 import VueI18n from '../../plugins/i18n/index.js'
 import repairConfig from './repairPrintConfig.js'
+import campShortTitle from '@/common/helpers/campShortTitle.js'
 
 export default {
   name: 'PrintConfigurator',
@@ -157,7 +158,7 @@ export default {
       return this.repairConfig(
         this.$store.getters.getLastPrintConfig(this.camp._meta.self, {
           language: this.lang,
-          documentName: this.camp.name,
+          documentName: campShortTitle(this.camp),
           camp: this.camp._meta.self,
           contents: this.defaultContents(),
         })
diff --git a/frontend/src/components/print/__tests__/repairPrintConfig.spec.js b/frontend/src/components/print/__tests__/repairPrintConfig.spec.js
index 54c598658b..9b8ecd272e 100644
--- a/frontend/src/components/print/__tests__/repairPrintConfig.spec.js
+++ b/frontend/src/components/print/__tests__/repairPrintConfig.spec.js
@@ -9,7 +9,7 @@ import TocConfig from '../config/TocConfig.vue'
 describe('repairConfig', () => {
   const camp = {
     _meta: { self: '/camps/1a2b3c4d' },
-    name: 'test camp',
+    shortTitle: 'test camp',
     periods: () => ({
       items: [
         {
diff --git a/frontend/src/components/print/repairPrintConfig.js b/frontend/src/components/print/repairPrintConfig.js
index 3b90b8fca4..114da0e5ae 100644
--- a/frontend/src/components/print/repairPrintConfig.js
+++ b/frontend/src/components/print/repairPrintConfig.js
@@ -1,4 +1,5 @@
 import cloneDeep from 'lodash/cloneDeep'
+import campShortTitle from '@/common/helpers/campShortTitle.js'
 
 export default function repairConfig(
   config,
@@ -16,7 +17,7 @@ export default function repairConfig(
         ? availableLocales[0]
         : 'en'
   }
-  if (!configClone.documentName) configClone.documentName = camp.name
+  if (!configClone.documentName) configClone.documentName = campShortTitle(camp)
   if (configClone.camp !== camp._meta.self) configClone.camp = camp._meta.self
   if (typeof configClone.contents?.map !== 'function') {
     configClone.contents = defaultContents
diff --git a/frontend/src/locales/de-CH-scout.json b/frontend/src/locales/de-CH-scout.json
index e049ccdf0d..d808ffcec3 100644
--- a/frontend/src/locales/de-CH-scout.json
+++ b/frontend/src/locales/de-CH-scout.json
@@ -1,4 +1,11 @@
 {
+  "components": {
+    "campCreate": {
+      "campCreateStep1": {
+        "titlePlaceholder": "Sommerlager 2024 Pfadistufe"
+      }
+    }
+  },
   "contentNode": {
     "storycontext": {
       "name": "Roter Faden"
diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json
index 4a33fba56d..4aa9021392 100644
--- a/frontend/src/locales/de.json
+++ b/frontend/src/locales/de.json
@@ -80,8 +80,8 @@
       "campDangerZone": {
         "deleteCamp": {
           "description": "Nachdem ein Lager gelöscht ist, gibt es kein zurück mehr. Bitte fahre nur fort, wenn du sicher bist.",
-          "explanation": "Diese Aktion kann nicht rückgängig gemacht werden. Dadurch wird das Lager \"{campName}\" inklusive allen Aktivitäten, Materiallisten und Verantwortungszuweisungen dauerhaft gelöscht.",
-          "label": "Bitte gib zur Bestätigung \"{campName}\" ein.",
+          "explanation": "Diese Aktion kann nicht rückgängig gemacht werden. Dadurch wird das Lager \"{campTitle}\" inklusive allen Aktivitäten, Materiallisten und Verantwortungszuweisungen dauerhaft gelöscht.",
+          "label": "Bitte gib zur Bestätigung \"{campTitle}\" ein.",
           "title": "Lager löschen"
         },
         "title": "Gefahrenzone"
@@ -159,7 +159,8 @@
         }
       },
       "campCreateStep1": {
-        "submitTooltip": "Bitte fülle alle Pflichtfelder aus."
+        "submitTooltip": "Bitte fülle alle Pflichtfelder aus.",
+        "titlePlaceholder": "Klassenlager 2024 5. Klasse"
       },
       "campCreateStep2": {
         "category": "Block-Kategorien",
@@ -575,8 +576,8 @@
         "loginCallback": {
           "loginInProgress": "Du wirst eingeloggt"
         },
-        "or": "oder mit",
         "notActivated": "Nicht aktiviert?",
+        "or": "oder mit",
         "password": "Passwort",
         "passwordForgotten": "Passwort vergessen?",
         "provider": {
@@ -737,4 +738,4 @@
       "profile": "Profil"
     }
   }
-}
+}
\ No newline at end of file
diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json
index 21d2cf0f4f..39a95331b5 100644
--- a/frontend/src/locales/en.json
+++ b/frontend/src/locales/en.json
@@ -80,8 +80,8 @@
       "campDangerZone": {
         "deleteCamp": {
           "description": "Once you delete a camp, there is no going back. Please be certain.",
-          "explanation": "This action cannot be undone. This will permanently delete the \"{campName}\" camp, activities, material lists and remove all collaborator associations.",
-          "label": "Please type \"{campName}\" to confirm.",
+          "explanation": "This action cannot be undone. This will permanently delete the \"{campTitle}\" camp, activities, material lists and remove all collaborator associations.",
+          "label": "Please type \"{campTitle}\" to confirm.",
           "title": "Delete Camp"
         },
         "title": "Danger Zone"
@@ -737,4 +737,4 @@
       "profile": "Profile"
     }
   }
-}
+}
\ No newline at end of file
diff --git a/frontend/src/locales/fr.json b/frontend/src/locales/fr.json
index 996d2aa0be..d1ce0a9d15 100644
--- a/frontend/src/locales/fr.json
+++ b/frontend/src/locales/fr.json
@@ -79,8 +79,8 @@
       "campDangerZone": {
         "deleteCamp": {
           "description": "Une fois un camp supprimé, il est impossible de revenir en arrière. Ne continue que si tu es sûr.",
-          "explanation": "Cette action ne peut pas être annulée. Cette action supprimera définitivement le camp \"{campName}\", les activités, les listes de matériel et supprimera toutes les associations de collaborateurs.",
-          "label": "Veuillez taper \"{campName}\" pour confirmer.",
+          "explanation": "Cette action ne peut pas être annulée. Cette action supprimera définitivement le camp \"{campTitle}\", les activités, les listes de matériel et supprimera toutes les associations de collaborateurs.",
+          "label": "Veuillez taper \"{campTitle}\" pour confirmer.",
           "title": "Supprimer le camp"
         },
         "title": "Zone à risque"
diff --git a/frontend/src/locales/it.json b/frontend/src/locales/it.json
index db1a87d3a6..398aed55aa 100644
--- a/frontend/src/locales/it.json
+++ b/frontend/src/locales/it.json
@@ -71,8 +71,8 @@
       "campDangerZone": {
         "deleteCamp": {
           "description": "Una volta eliminato un campo, non è più possibile tornare indietro. Siate certi.",
-          "explanation": "Questa azione non può essere annullata. Questo eliminerà definitivamente il campo \"{campName}\", le attività, gli elenchi di materiali e rimuoverà tutte le associazioni di collaboratori.",
-          "label": "Digita \"{campName}\" per confermare.",
+          "explanation": "Questa azione non può essere annullata. Questo eliminerà definitivamente il campo \"{campTitle}\", le attività, gli elenchi di materiali e rimuoverà tutte le associazioni di collaboratori.",
+          "label": "Digita \"{campTitle}\" per confermare.",
           "title": "Elimina il campo"
         },
         "title": "Zona di pericolo"
diff --git a/frontend/src/locales/rm.json b/frontend/src/locales/rm.json
index d50c5de283..ae73401546 100644
--- a/frontend/src/locales/rm.json
+++ b/frontend/src/locales/rm.json
@@ -64,8 +64,8 @@
       "campDangerZone": {
         "deleteCamp": {
           "description": "Sche ti stizzas in champ è quai definitiv. Cuntinuescha mo sche ti es segir.",
-          "explanation": "Questa acziun na po betg vegnir revocada. Uschia vegn il champ \"{campName}\" stizzà permanentamain cun tut sias activitads, glistas da material ed urdens da responsabladad.",
-          "label": "Endatescha \"{campName}\" per confermar.",
+          "explanation": "Questa acziun na po betg vegnir revocada. Uschia vegn il champ \"{campTitle}\" stizzà permanentamain cun tut sias activitads, glistas da material ed urdens da responsabladad.",
+          "label": "Endatescha \"{campTitle}\" per confermar.",
           "title": "Stizzar il champ"
         },
         "title": "Zona da privel"
diff --git a/frontend/src/main.js b/frontend/src/main.js
index 2e391d5f5a..e77d73f82c 100644
--- a/frontend/src/main.js
+++ b/frontend/src/main.js
@@ -5,7 +5,6 @@ import {
   vuetifyLoader,
   auth,
   storeLoader,
-  filterLoading,
   formBaseComponents,
   ignoreNativeBindingWarnMessages,
   i18n,
@@ -37,7 +36,6 @@ if (env && env.SENTRY_FRONTEND_DSN) {
 }
 
 Vue.use(auth)
-Vue.use(filterLoading)
 Vue.use(formBaseComponents)
 Vue.use(ignoreNativeBindingWarnMessages)
 Vue.use(storeLoader)
diff --git a/frontend/src/plugins/filterLoading.js b/frontend/src/plugins/filterLoading.js
deleted file mode 100644
index 1fa47f8a74..0000000000
--- a/frontend/src/plugins/filterLoading.js
+++ /dev/null
@@ -1,20 +0,0 @@
-class FilterLoadingPlugin {
-  install(Vue) {
-    Vue.filter(
-      'loading',
-      function (
-        value,
-        loadingState,
-        isLoading = (v) => typeof v === 'function' && v.loading
-      ) {
-        if (typeof value === 'function' && !value.loading) {
-          // Wrap the function that is passed into the | loading filter
-          return (v, ...args) => (isLoading(v) ? loadingState : value(v, ...args))
-        }
-        return isLoading(value) ? loadingState : value
-      }
-    )
-  }
-}
-
-export default new FilterLoadingPlugin()
diff --git a/frontend/src/plugins/index.js b/frontend/src/plugins/index.js
index 141103f6e7..b7cd7383ee 100644
--- a/frontend/src/plugins/index.js
+++ b/frontend/src/plugins/index.js
@@ -1,7 +1,6 @@
 export { default as vuetifyLoader } from './vuetify'
 export { default as storeLoader } from './store'
 export { default as auth } from './auth'
-export { default as filterLoading } from './filterLoading'
 export { default as formBaseComponents } from './formBaseComponents'
 export { default as ignoreNativeBindingWarnMessages } from './ignoreNativeBindingWarnMessages'
 export { default as i18n } from './i18n'
diff --git a/frontend/src/router.js b/frontend/src/router.js
index 650a54777a..b251700f1d 100644
--- a/frontend/src/router.js
+++ b/frontend/src/router.js
@@ -3,6 +3,7 @@ import Router from 'vue-router'
 import { slugify } from '@/plugins/slugify.js'
 import { isLoggedIn } from '@/plugins/auth'
 import { apiStore } from '@/plugins/store'
+import { campShortTitle } from '@/common/helpers/campShortTitle'
 import { getEnv } from '@/environment.js'
 
 Vue.use(Router)
@@ -217,7 +218,7 @@ export default new Router({
       },
     },
     {
-      path: '/camps/:campId/:campTitle?',
+      path: '/camps/:campId/:campShortTitle?',
       components: {
         navigation: NavigationCamp,
         default: GenericPage,
@@ -272,7 +273,7 @@ export default new Router({
     },
     {
       name: 'material/all',
-      path: '/camps/:campId/:campTitle?/material/all',
+      path: '/camps/:campId/:campShortTitle?/material/all',
       components: {
         navigation: NavigationCamp,
         default: () => import('./views/material/MaterialOverview.vue'),
@@ -289,7 +290,7 @@ export default new Router({
     },
     {
       name: 'material/lists', // Only used on mobile
-      path: '/camps/:campId/:campTitle?/material/lists',
+      path: '/camps/:campId/:campShortTitle?/material/lists',
       components: {
         navigation: NavigationCamp,
         default: () => import('./views/material/MaterialLists.vue'),
@@ -304,7 +305,7 @@ export default new Router({
     },
     {
       name: 'material/detail',
-      path: '/camps/:campId/:campTitle?/material/:materialId/:materialName?',
+      path: '/camps/:campId/:campShortTitle?/material/:materialId/:materialName?',
       components: {
         navigation: NavigationCamp,
         default: () => import('./views/material/MaterialDetail.vue'),
@@ -322,7 +323,7 @@ export default new Router({
     },
     {
       name: 'admin/activity/category',
-      path: '/camps/:campId/:campTitle?/category/:categoryId/:categoryName?',
+      path: '/camps/:campId/:campShortTitle?/category/:categoryId/:categoryName?',
       components: {
         navigation: NavigationCamp,
         default: () => import('./views/category/Category.vue'),
@@ -339,7 +340,7 @@ export default new Router({
       },
     },
     {
-      path: '/camps/:campId/:campTitle?/admin',
+      path: '/camps/:campId/:campShortTitle?/admin',
       components: {
         navigation: NavigationCamp,
         default: GenericPage,
@@ -397,7 +398,7 @@ export default new Router({
       ],
     },
     {
-      path: '/camps/:campId/:campTitle/program/activities/:scheduleEntryId/:activityName?',
+      path: '/camps/:campId/:campShortTitle/program/activities/:scheduleEntryId/:activityName?',
       name: 'activity',
       components: {
         navigation: NavigationCamp,
@@ -624,7 +625,7 @@ export function campRoute(camp, subroute = 'dashboard', query = {}) {
   if (camp._meta.loading) return {}
   return {
     name: 'camp/' + subroute,
-    params: { campId: camp.id, campTitle: slugify(camp.title) },
+    params: { campId: camp.id, campShortTitle: slugify(campShortTitle(camp)) },
     query,
   }
 }
@@ -639,7 +640,7 @@ export function materialListRoute(camp, materialListOrRoute = '/all', query = {}
   if (typeof materialListOrRoute === 'string') {
     return {
       name: `material${materialListOrRoute}`,
-      params: { campId: camp.id, campTitle: slugify(camp.title) },
+      params: { campId: camp.id, campShortTitle: slugify(campShortTitle(camp)) },
       query,
     }
   }
@@ -648,7 +649,7 @@ export function materialListRoute(camp, materialListOrRoute = '/all', query = {}
     name: 'material/detail',
     params: {
       campId: camp.id,
-      campTitle: slugify(camp.title),
+      campShortTitle: slugify(campShortTitle(camp)),
       materialId: materialListOrRoute.id,
       materialName: slugify(materialListOrRoute.name),
     },
@@ -665,7 +666,7 @@ export function adminRoute(camp, subroute = 'info', query = {}) {
   if (camp._meta.loading) return {}
   return {
     name: 'admin/' + subroute,
-    params: { campId: camp.id, campTitle: slugify(camp.title) },
+    params: { campId: camp.id, campShortTitle: slugify(campShortTitle(camp)) },
     query,
   }
 }
@@ -681,7 +682,7 @@ export function periodRoute(period, routeName = 'camp/period/program', query = {
     name: routeName,
     params: {
       campId: camp.id,
-      campTitle: slugify(camp.title),
+      campShortTitle: slugify(campShortTitle(camp)),
       periodId: period.id,
       periodTitle: slugify(period.description),
     },
@@ -700,7 +701,7 @@ export function scheduleEntryRoute(scheduleEntry, query = {}) {
     name: 'activity',
     params: {
       campId: camp.id,
-      campTitle: slugify(camp.title),
+      campShortTitle: slugify(campShortTitle(camp)),
       scheduleEntryId: scheduleEntry.id,
       activityName: slugify(scheduleEntry.activity().title),
     },
@@ -714,7 +715,7 @@ export function categoryRoute(camp, category, query = {}) {
     name: 'admin/activity/category',
     params: {
       campId: camp.id,
-      campTitle: slugify(camp.title),
+      campShortTitle: slugify(campShortTitle(camp)),
       categoryId: category.id,
       categoryName: slugify(category.name),
     },
diff --git a/frontend/src/scss/global.scss b/frontend/src/scss/global.scss
index e9b36dd38c..3333db56c6 100644
--- a/frontend/src/scss/global.scss
+++ b/frontend/src/scss/global.scss
@@ -229,18 +229,6 @@ body {
   gap: 1rem;
 }
 
-.gap-1 {
-  gap: 4px;
-}
-
-.gap-2 {
-  gap: 8px;
-}
-
-.gap-4 {
-  gap: 16px;
-}
-
 .relative {
   position: relative;
 }
diff --git a/frontend/src/scss/tailwind.scss b/frontend/src/scss/tailwind.scss
new file mode 100644
index 0000000000..ac73897473
--- /dev/null
+++ b/frontend/src/scss/tailwind.scss
@@ -0,0 +1,25 @@
+// This will eventually be replaced by tailwind
+
+.whitespace-normal {
+  white-space: normal;
+}
+
+.gap-1 {
+  gap: 4px;
+}
+
+.gap-2 {
+  gap: 8px;
+}
+
+.gap-x-2 {
+  column-gap: 8px;
+}
+
+.gap-4 {
+  gap: 16px;
+}
+
+.flex-wrap-reverse {
+  flex-wrap: wrap-reverse;
+}
diff --git a/frontend/src/views/Camps.vue b/frontend/src/views/Camps.vue
index 5c4d1c33fd..2105c2f671 100644
--- a/frontend/src/views/Camps.vue
+++ b/frontend/src/views/Camps.vue
@@ -9,20 +9,13 @@
           <v-skeleton-loader type="list-item-two-line" height="64" />
           <v-skeleton-loader type="list-item-two-line" height="64" />
         </template>
-        <v-list-item
-          v-for="camp in upcomingCamps"
-          v-else
-          :key="camp._meta.self"
-          two-line
-          :to="campRoute(camp)"
-        >
-          <v-list-item-content>
-            <v-list-item-title>{{ camp.title }}</v-list-item-title>
-            <v-list-item-subtitle>
-              {{ camp.name }} - {{ camp.motto }}
-            </v-list-item-subtitle>
-          </v-list-item-content>
-        </v-list-item>
+        <template v-else>
+          <CampListItem
+            v-for="camp in upcomingCamps"
+            :key="camp._meta.self"
+            :camp="camp"
+          />
+        </template>
         <v-list-item>
           <v-list-item-content />
           <v-list-item-action>
@@ -48,19 +41,11 @@
           </v-expansion-panel-header>
           <v-expansion-panel-content>
             <v-list class="py-0">
-              <v-list-item
+              <CampListItem
                 v-for="camp in prototypeCamps"
                 :key="camp._meta.self"
-                two-line
-                :to="campRoute(camp)"
-              >
-                <v-list-item-content>
-                  <v-list-item-title>{{ camp.title }}</v-list-item-title>
-                  <v-list-item-subtitle>
-                    {{ camp.name }} - {{ camp.motto }}
-                  </v-list-item-subtitle>
-                </v-list-item-content>
-              </v-list-item>
+                :camp="camp"
+              />
             </v-list>
           </v-expansion-panel-content>
         </v-expansion-panel>
@@ -72,19 +57,11 @@
           </v-expansion-panel-header>
           <v-expansion-panel-content>
             <v-list class="py-0">
-              <v-list-item
+              <CampListItem
                 v-for="camp in pastCamps"
                 :key="camp._meta.self"
-                two-line
-                :to="campRoute(camp)"
-              >
-                <v-list-item-content>
-                  <v-list-item-title>{{ camp.title }}</v-list-item-title>
-                  <v-list-item-subtitle>
-                    {{ camp.name }} - {{ camp.motto }}
-                  </v-list-item-subtitle>
-                </v-list-item-content>
-              </v-list-item>
+                :camp="camp"
+              />
             </v-list>
           </v-expansion-panel-content>
         </v-expansion-panel>
@@ -101,10 +78,12 @@ import ContentCard from '@/components/layout/ContentCard.vue'
 import ButtonAdd from '@/components/buttons/ButtonAdd.vue'
 import { mapGetters } from 'vuex'
 import UserMeta from '@/components/navigation/UserMeta.vue'
+import CampListItem from '@/components/camp/CampListItem.vue'
 
 export default {
   name: 'Camps',
   components: {
+    CampListItem,
     UserMeta,
     ContentCard,
     ButtonAdd,
diff --git a/frontend/src/views/camp/navigation/NavigationCamp.vue b/frontend/src/views/camp/navigation/NavigationCamp.vue
index 12bd8e5265..32333c7667 100644
--- a/frontend/src/views/camp/navigation/NavigationCamp.vue
+++ b/frontend/src/views/camp/navigation/NavigationCamp.vue
@@ -29,19 +29,4 @@ export default {
 }
 </script>
 
-<style lang="scss" scoped>
-.camp--name:deep(.v-btn__content) {
-  width: 100%;
-}
-
-.v-bottom-navigation--fixed {
-  height: auto !important;
-  min-height: 56px;
-  padding-bottom: env(safe-area-inset-bottom);
-}
-
-.v-application .ec-close-drawer {
-  background-color: #{map-get($blue-grey, 'lighten-5')};
-  border-top: 1px solid #{map-get($blue-grey, 'lighten-4')};
-}
-</style>
+<style lang="scss" scoped></style>
diff --git a/frontend/src/views/camp/navigation/desktop/NavTopbar.vue b/frontend/src/views/camp/navigation/desktop/NavTopbar.vue
index 0ad22f7a3d..b0d5737d47 100644
--- a/frontend/src/views/camp/navigation/desktop/NavTopbar.vue
+++ b/frontend/src/views/camp/navigation/desktop/NavTopbar.vue
@@ -5,10 +5,7 @@
     <v-toolbar-items>
       <v-btn :to="campRoute(camp)" text>
         <v-icon :left="$vuetify.breakpoint.mdAndUp">mdi-tent</v-icon>
-        <span class="sr-only-sm-and-down">{{
-          camp.title
-            | loading($tc('views.camp.navigation.desktop.navTopbar.campIsLoading'))
-        }}</span>
+        <span class="sr-only-sm-and-down">{{ campShortTitle(camp) }}</span>
       </v-btn>
       <v-btn :to="campRoute(camp, 'program')" text>
         <v-icon :left="$vuetify.breakpoint.mdAndUp">mdi-view-dashboard</v-icon>
@@ -53,6 +50,7 @@ import { campRoute, materialListRoute } from '@/router.js'
 import { mapGetters } from 'vuex'
 import { campRoleMixin } from '@/mixins/campRoleMixin.js'
 import { getEnv } from '@/environment.js'
+import campShortTitle from '@/common/helpers/campShortTitle.js'
 
 export default {
   name: 'NavTopbar',
@@ -80,12 +78,9 @@ export default {
   methods: {
     materialListRoute,
     campRoute,
+    campShortTitle,
   },
 }
 </script>
 
-<style lang="scss" scoped>
-.camp--name:deep(.v-btn__content) {
-  width: 100%;
-}
-</style>
+<style lang="scss" scoped></style>
diff --git a/frontend/src/views/camp/navigation/mobile/NavBottombar.vue b/frontend/src/views/camp/navigation/mobile/NavBottombar.vue
index e458f90590..3cc5140cfd 100644
--- a/frontend/src/views/camp/navigation/mobile/NavBottombar.vue
+++ b/frontend/src/views/camp/navigation/mobile/NavBottombar.vue
@@ -8,8 +8,11 @@
       <span>{{ $tc('views.camp.navigation.mobile.navBottombar.story') }}</span>
       <v-icon>mdi-book-open-variant</v-icon>
     </v-btn>
-    <v-btn :to="campRoute(camp, 'dashboard')">
-      <span>{{ camp.name }}</span>
+    <v-btn
+      :to="campRoute(camp, 'dashboard')"
+      class="ec-home-button flex-shrink-0 flex-grow-1 px-0"
+    >
+      <span class="ec-home-button__inner">{{ campShortTitle(camp) }}</span>
       <v-icon large>mdi-tent</v-icon>
     </v-btn>
     <v-btn :to="materialListRoute(camp, '/lists')">
@@ -26,6 +29,7 @@
 <script>
 import { campRoute, materialListRoute } from '@/router'
 import { mapGetters } from 'vuex'
+import campShortTitle from '@/common/helpers/campShortTitle.js'
 
 export default {
   name: 'NavBottombar',
@@ -45,19 +49,29 @@ export default {
   methods: {
     materialListRoute,
     campRoute,
+    campShortTitle,
   },
 }
 </script>
 
 <style lang="scss" scoped>
+// eslint-disable-next-line vue-scoped-css/no-unused-selector
 .v-bottom-navigation--fixed {
   height: auto !important;
   min-height: 56px;
   padding-bottom: env(safe-area-inset-bottom);
 }
 
-.v-application .ec-close-drawer {
-  background-color: #{map-get($blue-grey, 'lighten-5')};
-  border-top: 1px solid #{map-get($blue-grey, 'lighten-4')};
+.ec-home-button {
+  flex-basis: 20% !important;
+}
+.ec-home-button :deep(.v-btn__content) {
+  width: 100%;
+}
+.ec-home-button__inner {
+  white-space: normal;
+  width: 100%;
+  word-break: break-word;
+  text-align: center;
 }
 </style>
diff --git a/frontend/src/views/camp/navigation/mobile/NavSidebar.vue b/frontend/src/views/camp/navigation/mobile/NavSidebar.vue
index 1336ea3f66..95a234acb9 100644
--- a/frontend/src/views/camp/navigation/mobile/NavSidebar.vue
+++ b/frontend/src/views/camp/navigation/mobile/NavSidebar.vue
@@ -39,11 +39,12 @@
 
       <v-list v-if="!camp._meta.loading">
         <SidebarListItem
-          :title="camp.name"
+          :title="camp.title"
           :subtitle="camp.motto"
           two-line
           hide-avatar
           hide-chevron
+          title-overflow
         />
         <v-divider inset i />
         <SidebarListItem
@@ -158,12 +159,6 @@ export default {
 </script>
 
 <style lang="scss" scoped>
-.v-bottom-navigation--fixed {
-  height: auto !important;
-  min-height: 56px;
-  padding-bottom: env(safe-area-inset-bottom);
-}
-
 .v-application .ec-close-drawer {
   background-color: #{map-get($blue-grey, 'lighten-5')};
   border-top: 1px solid #{map-get($blue-grey, 'lighten-4')};
diff --git a/pdf/src/CampPrint.vue b/pdf/src/CampPrint.vue
index 6e35c5c6fc..23bd137b56 100644
--- a/pdf/src/CampPrint.vue
+++ b/pdf/src/CampPrint.vue
@@ -16,6 +16,7 @@ import { Font } from './renderer/index.js'
 import PdfComponent from '@/PdfComponent.js'
 import InterDisplay from '@/assets/fonts/Inter/InterDisplay-Regular.ttf'
 import InterDisplayItalic from '@/assets/fonts/Inter/InterDisplay-Italic.ttf'
+import InterDisplayMedium from '@/assets/fonts/Inter/InterDisplay-Medium.ttf'
 import InterDisplaySemiBold from '@/assets/fonts/Inter/InterDisplay-SemiBold.ttf'
 import InterDisplayBold from '@/assets/fonts/Inter/InterDisplay-Bold.ttf'
 import InterDisplayBoldItalic from '@/assets/fonts/Inter/InterDisplay-BoldItalic.ttf'
@@ -61,6 +62,7 @@ const registerFonts = async () => {
     family: 'InterDisplay',
     fonts: [
       { src: InterDisplay },
+      { src: InterDisplayMedium, fontWeight: 'medium' },
       { src: InterDisplaySemiBold, fontWeight: 'semibold' },
       { src: InterDisplayBold, fontWeight: 'bold' },
       { src: InterDisplayItalic, fontStyle: 'italic' },
diff --git a/pdf/src/assets/fonts/Inter/InterDisplay-Medium.ttf b/pdf/src/assets/fonts/Inter/InterDisplay-Medium.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..64748bd99e8128fec74f3849d2d7bbac7106bbde
GIT binary patch
literal 410472
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%0D|_84@j
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
V|12&42`2mK)5=b@6h)=d{{l#b>zx1q

literal 0
HcmV?d00001

diff --git a/pdf/src/campPrint/cover/Cover.vue b/pdf/src/campPrint/cover/Cover.vue
index 157287c251..7f4a350670 100644
--- a/pdf/src/campPrint/cover/Cover.vue
+++ b/pdf/src/campPrint/cover/Cover.vue
@@ -1,15 +1,15 @@
 <template>
   <Page :id="id" size="A4" :bookmark="$tc('print.cover.title')" class="page">
-    <Text class="cover-camp-name cover-center">{{ config.camp.name }}</Text>
-    <Text class="cover-camp-title cover-center">
-      {{ config.camp.title }}
-    </Text>
-    <Text class="cover-camp-motto cover-center">
-      {{ config.camp.motto }}
-    </Text>
-    <Text v-if="config.camp.organizer" class="cover-camp-organizer cover-center">
-      {{ config.camp.organizer }}
-    </Text>
+    <View class="cover-camp-wrapper">
+      <Text v-if="config.camp.organizer" class="cover-camp-organizer cover-center">
+        {{ config.camp.organizer }}
+      </Text>
+      <Text class="cover-camp-title cover-center">
+        {{ config.camp.title }}</Text>
+      <Text class="cover-camp-motto cover-center">
+        {{ config.camp.motto }}
+      </Text>
+    </View>
   </Page>
 </template>
 <script>
@@ -28,21 +28,20 @@ export default {
 .cover-center {
   text-align: center;
 }
-.cover-camp-name {
-  font-size: 15pt;
-  font-weight: semibold;
-  margin: 140pt 0 40pt;
+.cover-camp-wrapper {
+  padding: 72pt 0 0;
+}
+.cover-camp-organizer {
+  font-size: 18pt;
+  font-weight: medium;
 }
 .cover-camp-title {
   font-size: 38pt;
-  font-weight: bold;
-  margin-bottom: 28pt;
+  font-weight: semibold;
+  margin: 40pt 0;
 }
 .cover-camp-motto {
-  font-size: 20pt;
-  margin-bottom: 23pt;
-}
-.cover-camp-organizer {
-  font-size: 13pt;
+  font-size: 28pt;
+  font-weight: medium;
 }
 </pdf-style>
diff --git a/pdf/src/renderer/__tests__/__snapshots__/cover_page.spec.json.snap b/pdf/src/renderer/__tests__/__snapshots__/cover_page.spec.json.snap
index c3d1f559a7..6257a72fad 100644
--- a/pdf/src/renderer/__tests__/__snapshots__/cover_page.spec.json.snap
+++ b/pdf/src/renderer/__tests__/__snapshots__/cover_page.spec.json.snap
@@ -8,63 +8,55 @@
           "box": {},
           "children": [
             {
+              "box": {},
+              "children": [
+                {
+                  "parent": [Circular],
+                  "type": "TEXT_INSTANCE",
+                  "value": "GRGR",
+                },
+              ],
               "parent": [Circular],
-              "type": "TEXT_INSTANCE",
-              "value": "Pfila 2023",
+              "props": {
+                "class": "cover-camp-title cover-center",
+              },
+              "style": {
+                "fontSize": "38pt",
+                "fontWeight": "semibold",
+                "margin": "40pt 0",
+                "textAlign": "center",
+              },
+              "type": "TEXT",
             },
-          ],
-          "parent": [Circular],
-          "props": {
-            "class": "cover-camp-name cover-center",
-          },
-          "style": {
-            "fontSize": "15pt",
-            "fontWeight": "semibold",
-            "margin": "140pt 0 40pt",
-            "textAlign": "center",
-          },
-          "type": "TEXT",
-        },
-        {
-          "box": {},
-          "children": [
-            {
-              "parent": [Circular],
-              "type": "TEXT_INSTANCE",
-              "value": "GRGR",
-            },
-          ],
-          "parent": [Circular],
-          "props": {
-            "class": "cover-camp-title cover-center",
-          },
-          "style": {
-            "fontSize": "38pt",
-            "fontWeight": "bold",
-            "marginBottom": "28pt",
-            "textAlign": "center",
-          },
-          "type": "TEXT",
-        },
-        {
-          "box": {},
-          "children": [
             {
+              "box": {},
+              "children": [
+                {
+                  "parent": [Circular],
+                  "type": "TEXT_INSTANCE",
+                  "value": "Grandiose RealityTV Show",
+                },
+              ],
               "parent": [Circular],
-              "type": "TEXT_INSTANCE",
-              "value": "Grandiose RealityTV Show",
+              "props": {
+                "class": "cover-camp-motto cover-center",
+              },
+              "style": {
+                "fontSize": "28pt",
+                "fontWeight": "medium",
+                "textAlign": "center",
+              },
+              "type": "TEXT",
             },
           ],
           "parent": [Circular],
           "props": {
-            "class": "cover-camp-motto cover-center",
+            "class": "cover-camp-wrapper",
           },
           "style": {
-            "fontSize": "20pt",
-            "marginBottom": "23pt",
-            "textAlign": "center",
+            "padding": "72pt 0 0",
           },
-          "type": "TEXT",
+          "type": "VIEW",
         },
       ],
       "parent": [Circular],
diff --git a/print/components/config/Cover.vue b/print/components/config/Cover.vue
index b06e46e0ac..01815b90d8 100644
--- a/print/components/config/Cover.vue
+++ b/print/components/config/Cover.vue
@@ -1,13 +1,14 @@
 <template>
   <div class="tw-break-after-page tw-text-center">
-    <div class="tw-font-medium tw-mt-20 tw-text-xl">{{ camp.name }}</div>
+    <p class="tw-font-medium tw-mt-20 tw-text-3xl">{{ camp.organizer }}</p>
 
-    <div :id="`content_${index}_cover`" class="tw-my-12 tw-text-6xl tw-font-semibold">
+    <h1 :id="`content_${index}_cover`" class="tw-my-16 tw-text-6xl tw-font-semibold">
       {{ camp.title }}
-    </div>
-    <div class="tw-text-3xl">
+    </h1>
+
+    <p class="tw-text-5xl tw-font-medium">
       {{ camp.motto }}
-    </div>
+    </p>
   </div>
 </template>
 

From 22aac191ea5cd6046f175bb22fe69cf9b54d62c8 Mon Sep 17 00:00:00 2001
From: Manuel Meister <news.manuelsworld@gmail.com>
Date: Sat, 17 Aug 2024 18:26:03 +0200
Subject: [PATCH 072/273] Fix migration use name instead of entityclass

---
 ...{Version20240806120000.php => Version20240817181500.php} | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
 rename api/migrations/schema/{Version20240806120000.php => Version20240817181500.php} (65%)

diff --git a/api/migrations/schema/Version20240806120000.php b/api/migrations/schema/Version20240817181500.php
similarity index 65%
rename from api/migrations/schema/Version20240806120000.php
rename to api/migrations/schema/Version20240817181500.php
index b5678362a6..3b5b724183 100644
--- a/api/migrations/schema/Version20240806120000.php
+++ b/api/migrations/schema/Version20240817181500.php
@@ -10,18 +10,18 @@
 /**
  * Auto-generated Migration: Please modify to your needs!
  */
-final class Version20240806120000 extends AbstractMigration {
+final class Version20240817181500 extends AbstractMigration {
     public function getDescription(): string {
         return 'Renames safety concept to safety considerations';
     }
 
     public function up(Schema $schema): void {
         // this up() migration is auto-generated, please modify it to your needs
-        $this->addSql('UPDATE public.content_type SET entityclass=\'SafetyConsiderations\' WHERE entityclass=\'SafetyConcept\';');
+        $this->addSql("UPDATE content_type SET name = 'SafetyConsiderations' WHERE name = 'SafetyConcept';");
     }
 
     public function down(Schema $schema): void {
         // this down() migration is auto-generated, please modify it to your needs
-        $this->addSql('UPDATE public.content_type SET entityclass=\'SafetyConcept\' WHERE entityclass=\'SafetyConsiderations\';');
+        $this->addSql("UPDATE content_type SET name = 'SafetyConcept' WHERE name = 'SafetyConsiderations';");
     }
 }

From 45aee6a9a2bfb225bf2a1acf3489f8ec3af8c4d1 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 18 Aug 2024 10:04:54 +0000
Subject: [PATCH 073/273] chore(deps): update dependency @types/node to
 v20.16.0

---
 .ops/aws-setup/package-lock.json | 16 ++++++++--------
 .ops/aws-setup/package.json      |  2 +-
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index 7cb97a384e..964a06b662 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -12,7 +12,7 @@
             },
             "devDependencies": {
                 "@babel/eslint-parser": "7.25.1",
-                "@types/node": "20.15.0",
+                "@types/node": "20.16.0",
                 "eslint": "8.57.0",
                 "eslint-config-prettier": "9.1.0",
                 "eslint-plugin-import": "2.29.1",
@@ -2866,12 +2866,12 @@
             }
         },
         "node_modules/@types/node": {
-            "version": "20.15.0",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.15.0.tgz",
-            "integrity": "sha512-eQf4OkH6gA9v1W0iEpht/neozCsZKMTK+C4cU6/fv7wtJCCL8LEQ4hie2Ln8ZP/0YYM2xGj7//f8xyqItkJ6QA==",
+            "version": "20.16.0",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.0.tgz",
+            "integrity": "sha512-vDxceJcoZhIVh67S568bm1UGZO0DX0hpplJZxzeXMKwIPLn190ec5RRxQ69BKhX44SUGIxxgMdDY557lGLKprQ==",
             "license": "MIT",
             "dependencies": {
-                "undici-types": "~6.13.0"
+                "undici-types": "~6.19.2"
             }
         },
         "node_modules/@types/responselike": {
@@ -8205,9 +8205,9 @@
             }
         },
         "node_modules/undici-types": {
-            "version": "6.13.0",
-            "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz",
-            "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==",
+            "version": "6.19.6",
+            "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.6.tgz",
+            "integrity": "sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==",
             "license": "MIT"
         },
         "node_modules/unique-filename": {
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index a0a6c41a78..18fe8fdb6c 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -16,7 +16,7 @@
     },
     "devDependencies": {
         "@babel/eslint-parser": "7.25.1",
-        "@types/node": "20.15.0",
+        "@types/node": "20.16.0",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
         "eslint-plugin-import": "2.29.1",

From 44b8acb794c06e90a3665c4fc1c2b524d08a78be Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Tue, 13 Aug 2024 23:05:35 +0200
Subject: [PATCH 074/273] frontend: dump current eslint config

with
node_modules/.bin/eslint --print-config src/App.vue | jq '.rules' --sort-keys --raw-output > eslint-config-vue.json
node_modules/.bin/eslint --print-config src/helpers/mergeListeners.js | jq '.rules' --sort-keys --raw-output > eslint-config-js.json
That we are sure that the config did not change during the migration.
---
 frontend/eslint-config-js.json  | 392 ++++++++++++++++++++++++++++++++
 frontend/eslint-config-vue.json | 392 ++++++++++++++++++++++++++++++++
 2 files changed, 784 insertions(+)
 create mode 100644 frontend/eslint-config-js.json
 create mode 100644 frontend/eslint-config-vue.json

diff --git a/frontend/eslint-config-js.json b/frontend/eslint-config-js.json
new file mode 100644
index 0000000000..ccf5d7fd83
--- /dev/null
+++ b/frontend/eslint-config-js.json
@@ -0,0 +1,392 @@
+{
+  "@babel/object-curly-spacing": ["off"],
+  "@babel/semi": ["off"],
+  "@typescript-eslint/block-spacing": ["off"],
+  "@typescript-eslint/brace-style": ["off"],
+  "@typescript-eslint/comma-dangle": ["off"],
+  "@typescript-eslint/comma-spacing": ["off"],
+  "@typescript-eslint/func-call-spacing": ["off"],
+  "@typescript-eslint/indent": ["off"],
+  "@typescript-eslint/key-spacing": ["off"],
+  "@typescript-eslint/keyword-spacing": ["off"],
+  "@typescript-eslint/lines-around-comment": [0],
+  "@typescript-eslint/member-delimiter-style": ["off"],
+  "@typescript-eslint/no-extra-parens": ["off"],
+  "@typescript-eslint/no-extra-semi": ["off"],
+  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/quotes": [0],
+  "@typescript-eslint/semi": ["off"],
+  "@typescript-eslint/space-before-blocks": ["off"],
+  "@typescript-eslint/space-before-function-paren": ["off"],
+  "@typescript-eslint/space-infix-ops": ["off"],
+  "@typescript-eslint/type-annotation-spacing": ["off"],
+  "array-bracket-newline": ["off"],
+  "array-bracket-spacing": ["off"],
+  "array-element-newline": ["off"],
+  "arrow-body-style": ["off"],
+  "arrow-parens": ["off"],
+  "arrow-spacing": ["off"],
+  "babel/object-curly-spacing": ["off"],
+  "babel/quotes": [0],
+  "babel/semi": ["off"],
+  "block-spacing": ["off"],
+  "brace-style": ["off"],
+  "comma-dangle": ["off"],
+  "comma-spacing": ["off"],
+  "comma-style": ["off"],
+  "computed-property-spacing": ["off"],
+  "constructor-super": ["error"],
+  "curly": [0],
+  "dot-location": ["off"],
+  "eol-last": ["off"],
+  "flowtype/boolean-style": ["off"],
+  "flowtype/delimiter-dangle": ["off"],
+  "flowtype/generic-spacing": ["off"],
+  "flowtype/object-type-curly-spacing": ["off"],
+  "flowtype/object-type-delimiter": ["off"],
+  "flowtype/quotes": ["off"],
+  "flowtype/semi": ["off"],
+  "flowtype/space-after-type-colon": ["off"],
+  "flowtype/space-before-generic-bracket": ["off"],
+  "flowtype/space-before-type-colon": ["off"],
+  "flowtype/union-intersection-spacing": ["off"],
+  "for-direction": ["error"],
+  "func-call-spacing": ["off"],
+  "function-call-argument-newline": ["off"],
+  "function-paren-newline": ["off"],
+  "generator-star": ["off"],
+  "generator-star-spacing": ["off"],
+  "getter-return": ["error"],
+  "implicit-arrow-linebreak": ["off"],
+  "indent": ["off"],
+  "indent-legacy": ["off"],
+  "jsx-quotes": ["off"],
+  "key-spacing": ["off"],
+  "keyword-spacing": ["off"],
+  "linebreak-style": ["off"],
+  "lines-around-comment": [0],
+  "local-rules/matching-translation-keys": [
+    "error",
+    {
+      "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
+      "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
+    }
+  ],
+  "max-len": [0],
+  "max-statements-per-line": ["off"],
+  "multiline-ternary": ["off"],
+  "new-parens": ["off"],
+  "newline-per-chained-call": ["off"],
+  "no-arrow-condition": ["off"],
+  "no-async-promise-executor": ["error"],
+  "no-case-declarations": ["error"],
+  "no-class-assign": ["error"],
+  "no-comma-dangle": ["off"],
+  "no-compare-neg-zero": ["error"],
+  "no-cond-assign": ["error"],
+  "no-confusing-arrow": [0],
+  "no-const-assign": ["error"],
+  "no-constant-condition": ["error"],
+  "no-control-regex": ["error"],
+  "no-debugger": ["error"],
+  "no-delete-var": ["error"],
+  "no-dupe-args": ["error"],
+  "no-dupe-class-members": ["error"],
+  "no-dupe-else-if": ["error"],
+  "no-dupe-keys": ["error"],
+  "no-duplicate-case": ["error"],
+  "no-empty": ["error"],
+  "no-empty-character-class": ["error"],
+  "no-empty-pattern": ["error"],
+  "no-ex-assign": ["error"],
+  "no-extra-boolean-cast": ["error"],
+  "no-extra-parens": ["off"],
+  "no-extra-semi": ["off"],
+  "no-fallthrough": ["error"],
+  "no-floating-decimal": ["off"],
+  "no-func-assign": ["error"],
+  "no-global-assign": ["error"],
+  "no-import-assign": ["error"],
+  "no-inner-declarations": ["error"],
+  "no-invalid-regexp": ["error"],
+  "no-irregular-whitespace": ["error"],
+  "no-loss-of-precision": ["error"],
+  "no-misleading-character-class": ["error"],
+  "no-mixed-operators": [0],
+  "no-mixed-spaces-and-tabs": ["off"],
+  "no-multi-spaces": ["off"],
+  "no-multiple-empty-lines": ["off"],
+  "no-new-symbol": ["error"],
+  "no-nonoctal-decimal-escape": ["error"],
+  "no-obj-calls": ["error"],
+  "no-octal": ["error"],
+  "no-prototype-builtins": ["error"],
+  "no-redeclare": ["error"],
+  "no-regex-spaces": ["error"],
+  "no-reserved-keys": ["off"],
+  "no-self-assign": ["error"],
+  "no-setter-return": ["error"],
+  "no-shadow-restricted-names": ["error"],
+  "no-space-before-semi": ["off"],
+  "no-spaced-func": ["off"],
+  "no-sparse-arrays": ["error"],
+  "no-tabs": [0],
+  "no-this-before-super": ["error"],
+  "no-trailing-spaces": ["off"],
+  "no-undef": ["error"],
+  "no-unexpected-multiline": [0],
+  "no-unreachable": ["error"],
+  "no-unsafe-finally": ["error"],
+  "no-unsafe-negation": ["error"],
+  "no-unsafe-optional-chaining": ["error"],
+  "no-unused-labels": ["error"],
+  "no-unused-vars": [
+    "error",
+    {
+      "argsIgnorePattern": "^_$"
+    }
+  ],
+  "no-useless-backreference": ["error"],
+  "no-useless-catch": ["error"],
+  "no-useless-escape": ["error"],
+  "no-whitespace-before-property": ["off"],
+  "no-with": ["error"],
+  "no-wrap-func": ["off"],
+  "nonblock-statement-body-position": ["off"],
+  "object-curly-newline": ["off"],
+  "object-curly-spacing": ["off"],
+  "object-property-newline": ["off"],
+  "one-var-declaration-per-line": ["off"],
+  "operator-linebreak": ["off"],
+  "padded-blocks": ["off"],
+  "prefer-arrow-callback": ["off"],
+  "prefer-const": ["error"],
+  "prettier/prettier": ["error"],
+  "quote-props": ["off"],
+  "quotes": [0],
+  "react/jsx-child-element-spacing": ["off"],
+  "react/jsx-closing-bracket-location": ["off"],
+  "react/jsx-closing-tag-location": ["off"],
+  "react/jsx-curly-newline": ["off"],
+  "react/jsx-curly-spacing": ["off"],
+  "react/jsx-equals-spacing": ["off"],
+  "react/jsx-first-prop-new-line": ["off"],
+  "react/jsx-indent": ["off"],
+  "react/jsx-indent-props": ["off"],
+  "react/jsx-max-props-per-line": ["off"],
+  "react/jsx-newline": ["off"],
+  "react/jsx-one-expression-per-line": ["off"],
+  "react/jsx-props-no-multi-spaces": ["off"],
+  "react/jsx-space-before-closing": ["off"],
+  "react/jsx-tag-spacing": ["off"],
+  "react/jsx-wrap-multilines": ["off"],
+  "require-yield": ["error"],
+  "rest-spread-spacing": ["off"],
+  "semi": ["off"],
+  "semi-spacing": ["off"],
+  "semi-style": ["off"],
+  "space-after-function-name": ["off"],
+  "space-after-keywords": ["off"],
+  "space-before-blocks": ["off"],
+  "space-before-function-paren": ["off"],
+  "space-before-function-parentheses": ["off"],
+  "space-before-keywords": ["off"],
+  "space-in-brackets": ["off"],
+  "space-in-parens": ["off"],
+  "space-infix-ops": ["off"],
+  "space-return-throw-case": ["off"],
+  "space-unary-ops": ["off"],
+  "space-unary-word-ops": ["off"],
+  "standard/array-bracket-even-spacing": ["off"],
+  "standard/computed-property-even-spacing": ["off"],
+  "standard/object-curly-even-spacing": ["off"],
+  "switch-colon-spacing": ["off"],
+  "template-curly-spacing": ["off"],
+  "template-tag-spacing": ["off"],
+  "unicorn/empty-brace-spaces": ["off"],
+  "unicorn/no-nested-ternary": ["off"],
+  "unicorn/number-literal-case": ["off"],
+  "unicorn/template-indent": [0],
+  "use-isnan": ["error"],
+  "valid-typeof": ["error"],
+  "vue-scoped-css/enforce-style-type": ["warn"],
+  "vue-scoped-css/no-deprecated-deep-combinator": ["warn"],
+  "vue-scoped-css/no-parent-of-v-global": ["warn"],
+  "vue-scoped-css/no-parsing-error": ["warn"],
+  "vue-scoped-css/no-unused-keyframes": ["warn"],
+  "vue-scoped-css/no-unused-selector": ["warn"],
+  "vue-scoped-css/require-v-deep-argument": ["warn"],
+  "vue-scoped-css/require-v-global-argument": ["warn"],
+  "vue-scoped-css/require-v-slotted-argument": ["warn"],
+  "vue/array-bracket-newline": ["off"],
+  "vue/array-bracket-spacing": ["off"],
+  "vue/array-element-newline": ["off"],
+  "vue/arrow-spacing": ["off"],
+  "vue/attribute-hyphenation": ["warn"],
+  "vue/attributes-order": ["warn"],
+  "vue/block-spacing": ["off"],
+  "vue/block-tag-newline": ["off"],
+  "vue/brace-style": ["off"],
+  "vue/comma-dangle": ["off"],
+  "vue/comma-spacing": ["off"],
+  "vue/comma-style": ["off"],
+  "vue/comment-directive": ["error"],
+  "vue/component-definition-name-casing": ["warn"],
+  "vue/component-tags-order": [
+    "error",
+    {
+      "order": ["template", "script", "style"]
+    }
+  ],
+  "vue/dot-location": ["off"],
+  "vue/first-attribute-linebreak": ["warn"],
+  "vue/func-call-spacing": ["off"],
+  "vue/html-closing-bracket-newline": ["off"],
+  "vue/html-closing-bracket-spacing": ["off"],
+  "vue/html-end-tags": ["off"],
+  "vue/html-indent": ["off"],
+  "vue/html-quotes": ["off"],
+  "vue/html-self-closing": [0],
+  "vue/jsx-uses-vars": ["error"],
+  "vue/key-spacing": ["off"],
+  "vue/keyword-spacing": ["off"],
+  "vue/max-attributes-per-line": ["off"],
+  "vue/max-len": [0],
+  "vue/multi-word-component-names": ["off"],
+  "vue/multiline-html-element-content-newline": ["off"],
+  "vue/multiline-ternary": ["off"],
+  "vue/mustache-interpolation-spacing": ["off"],
+  "vue/no-arrow-functions-in-watch": ["error"],
+  "vue/no-async-in-computed-properties": ["error"],
+  "vue/no-child-content": ["error"],
+  "vue/no-computed-properties-in-data": ["error"],
+  "vue/no-custom-modifiers-on-v-model": ["error"],
+  "vue/no-deprecated-data-object-declaration": ["error"],
+  "vue/no-deprecated-destroyed-lifecycle": ["off"],
+  "vue/no-deprecated-dollar-listeners-api": ["off"],
+  "vue/no-deprecated-dollar-scopedslots-api": ["off"],
+  "vue/no-deprecated-events-api": ["error"],
+  "vue/no-deprecated-filter": ["warn"],
+  "vue/no-deprecated-functional-template": ["error"],
+  "vue/no-deprecated-html-element-is": ["error"],
+  "vue/no-deprecated-inline-template": ["error"],
+  "vue/no-deprecated-props-default-this": ["off"],
+  "vue/no-deprecated-router-link-tag-prop": ["error"],
+  "vue/no-deprecated-scope-attribute": ["error"],
+  "vue/no-deprecated-slot-attribute": ["off"],
+  "vue/no-deprecated-slot-scope-attribute": ["off"],
+  "vue/no-deprecated-v-bind-sync": ["off"],
+  "vue/no-deprecated-v-is": ["error"],
+  "vue/no-deprecated-v-on-native-modifier": ["warn"],
+  "vue/no-deprecated-v-on-number-modifiers": ["error"],
+  "vue/no-deprecated-vue-config-keycodes": ["error"],
+  "vue/no-dupe-keys": ["error"],
+  "vue/no-dupe-v-else-if": ["error"],
+  "vue/no-duplicate-attributes": ["error"],
+  "vue/no-export-in-script-setup": ["error"],
+  "vue/no-expose-after-await": ["error"],
+  "vue/no-extra-parens": ["off"],
+  "vue/no-lifecycle-after-await": ["error"],
+  "vue/no-lone-template": ["warn"],
+  "vue/no-multi-spaces": ["off"],
+  "vue/no-multiple-slot-args": ["warn"],
+  "vue/no-multiple-template-root": ["error"],
+  "vue/no-mutating-props": [
+    "error",
+    {
+      "shallowOnly": true
+    }
+  ],
+  "vue/no-parsing-error": ["error"],
+  "vue/no-ref-as-operand": ["error"],
+  "vue/no-reserved-component-names": ["error"],
+  "vue/no-reserved-keys": ["error"],
+  "vue/no-reserved-props": [
+    "error",
+    {
+      "vueVersion": 2
+    }
+  ],
+  "vue/no-shared-component-data": ["error"],
+  "vue/no-side-effects-in-computed-properties": ["error"],
+  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
+  "vue/no-template-key": ["error"],
+  "vue/no-template-shadow": ["warn"],
+  "vue/no-textarea-mustache": ["error"],
+  "vue/no-unused-components": ["error"],
+  "vue/no-unused-vars": ["error"],
+  "vue/no-use-computed-property-like-method": ["error"],
+  "vue/no-use-v-if-with-v-for": ["error"],
+  "vue/no-useless-template-attributes": ["error"],
+  "vue/no-v-for-template-key": ["error"],
+  "vue/no-v-for-template-key-on-child": ["off"],
+  "vue/no-v-html": ["warn"],
+  "vue/no-v-model-argument": ["warn"],
+  "vue/no-v-text-v-html-on-component": ["error"],
+  "vue/no-watch-after-await": ["error"],
+  "vue/object-curly-newline": ["off"],
+  "vue/object-curly-spacing": ["off"],
+  "vue/object-property-newline": ["off"],
+  "vue/one-component-per-file": ["warn"],
+  "vue/operator-linebreak": ["off"],
+  "vue/order-in-components": ["warn"],
+  "vue/prefer-import-from-vue": ["error"],
+  "vue/prop-name-casing": ["warn"],
+  "vue/quote-props": ["off"],
+  "vue/require-component-is": ["error"],
+  "vue/require-default-prop": ["warn"],
+  "vue/require-explicit-emits": ["off"],
+  "vue/require-prop-type-constructor": ["error"],
+  "vue/require-prop-types": ["warn"],
+  "vue/require-render-return": ["error"],
+  "vue/require-slots-as-functions": ["error"],
+  "vue/require-toggle-inside-transition": ["error"],
+  "vue/require-v-for-key": ["error"],
+  "vue/require-valid-default-prop": ["error"],
+  "vue/return-in-computed-property": ["error"],
+  "vue/return-in-emits-validator": ["error"],
+  "vue/script-indent": ["off"],
+  "vue/singleline-html-element-content-newline": ["off"],
+  "vue/space-in-parens": ["off"],
+  "vue/space-infix-ops": ["off"],
+  "vue/space-unary-ops": ["off"],
+  "vue/template-curly-spacing": ["off"],
+  "vue/this-in-template": ["warn"],
+  "vue/use-v-on-exact": ["error"],
+  "vue/v-bind-style": ["warn"],
+  "vue/v-on-event-hyphenation": [
+    "warn",
+    "always",
+    {
+      "autofix": true
+    }
+  ],
+  "vue/v-on-style": ["warn"],
+  "vue/v-slot-style": ["warn"],
+  "vue/valid-attribute-name": ["error"],
+  "vue/valid-define-emits": ["error"],
+  "vue/valid-define-props": ["error"],
+  "vue/valid-model-definition": ["error"],
+  "vue/valid-next-tick": ["error"],
+  "vue/valid-template-root": ["error"],
+  "vue/valid-v-bind": ["error"],
+  "vue/valid-v-bind-sync": ["error"],
+  "vue/valid-v-cloak": ["error"],
+  "vue/valid-v-else": ["error"],
+  "vue/valid-v-else-if": ["error"],
+  "vue/valid-v-for": ["error"],
+  "vue/valid-v-html": ["error"],
+  "vue/valid-v-if": ["error"],
+  "vue/valid-v-is": ["error"],
+  "vue/valid-v-memo": ["error"],
+  "vue/valid-v-model": ["error"],
+  "vue/valid-v-on": ["error"],
+  "vue/valid-v-once": ["error"],
+  "vue/valid-v-pre": ["error"],
+  "vue/valid-v-show": ["error"],
+  "vue/valid-v-slot": ["error"],
+  "vue/valid-v-text": ["error"],
+  "wrap-iife": ["off"],
+  "wrap-regex": ["off"],
+  "yield-star-spacing": ["off"]
+}
diff --git a/frontend/eslint-config-vue.json b/frontend/eslint-config-vue.json
new file mode 100644
index 0000000000..ccf5d7fd83
--- /dev/null
+++ b/frontend/eslint-config-vue.json
@@ -0,0 +1,392 @@
+{
+  "@babel/object-curly-spacing": ["off"],
+  "@babel/semi": ["off"],
+  "@typescript-eslint/block-spacing": ["off"],
+  "@typescript-eslint/brace-style": ["off"],
+  "@typescript-eslint/comma-dangle": ["off"],
+  "@typescript-eslint/comma-spacing": ["off"],
+  "@typescript-eslint/func-call-spacing": ["off"],
+  "@typescript-eslint/indent": ["off"],
+  "@typescript-eslint/key-spacing": ["off"],
+  "@typescript-eslint/keyword-spacing": ["off"],
+  "@typescript-eslint/lines-around-comment": [0],
+  "@typescript-eslint/member-delimiter-style": ["off"],
+  "@typescript-eslint/no-extra-parens": ["off"],
+  "@typescript-eslint/no-extra-semi": ["off"],
+  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/quotes": [0],
+  "@typescript-eslint/semi": ["off"],
+  "@typescript-eslint/space-before-blocks": ["off"],
+  "@typescript-eslint/space-before-function-paren": ["off"],
+  "@typescript-eslint/space-infix-ops": ["off"],
+  "@typescript-eslint/type-annotation-spacing": ["off"],
+  "array-bracket-newline": ["off"],
+  "array-bracket-spacing": ["off"],
+  "array-element-newline": ["off"],
+  "arrow-body-style": ["off"],
+  "arrow-parens": ["off"],
+  "arrow-spacing": ["off"],
+  "babel/object-curly-spacing": ["off"],
+  "babel/quotes": [0],
+  "babel/semi": ["off"],
+  "block-spacing": ["off"],
+  "brace-style": ["off"],
+  "comma-dangle": ["off"],
+  "comma-spacing": ["off"],
+  "comma-style": ["off"],
+  "computed-property-spacing": ["off"],
+  "constructor-super": ["error"],
+  "curly": [0],
+  "dot-location": ["off"],
+  "eol-last": ["off"],
+  "flowtype/boolean-style": ["off"],
+  "flowtype/delimiter-dangle": ["off"],
+  "flowtype/generic-spacing": ["off"],
+  "flowtype/object-type-curly-spacing": ["off"],
+  "flowtype/object-type-delimiter": ["off"],
+  "flowtype/quotes": ["off"],
+  "flowtype/semi": ["off"],
+  "flowtype/space-after-type-colon": ["off"],
+  "flowtype/space-before-generic-bracket": ["off"],
+  "flowtype/space-before-type-colon": ["off"],
+  "flowtype/union-intersection-spacing": ["off"],
+  "for-direction": ["error"],
+  "func-call-spacing": ["off"],
+  "function-call-argument-newline": ["off"],
+  "function-paren-newline": ["off"],
+  "generator-star": ["off"],
+  "generator-star-spacing": ["off"],
+  "getter-return": ["error"],
+  "implicit-arrow-linebreak": ["off"],
+  "indent": ["off"],
+  "indent-legacy": ["off"],
+  "jsx-quotes": ["off"],
+  "key-spacing": ["off"],
+  "keyword-spacing": ["off"],
+  "linebreak-style": ["off"],
+  "lines-around-comment": [0],
+  "local-rules/matching-translation-keys": [
+    "error",
+    {
+      "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
+      "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
+    }
+  ],
+  "max-len": [0],
+  "max-statements-per-line": ["off"],
+  "multiline-ternary": ["off"],
+  "new-parens": ["off"],
+  "newline-per-chained-call": ["off"],
+  "no-arrow-condition": ["off"],
+  "no-async-promise-executor": ["error"],
+  "no-case-declarations": ["error"],
+  "no-class-assign": ["error"],
+  "no-comma-dangle": ["off"],
+  "no-compare-neg-zero": ["error"],
+  "no-cond-assign": ["error"],
+  "no-confusing-arrow": [0],
+  "no-const-assign": ["error"],
+  "no-constant-condition": ["error"],
+  "no-control-regex": ["error"],
+  "no-debugger": ["error"],
+  "no-delete-var": ["error"],
+  "no-dupe-args": ["error"],
+  "no-dupe-class-members": ["error"],
+  "no-dupe-else-if": ["error"],
+  "no-dupe-keys": ["error"],
+  "no-duplicate-case": ["error"],
+  "no-empty": ["error"],
+  "no-empty-character-class": ["error"],
+  "no-empty-pattern": ["error"],
+  "no-ex-assign": ["error"],
+  "no-extra-boolean-cast": ["error"],
+  "no-extra-parens": ["off"],
+  "no-extra-semi": ["off"],
+  "no-fallthrough": ["error"],
+  "no-floating-decimal": ["off"],
+  "no-func-assign": ["error"],
+  "no-global-assign": ["error"],
+  "no-import-assign": ["error"],
+  "no-inner-declarations": ["error"],
+  "no-invalid-regexp": ["error"],
+  "no-irregular-whitespace": ["error"],
+  "no-loss-of-precision": ["error"],
+  "no-misleading-character-class": ["error"],
+  "no-mixed-operators": [0],
+  "no-mixed-spaces-and-tabs": ["off"],
+  "no-multi-spaces": ["off"],
+  "no-multiple-empty-lines": ["off"],
+  "no-new-symbol": ["error"],
+  "no-nonoctal-decimal-escape": ["error"],
+  "no-obj-calls": ["error"],
+  "no-octal": ["error"],
+  "no-prototype-builtins": ["error"],
+  "no-redeclare": ["error"],
+  "no-regex-spaces": ["error"],
+  "no-reserved-keys": ["off"],
+  "no-self-assign": ["error"],
+  "no-setter-return": ["error"],
+  "no-shadow-restricted-names": ["error"],
+  "no-space-before-semi": ["off"],
+  "no-spaced-func": ["off"],
+  "no-sparse-arrays": ["error"],
+  "no-tabs": [0],
+  "no-this-before-super": ["error"],
+  "no-trailing-spaces": ["off"],
+  "no-undef": ["error"],
+  "no-unexpected-multiline": [0],
+  "no-unreachable": ["error"],
+  "no-unsafe-finally": ["error"],
+  "no-unsafe-negation": ["error"],
+  "no-unsafe-optional-chaining": ["error"],
+  "no-unused-labels": ["error"],
+  "no-unused-vars": [
+    "error",
+    {
+      "argsIgnorePattern": "^_$"
+    }
+  ],
+  "no-useless-backreference": ["error"],
+  "no-useless-catch": ["error"],
+  "no-useless-escape": ["error"],
+  "no-whitespace-before-property": ["off"],
+  "no-with": ["error"],
+  "no-wrap-func": ["off"],
+  "nonblock-statement-body-position": ["off"],
+  "object-curly-newline": ["off"],
+  "object-curly-spacing": ["off"],
+  "object-property-newline": ["off"],
+  "one-var-declaration-per-line": ["off"],
+  "operator-linebreak": ["off"],
+  "padded-blocks": ["off"],
+  "prefer-arrow-callback": ["off"],
+  "prefer-const": ["error"],
+  "prettier/prettier": ["error"],
+  "quote-props": ["off"],
+  "quotes": [0],
+  "react/jsx-child-element-spacing": ["off"],
+  "react/jsx-closing-bracket-location": ["off"],
+  "react/jsx-closing-tag-location": ["off"],
+  "react/jsx-curly-newline": ["off"],
+  "react/jsx-curly-spacing": ["off"],
+  "react/jsx-equals-spacing": ["off"],
+  "react/jsx-first-prop-new-line": ["off"],
+  "react/jsx-indent": ["off"],
+  "react/jsx-indent-props": ["off"],
+  "react/jsx-max-props-per-line": ["off"],
+  "react/jsx-newline": ["off"],
+  "react/jsx-one-expression-per-line": ["off"],
+  "react/jsx-props-no-multi-spaces": ["off"],
+  "react/jsx-space-before-closing": ["off"],
+  "react/jsx-tag-spacing": ["off"],
+  "react/jsx-wrap-multilines": ["off"],
+  "require-yield": ["error"],
+  "rest-spread-spacing": ["off"],
+  "semi": ["off"],
+  "semi-spacing": ["off"],
+  "semi-style": ["off"],
+  "space-after-function-name": ["off"],
+  "space-after-keywords": ["off"],
+  "space-before-blocks": ["off"],
+  "space-before-function-paren": ["off"],
+  "space-before-function-parentheses": ["off"],
+  "space-before-keywords": ["off"],
+  "space-in-brackets": ["off"],
+  "space-in-parens": ["off"],
+  "space-infix-ops": ["off"],
+  "space-return-throw-case": ["off"],
+  "space-unary-ops": ["off"],
+  "space-unary-word-ops": ["off"],
+  "standard/array-bracket-even-spacing": ["off"],
+  "standard/computed-property-even-spacing": ["off"],
+  "standard/object-curly-even-spacing": ["off"],
+  "switch-colon-spacing": ["off"],
+  "template-curly-spacing": ["off"],
+  "template-tag-spacing": ["off"],
+  "unicorn/empty-brace-spaces": ["off"],
+  "unicorn/no-nested-ternary": ["off"],
+  "unicorn/number-literal-case": ["off"],
+  "unicorn/template-indent": [0],
+  "use-isnan": ["error"],
+  "valid-typeof": ["error"],
+  "vue-scoped-css/enforce-style-type": ["warn"],
+  "vue-scoped-css/no-deprecated-deep-combinator": ["warn"],
+  "vue-scoped-css/no-parent-of-v-global": ["warn"],
+  "vue-scoped-css/no-parsing-error": ["warn"],
+  "vue-scoped-css/no-unused-keyframes": ["warn"],
+  "vue-scoped-css/no-unused-selector": ["warn"],
+  "vue-scoped-css/require-v-deep-argument": ["warn"],
+  "vue-scoped-css/require-v-global-argument": ["warn"],
+  "vue-scoped-css/require-v-slotted-argument": ["warn"],
+  "vue/array-bracket-newline": ["off"],
+  "vue/array-bracket-spacing": ["off"],
+  "vue/array-element-newline": ["off"],
+  "vue/arrow-spacing": ["off"],
+  "vue/attribute-hyphenation": ["warn"],
+  "vue/attributes-order": ["warn"],
+  "vue/block-spacing": ["off"],
+  "vue/block-tag-newline": ["off"],
+  "vue/brace-style": ["off"],
+  "vue/comma-dangle": ["off"],
+  "vue/comma-spacing": ["off"],
+  "vue/comma-style": ["off"],
+  "vue/comment-directive": ["error"],
+  "vue/component-definition-name-casing": ["warn"],
+  "vue/component-tags-order": [
+    "error",
+    {
+      "order": ["template", "script", "style"]
+    }
+  ],
+  "vue/dot-location": ["off"],
+  "vue/first-attribute-linebreak": ["warn"],
+  "vue/func-call-spacing": ["off"],
+  "vue/html-closing-bracket-newline": ["off"],
+  "vue/html-closing-bracket-spacing": ["off"],
+  "vue/html-end-tags": ["off"],
+  "vue/html-indent": ["off"],
+  "vue/html-quotes": ["off"],
+  "vue/html-self-closing": [0],
+  "vue/jsx-uses-vars": ["error"],
+  "vue/key-spacing": ["off"],
+  "vue/keyword-spacing": ["off"],
+  "vue/max-attributes-per-line": ["off"],
+  "vue/max-len": [0],
+  "vue/multi-word-component-names": ["off"],
+  "vue/multiline-html-element-content-newline": ["off"],
+  "vue/multiline-ternary": ["off"],
+  "vue/mustache-interpolation-spacing": ["off"],
+  "vue/no-arrow-functions-in-watch": ["error"],
+  "vue/no-async-in-computed-properties": ["error"],
+  "vue/no-child-content": ["error"],
+  "vue/no-computed-properties-in-data": ["error"],
+  "vue/no-custom-modifiers-on-v-model": ["error"],
+  "vue/no-deprecated-data-object-declaration": ["error"],
+  "vue/no-deprecated-destroyed-lifecycle": ["off"],
+  "vue/no-deprecated-dollar-listeners-api": ["off"],
+  "vue/no-deprecated-dollar-scopedslots-api": ["off"],
+  "vue/no-deprecated-events-api": ["error"],
+  "vue/no-deprecated-filter": ["warn"],
+  "vue/no-deprecated-functional-template": ["error"],
+  "vue/no-deprecated-html-element-is": ["error"],
+  "vue/no-deprecated-inline-template": ["error"],
+  "vue/no-deprecated-props-default-this": ["off"],
+  "vue/no-deprecated-router-link-tag-prop": ["error"],
+  "vue/no-deprecated-scope-attribute": ["error"],
+  "vue/no-deprecated-slot-attribute": ["off"],
+  "vue/no-deprecated-slot-scope-attribute": ["off"],
+  "vue/no-deprecated-v-bind-sync": ["off"],
+  "vue/no-deprecated-v-is": ["error"],
+  "vue/no-deprecated-v-on-native-modifier": ["warn"],
+  "vue/no-deprecated-v-on-number-modifiers": ["error"],
+  "vue/no-deprecated-vue-config-keycodes": ["error"],
+  "vue/no-dupe-keys": ["error"],
+  "vue/no-dupe-v-else-if": ["error"],
+  "vue/no-duplicate-attributes": ["error"],
+  "vue/no-export-in-script-setup": ["error"],
+  "vue/no-expose-after-await": ["error"],
+  "vue/no-extra-parens": ["off"],
+  "vue/no-lifecycle-after-await": ["error"],
+  "vue/no-lone-template": ["warn"],
+  "vue/no-multi-spaces": ["off"],
+  "vue/no-multiple-slot-args": ["warn"],
+  "vue/no-multiple-template-root": ["error"],
+  "vue/no-mutating-props": [
+    "error",
+    {
+      "shallowOnly": true
+    }
+  ],
+  "vue/no-parsing-error": ["error"],
+  "vue/no-ref-as-operand": ["error"],
+  "vue/no-reserved-component-names": ["error"],
+  "vue/no-reserved-keys": ["error"],
+  "vue/no-reserved-props": [
+    "error",
+    {
+      "vueVersion": 2
+    }
+  ],
+  "vue/no-shared-component-data": ["error"],
+  "vue/no-side-effects-in-computed-properties": ["error"],
+  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
+  "vue/no-template-key": ["error"],
+  "vue/no-template-shadow": ["warn"],
+  "vue/no-textarea-mustache": ["error"],
+  "vue/no-unused-components": ["error"],
+  "vue/no-unused-vars": ["error"],
+  "vue/no-use-computed-property-like-method": ["error"],
+  "vue/no-use-v-if-with-v-for": ["error"],
+  "vue/no-useless-template-attributes": ["error"],
+  "vue/no-v-for-template-key": ["error"],
+  "vue/no-v-for-template-key-on-child": ["off"],
+  "vue/no-v-html": ["warn"],
+  "vue/no-v-model-argument": ["warn"],
+  "vue/no-v-text-v-html-on-component": ["error"],
+  "vue/no-watch-after-await": ["error"],
+  "vue/object-curly-newline": ["off"],
+  "vue/object-curly-spacing": ["off"],
+  "vue/object-property-newline": ["off"],
+  "vue/one-component-per-file": ["warn"],
+  "vue/operator-linebreak": ["off"],
+  "vue/order-in-components": ["warn"],
+  "vue/prefer-import-from-vue": ["error"],
+  "vue/prop-name-casing": ["warn"],
+  "vue/quote-props": ["off"],
+  "vue/require-component-is": ["error"],
+  "vue/require-default-prop": ["warn"],
+  "vue/require-explicit-emits": ["off"],
+  "vue/require-prop-type-constructor": ["error"],
+  "vue/require-prop-types": ["warn"],
+  "vue/require-render-return": ["error"],
+  "vue/require-slots-as-functions": ["error"],
+  "vue/require-toggle-inside-transition": ["error"],
+  "vue/require-v-for-key": ["error"],
+  "vue/require-valid-default-prop": ["error"],
+  "vue/return-in-computed-property": ["error"],
+  "vue/return-in-emits-validator": ["error"],
+  "vue/script-indent": ["off"],
+  "vue/singleline-html-element-content-newline": ["off"],
+  "vue/space-in-parens": ["off"],
+  "vue/space-infix-ops": ["off"],
+  "vue/space-unary-ops": ["off"],
+  "vue/template-curly-spacing": ["off"],
+  "vue/this-in-template": ["warn"],
+  "vue/use-v-on-exact": ["error"],
+  "vue/v-bind-style": ["warn"],
+  "vue/v-on-event-hyphenation": [
+    "warn",
+    "always",
+    {
+      "autofix": true
+    }
+  ],
+  "vue/v-on-style": ["warn"],
+  "vue/v-slot-style": ["warn"],
+  "vue/valid-attribute-name": ["error"],
+  "vue/valid-define-emits": ["error"],
+  "vue/valid-define-props": ["error"],
+  "vue/valid-model-definition": ["error"],
+  "vue/valid-next-tick": ["error"],
+  "vue/valid-template-root": ["error"],
+  "vue/valid-v-bind": ["error"],
+  "vue/valid-v-bind-sync": ["error"],
+  "vue/valid-v-cloak": ["error"],
+  "vue/valid-v-else": ["error"],
+  "vue/valid-v-else-if": ["error"],
+  "vue/valid-v-for": ["error"],
+  "vue/valid-v-html": ["error"],
+  "vue/valid-v-if": ["error"],
+  "vue/valid-v-is": ["error"],
+  "vue/valid-v-memo": ["error"],
+  "vue/valid-v-model": ["error"],
+  "vue/valid-v-on": ["error"],
+  "vue/valid-v-once": ["error"],
+  "vue/valid-v-pre": ["error"],
+  "vue/valid-v-show": ["error"],
+  "vue/valid-v-slot": ["error"],
+  "vue/valid-v-text": ["error"],
+  "wrap-iife": ["off"],
+  "wrap-regex": ["off"],
+  "yield-star-spacing": ["off"]
+}

From 2b25e70fa984a12056e1170929535d58297a8dec Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Tue, 13 Aug 2024 23:08:27 +0200
Subject: [PATCH 075/273] frontend: move eslint config to .eslintrc.json

The config migrator needs the configuration to
be in a separate file.
https://eslint.org/blog/2024/05/eslint-configuration-migrator/
---
 frontend/.eslintrc.json | 61 +++++++++++++++++++++++++++++++++++++
 frontend/package.json   | 67 -----------------------------------------
 2 files changed, 61 insertions(+), 67 deletions(-)
 create mode 100644 frontend/.eslintrc.json

diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json
new file mode 100644
index 0000000000..805662e31e
--- /dev/null
+++ b/frontend/.eslintrc.json
@@ -0,0 +1,61 @@
+{
+  "root": true,
+  "env": {
+    "node": true,
+    "jest": true
+  },
+  "extends": [
+    "plugin:vue/recommended",
+    "plugin:vue/vue3-recommended",
+    "plugin:vue-scoped-css/vue3-recommended",
+    "eslint:recommended",
+    "plugin:prettier/recommended",
+    "@vue/eslint-config-prettier"
+  ],
+  "rules": {
+    "prefer-const": "error",
+    "prettier/prettier": "error",
+    "vue/component-tags-order": [
+      "error",
+      {
+        "order": ["template", "script", "style"]
+      }
+    ],
+    "vue/multi-word-component-names": "off",
+    "vue/no-deprecated-destroyed-lifecycle": "off",
+    "vue/no-deprecated-dollar-listeners-api": "off",
+    "vue/no-deprecated-dollar-scopedslots-api": "off",
+    "vue/no-deprecated-filter": "warn",
+    "vue/no-deprecated-props-default-this": "off",
+    "vue/no-deprecated-slot-attribute": "off",
+    "vue/no-deprecated-slot-scope-attribute": "off",
+    "vue/no-deprecated-v-bind-sync": "off",
+    "vue/no-deprecated-v-on-native-modifier": "warn",
+    "vue/no-v-for-template-key-on-child": "off",
+    "vue/no-v-model-argument": "warn",
+    "vue/require-explicit-emits": "off",
+    "no-unused-vars": [
+      "error",
+      {
+        "argsIgnorePattern": "^_$"
+      }
+    ],
+    "local-rules/matching-translation-keys": [
+      "error",
+      {
+        "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
+        "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
+      }
+    ],
+    "vue/no-mutating-props": [
+      "error",
+      {
+        "shallowOnly": true
+      }
+    ]
+  },
+  "parserOptions": {
+    "parser": "@babel/eslint-parser"
+  },
+  "plugins": ["eslint-plugin-local-rules"]
+}
diff --git a/frontend/package.json b/frontend/package.json
index a66d8cf05c..50bab34ec2 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -118,73 +118,6 @@
     "vitest-canvas-mock": "0.3.3",
     "vue-template-compiler": "2.7.15"
   },
-  "eslintConfig": {
-    "root": true,
-    "env": {
-      "node": true,
-      "jest": true
-    },
-    "extends": [
-      "plugin:vue/recommended",
-      "plugin:vue/vue3-recommended",
-      "plugin:vue-scoped-css/vue3-recommended",
-      "eslint:recommended",
-      "plugin:prettier/recommended",
-      "@vue/eslint-config-prettier"
-    ],
-    "rules": {
-      "prefer-const": "error",
-      "prettier/prettier": "error",
-      "vue/component-tags-order": [
-        "error",
-        {
-          "order": [
-            "template",
-            "script",
-            "style"
-          ]
-        }
-      ],
-      "vue/multi-word-component-names": "off",
-      "vue/no-deprecated-destroyed-lifecycle": "off",
-      "vue/no-deprecated-dollar-listeners-api": "off",
-      "vue/no-deprecated-dollar-scopedslots-api": "off",
-      "vue/no-deprecated-filter": "warn",
-      "vue/no-deprecated-props-default-this": "off",
-      "vue/no-deprecated-slot-attribute": "off",
-      "vue/no-deprecated-slot-scope-attribute": "off",
-      "vue/no-deprecated-v-bind-sync": "off",
-      "vue/no-deprecated-v-on-native-modifier": "warn",
-      "vue/no-v-for-template-key-on-child": "off",
-      "vue/no-v-model-argument": "warn",
-      "vue/require-explicit-emits": "off",
-      "no-unused-vars": [
-        "error",
-        {
-          "argsIgnorePattern": "^_$"
-        }
-      ],
-      "local-rules/matching-translation-keys": [
-        "error",
-        {
-          "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
-          "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
-        }
-      ],
-      "vue/no-mutating-props": [
-        "error",
-        {
-          "shallowOnly": true
-        }
-      ]
-    },
-    "parserOptions": {
-      "parser": "@babel/eslint-parser"
-    },
-    "plugins": [
-      "eslint-plugin-local-rules"
-    ]
-  },
   "postcss": {
     "plugins": {
       "autoprefixer": {}

From 5aba7fb3d564fc11262fc0d422e8786444323467 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Tue, 13 Aug 2024 23:48:37 +0200
Subject: [PATCH 076/273] frontend: migrate to flat config

Using npx @eslint/migrate-config .eslintrc.json

Then add the additional packages needed
npm install -D -E globals @eslint/js @eslint/eslintrc @eslint/compat

Add paths from the .gitignore file to the ignored patterns.
Add data, dist and public/twemoji explicitly because that did not work with the
includeIgnoreFile.
Remove the options from the call to eslint which are not
supported anymore in the package.json.

Issue: #5282
---
 frontend/.eslintrc.json         |  61 ---
 frontend/eslint-config-js.json  | 690 ++++++++++++++++----------------
 frontend/eslint-config-vue.json | 690 ++++++++++++++++----------------
 frontend/eslint.config.mjs      |  98 +++++
 frontend/package-lock.json      | 154 +++++--
 frontend/package.json           |   8 +-
 6 files changed, 916 insertions(+), 785 deletions(-)
 delete mode 100644 frontend/.eslintrc.json
 create mode 100644 frontend/eslint.config.mjs

diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json
deleted file mode 100644
index 805662e31e..0000000000
--- a/frontend/.eslintrc.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
-  "root": true,
-  "env": {
-    "node": true,
-    "jest": true
-  },
-  "extends": [
-    "plugin:vue/recommended",
-    "plugin:vue/vue3-recommended",
-    "plugin:vue-scoped-css/vue3-recommended",
-    "eslint:recommended",
-    "plugin:prettier/recommended",
-    "@vue/eslint-config-prettier"
-  ],
-  "rules": {
-    "prefer-const": "error",
-    "prettier/prettier": "error",
-    "vue/component-tags-order": [
-      "error",
-      {
-        "order": ["template", "script", "style"]
-      }
-    ],
-    "vue/multi-word-component-names": "off",
-    "vue/no-deprecated-destroyed-lifecycle": "off",
-    "vue/no-deprecated-dollar-listeners-api": "off",
-    "vue/no-deprecated-dollar-scopedslots-api": "off",
-    "vue/no-deprecated-filter": "warn",
-    "vue/no-deprecated-props-default-this": "off",
-    "vue/no-deprecated-slot-attribute": "off",
-    "vue/no-deprecated-slot-scope-attribute": "off",
-    "vue/no-deprecated-v-bind-sync": "off",
-    "vue/no-deprecated-v-on-native-modifier": "warn",
-    "vue/no-v-for-template-key-on-child": "off",
-    "vue/no-v-model-argument": "warn",
-    "vue/require-explicit-emits": "off",
-    "no-unused-vars": [
-      "error",
-      {
-        "argsIgnorePattern": "^_$"
-      }
-    ],
-    "local-rules/matching-translation-keys": [
-      "error",
-      {
-        "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
-        "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
-      }
-    ],
-    "vue/no-mutating-props": [
-      "error",
-      {
-        "shallowOnly": true
-      }
-    ]
-  },
-  "parserOptions": {
-    "parser": "@babel/eslint-parser"
-  },
-  "plugins": ["eslint-plugin-local-rules"]
-}
diff --git a/frontend/eslint-config-js.json b/frontend/eslint-config-js.json
index ccf5d7fd83..1bbc3a2a82 100644
--- a/frontend/eslint-config-js.json
+++ b/frontend/eslint-config-js.json
@@ -1,392 +1,394 @@
 {
-  "@babel/object-curly-spacing": ["off"],
-  "@babel/semi": ["off"],
-  "@typescript-eslint/block-spacing": ["off"],
-  "@typescript-eslint/brace-style": ["off"],
-  "@typescript-eslint/comma-dangle": ["off"],
-  "@typescript-eslint/comma-spacing": ["off"],
-  "@typescript-eslint/func-call-spacing": ["off"],
-  "@typescript-eslint/indent": ["off"],
-  "@typescript-eslint/key-spacing": ["off"],
-  "@typescript-eslint/keyword-spacing": ["off"],
+  "@babel/object-curly-spacing": [0],
+  "@babel/semi": [0],
+  "@typescript-eslint/block-spacing": [0],
+  "@typescript-eslint/brace-style": [0],
+  "@typescript-eslint/comma-dangle": [0],
+  "@typescript-eslint/comma-spacing": [0],
+  "@typescript-eslint/func-call-spacing": [0],
+  "@typescript-eslint/indent": [0],
+  "@typescript-eslint/key-spacing": [0],
+  "@typescript-eslint/keyword-spacing": [0],
   "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": ["off"],
-  "@typescript-eslint/no-extra-parens": ["off"],
-  "@typescript-eslint/no-extra-semi": ["off"],
-  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/member-delimiter-style": [0],
+  "@typescript-eslint/no-extra-parens": [0],
+  "@typescript-eslint/no-extra-semi": [0],
+  "@typescript-eslint/object-curly-spacing": [0],
   "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": ["off"],
-  "@typescript-eslint/space-before-blocks": ["off"],
-  "@typescript-eslint/space-before-function-paren": ["off"],
-  "@typescript-eslint/space-infix-ops": ["off"],
-  "@typescript-eslint/type-annotation-spacing": ["off"],
-  "array-bracket-newline": ["off"],
-  "array-bracket-spacing": ["off"],
-  "array-element-newline": ["off"],
-  "arrow-body-style": ["off"],
-  "arrow-parens": ["off"],
-  "arrow-spacing": ["off"],
-  "babel/object-curly-spacing": ["off"],
+  "@typescript-eslint/semi": [0],
+  "@typescript-eslint/space-before-blocks": [0],
+  "@typescript-eslint/space-before-function-paren": [0],
+  "@typescript-eslint/space-infix-ops": [0],
+  "@typescript-eslint/type-annotation-spacing": [0],
+  "array-bracket-newline": [0],
+  "array-bracket-spacing": [0],
+  "array-element-newline": [0],
+  "arrow-body-style": [0],
+  "arrow-parens": [0],
+  "arrow-spacing": [0],
+  "babel/object-curly-spacing": [0],
   "babel/quotes": [0],
-  "babel/semi": ["off"],
-  "block-spacing": ["off"],
-  "brace-style": ["off"],
-  "comma-dangle": ["off"],
-  "comma-spacing": ["off"],
-  "comma-style": ["off"],
-  "computed-property-spacing": ["off"],
-  "constructor-super": ["error"],
+  "babel/semi": [0],
+  "block-spacing": [0],
+  "brace-style": [0],
+  "comma-dangle": [0],
+  "comma-spacing": [0],
+  "comma-style": [0],
+  "computed-property-spacing": [0],
+  "constructor-super": [2],
   "curly": [0],
-  "dot-location": ["off"],
-  "eol-last": ["off"],
-  "flowtype/boolean-style": ["off"],
-  "flowtype/delimiter-dangle": ["off"],
-  "flowtype/generic-spacing": ["off"],
-  "flowtype/object-type-curly-spacing": ["off"],
-  "flowtype/object-type-delimiter": ["off"],
-  "flowtype/quotes": ["off"],
-  "flowtype/semi": ["off"],
-  "flowtype/space-after-type-colon": ["off"],
-  "flowtype/space-before-generic-bracket": ["off"],
-  "flowtype/space-before-type-colon": ["off"],
-  "flowtype/union-intersection-spacing": ["off"],
-  "for-direction": ["error"],
-  "func-call-spacing": ["off"],
-  "function-call-argument-newline": ["off"],
-  "function-paren-newline": ["off"],
-  "generator-star": ["off"],
-  "generator-star-spacing": ["off"],
-  "getter-return": ["error"],
-  "implicit-arrow-linebreak": ["off"],
-  "indent": ["off"],
-  "indent-legacy": ["off"],
-  "jsx-quotes": ["off"],
-  "key-spacing": ["off"],
-  "keyword-spacing": ["off"],
-  "linebreak-style": ["off"],
+  "dot-location": [0],
+  "eol-last": [0],
+  "flowtype/boolean-style": [0],
+  "flowtype/delimiter-dangle": [0],
+  "flowtype/generic-spacing": [0],
+  "flowtype/object-type-curly-spacing": [0],
+  "flowtype/object-type-delimiter": [0],
+  "flowtype/quotes": [0],
+  "flowtype/semi": [0],
+  "flowtype/space-after-type-colon": [0],
+  "flowtype/space-before-generic-bracket": [0],
+  "flowtype/space-before-type-colon": [0],
+  "flowtype/union-intersection-spacing": [0],
+  "for-direction": [2],
+  "func-call-spacing": [0],
+  "function-call-argument-newline": [0],
+  "function-paren-newline": [0],
+  "generator-star": [0],
+  "generator-star-spacing": [0],
+  "getter-return": [2],
+  "implicit-arrow-linebreak": [0],
+  "indent": [0],
+  "indent-legacy": [0],
+  "jsx-quotes": [0],
+  "key-spacing": [0],
+  "keyword-spacing": [0],
+  "linebreak-style": [0],
   "lines-around-comment": [0],
   "local-rules/matching-translation-keys": [
-    "error",
+    2,
     {
       "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
       "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
     }
   ],
   "max-len": [0],
-  "max-statements-per-line": ["off"],
-  "multiline-ternary": ["off"],
-  "new-parens": ["off"],
-  "newline-per-chained-call": ["off"],
-  "no-arrow-condition": ["off"],
-  "no-async-promise-executor": ["error"],
-  "no-case-declarations": ["error"],
-  "no-class-assign": ["error"],
-  "no-comma-dangle": ["off"],
-  "no-compare-neg-zero": ["error"],
-  "no-cond-assign": ["error"],
+  "max-statements-per-line": [0],
+  "multiline-ternary": [0],
+  "new-parens": [0],
+  "newline-per-chained-call": [0],
+  "no-arrow-condition": [0],
+  "no-async-promise-executor": [2],
+  "no-case-declarations": [2],
+  "no-class-assign": [2],
+  "no-comma-dangle": [0],
+  "no-compare-neg-zero": [2],
+  "no-cond-assign": [2],
   "no-confusing-arrow": [0],
-  "no-const-assign": ["error"],
-  "no-constant-condition": ["error"],
-  "no-control-regex": ["error"],
-  "no-debugger": ["error"],
-  "no-delete-var": ["error"],
-  "no-dupe-args": ["error"],
-  "no-dupe-class-members": ["error"],
-  "no-dupe-else-if": ["error"],
-  "no-dupe-keys": ["error"],
-  "no-duplicate-case": ["error"],
-  "no-empty": ["error"],
-  "no-empty-character-class": ["error"],
-  "no-empty-pattern": ["error"],
-  "no-ex-assign": ["error"],
-  "no-extra-boolean-cast": ["error"],
-  "no-extra-parens": ["off"],
-  "no-extra-semi": ["off"],
-  "no-fallthrough": ["error"],
-  "no-floating-decimal": ["off"],
-  "no-func-assign": ["error"],
-  "no-global-assign": ["error"],
-  "no-import-assign": ["error"],
-  "no-inner-declarations": ["error"],
-  "no-invalid-regexp": ["error"],
-  "no-irregular-whitespace": ["error"],
-  "no-loss-of-precision": ["error"],
-  "no-misleading-character-class": ["error"],
+  "no-const-assign": [2],
+  "no-constant-binary-expression": [2],
+  "no-constant-condition": [2],
+  "no-control-regex": [2],
+  "no-debugger": [2],
+  "no-delete-var": [2],
+  "no-dupe-args": [2],
+  "no-dupe-class-members": [2],
+  "no-dupe-else-if": [2],
+  "no-dupe-keys": [2],
+  "no-duplicate-case": [2],
+  "no-empty": [2],
+  "no-empty-character-class": [2],
+  "no-empty-pattern": [2],
+  "no-empty-static-block": [2],
+  "no-ex-assign": [2],
+  "no-extra-boolean-cast": [2],
+  "no-extra-parens": [0],
+  "no-extra-semi": [0],
+  "no-fallthrough": [2],
+  "no-floating-decimal": [0],
+  "no-func-assign": [2],
+  "no-global-assign": [2],
+  "no-import-assign": [2],
+  "no-invalid-regexp": [2],
+  "no-irregular-whitespace": [2],
+  "no-loss-of-precision": [2],
+  "no-misleading-character-class": [2],
   "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": ["off"],
-  "no-multi-spaces": ["off"],
-  "no-multiple-empty-lines": ["off"],
-  "no-new-symbol": ["error"],
-  "no-nonoctal-decimal-escape": ["error"],
-  "no-obj-calls": ["error"],
-  "no-octal": ["error"],
-  "no-prototype-builtins": ["error"],
-  "no-redeclare": ["error"],
-  "no-regex-spaces": ["error"],
-  "no-reserved-keys": ["off"],
-  "no-self-assign": ["error"],
-  "no-setter-return": ["error"],
-  "no-shadow-restricted-names": ["error"],
-  "no-space-before-semi": ["off"],
-  "no-spaced-func": ["off"],
-  "no-sparse-arrays": ["error"],
+  "no-mixed-spaces-and-tabs": [0],
+  "no-multi-spaces": [0],
+  "no-multiple-empty-lines": [0],
+  "no-new-native-nonconstructor": [2],
+  "no-nonoctal-decimal-escape": [2],
+  "no-obj-calls": [2],
+  "no-octal": [2],
+  "no-prototype-builtins": [2],
+  "no-redeclare": [2],
+  "no-regex-spaces": [2],
+  "no-reserved-keys": [0],
+  "no-self-assign": [2],
+  "no-setter-return": [2],
+  "no-shadow-restricted-names": [2],
+  "no-space-before-semi": [0],
+  "no-spaced-func": [0],
+  "no-sparse-arrays": [2],
   "no-tabs": [0],
-  "no-this-before-super": ["error"],
-  "no-trailing-spaces": ["off"],
-  "no-undef": ["error"],
+  "no-this-before-super": [2],
+  "no-trailing-spaces": [0],
+  "no-undef": [2],
   "no-unexpected-multiline": [0],
-  "no-unreachable": ["error"],
-  "no-unsafe-finally": ["error"],
-  "no-unsafe-negation": ["error"],
-  "no-unsafe-optional-chaining": ["error"],
-  "no-unused-labels": ["error"],
+  "no-unreachable": [2],
+  "no-unsafe-finally": [2],
+  "no-unsafe-negation": [2],
+  "no-unsafe-optional-chaining": [2],
+  "no-unused-labels": [2],
+  "no-unused-private-class-members": [2],
   "no-unused-vars": [
-    "error",
+    2,
     {
       "argsIgnorePattern": "^_$"
     }
   ],
-  "no-useless-backreference": ["error"],
-  "no-useless-catch": ["error"],
-  "no-useless-escape": ["error"],
-  "no-whitespace-before-property": ["off"],
-  "no-with": ["error"],
-  "no-wrap-func": ["off"],
-  "nonblock-statement-body-position": ["off"],
-  "object-curly-newline": ["off"],
-  "object-curly-spacing": ["off"],
-  "object-property-newline": ["off"],
-  "one-var-declaration-per-line": ["off"],
-  "operator-linebreak": ["off"],
-  "padded-blocks": ["off"],
-  "prefer-arrow-callback": ["off"],
-  "prefer-const": ["error"],
-  "prettier/prettier": ["error"],
-  "quote-props": ["off"],
+  "no-useless-backreference": [2],
+  "no-useless-catch": [2],
+  "no-useless-escape": [2],
+  "no-whitespace-before-property": [0],
+  "no-with": [2],
+  "no-wrap-func": [0],
+  "nonblock-statement-body-position": [0],
+  "object-curly-newline": [0],
+  "object-curly-spacing": [0],
+  "object-property-newline": [0],
+  "one-var-declaration-per-line": [0],
+  "operator-linebreak": [0],
+  "padded-blocks": [0],
+  "prefer-arrow-callback": [0],
+  "prefer-const": [2],
+  "prettier/prettier": [2],
+  "quote-props": [0],
   "quotes": [0],
-  "react/jsx-child-element-spacing": ["off"],
-  "react/jsx-closing-bracket-location": ["off"],
-  "react/jsx-closing-tag-location": ["off"],
-  "react/jsx-curly-newline": ["off"],
-  "react/jsx-curly-spacing": ["off"],
-  "react/jsx-equals-spacing": ["off"],
-  "react/jsx-first-prop-new-line": ["off"],
-  "react/jsx-indent": ["off"],
-  "react/jsx-indent-props": ["off"],
-  "react/jsx-max-props-per-line": ["off"],
-  "react/jsx-newline": ["off"],
-  "react/jsx-one-expression-per-line": ["off"],
-  "react/jsx-props-no-multi-spaces": ["off"],
-  "react/jsx-space-before-closing": ["off"],
-  "react/jsx-tag-spacing": ["off"],
-  "react/jsx-wrap-multilines": ["off"],
-  "require-yield": ["error"],
-  "rest-spread-spacing": ["off"],
-  "semi": ["off"],
-  "semi-spacing": ["off"],
-  "semi-style": ["off"],
-  "space-after-function-name": ["off"],
-  "space-after-keywords": ["off"],
-  "space-before-blocks": ["off"],
-  "space-before-function-paren": ["off"],
-  "space-before-function-parentheses": ["off"],
-  "space-before-keywords": ["off"],
-  "space-in-brackets": ["off"],
-  "space-in-parens": ["off"],
-  "space-infix-ops": ["off"],
-  "space-return-throw-case": ["off"],
-  "space-unary-ops": ["off"],
-  "space-unary-word-ops": ["off"],
-  "standard/array-bracket-even-spacing": ["off"],
-  "standard/computed-property-even-spacing": ["off"],
-  "standard/object-curly-even-spacing": ["off"],
-  "switch-colon-spacing": ["off"],
-  "template-curly-spacing": ["off"],
-  "template-tag-spacing": ["off"],
-  "unicorn/empty-brace-spaces": ["off"],
-  "unicorn/no-nested-ternary": ["off"],
-  "unicorn/number-literal-case": ["off"],
+  "react/jsx-child-element-spacing": [0],
+  "react/jsx-closing-bracket-location": [0],
+  "react/jsx-closing-tag-location": [0],
+  "react/jsx-curly-newline": [0],
+  "react/jsx-curly-spacing": [0],
+  "react/jsx-equals-spacing": [0],
+  "react/jsx-first-prop-new-line": [0],
+  "react/jsx-indent": [0],
+  "react/jsx-indent-props": [0],
+  "react/jsx-max-props-per-line": [0],
+  "react/jsx-newline": [0],
+  "react/jsx-one-expression-per-line": [0],
+  "react/jsx-props-no-multi-spaces": [0],
+  "react/jsx-space-before-closing": [0],
+  "react/jsx-tag-spacing": [0],
+  "react/jsx-wrap-multilines": [0],
+  "require-yield": [2],
+  "rest-spread-spacing": [0],
+  "semi": [0],
+  "semi-spacing": [0],
+  "semi-style": [0],
+  "space-after-function-name": [0],
+  "space-after-keywords": [0],
+  "space-before-blocks": [0],
+  "space-before-function-paren": [0],
+  "space-before-function-parentheses": [0],
+  "space-before-keywords": [0],
+  "space-in-brackets": [0],
+  "space-in-parens": [0],
+  "space-infix-ops": [0],
+  "space-return-throw-case": [0],
+  "space-unary-ops": [0],
+  "space-unary-word-ops": [0],
+  "standard/array-bracket-even-spacing": [0],
+  "standard/computed-property-even-spacing": [0],
+  "standard/object-curly-even-spacing": [0],
+  "switch-colon-spacing": [0],
+  "template-curly-spacing": [0],
+  "template-tag-spacing": [0],
+  "unicorn/empty-brace-spaces": [0],
+  "unicorn/no-nested-ternary": [0],
+  "unicorn/number-literal-case": [0],
   "unicorn/template-indent": [0],
-  "use-isnan": ["error"],
-  "valid-typeof": ["error"],
-  "vue-scoped-css/enforce-style-type": ["warn"],
-  "vue-scoped-css/no-deprecated-deep-combinator": ["warn"],
-  "vue-scoped-css/no-parent-of-v-global": ["warn"],
-  "vue-scoped-css/no-parsing-error": ["warn"],
-  "vue-scoped-css/no-unused-keyframes": ["warn"],
-  "vue-scoped-css/no-unused-selector": ["warn"],
-  "vue-scoped-css/require-v-deep-argument": ["warn"],
-  "vue-scoped-css/require-v-global-argument": ["warn"],
-  "vue-scoped-css/require-v-slotted-argument": ["warn"],
-  "vue/array-bracket-newline": ["off"],
-  "vue/array-bracket-spacing": ["off"],
-  "vue/array-element-newline": ["off"],
-  "vue/arrow-spacing": ["off"],
-  "vue/attribute-hyphenation": ["warn"],
-  "vue/attributes-order": ["warn"],
-  "vue/block-spacing": ["off"],
-  "vue/block-tag-newline": ["off"],
-  "vue/brace-style": ["off"],
-  "vue/comma-dangle": ["off"],
-  "vue/comma-spacing": ["off"],
-  "vue/comma-style": ["off"],
-  "vue/comment-directive": ["error"],
-  "vue/component-definition-name-casing": ["warn"],
+  "use-isnan": [2],
+  "valid-typeof": [2],
+  "vue-scoped-css/enforce-style-type": [1],
+  "vue-scoped-css/no-deprecated-deep-combinator": [1],
+  "vue-scoped-css/no-parent-of-v-global": [1],
+  "vue-scoped-css/no-parsing-error": [1],
+  "vue-scoped-css/no-unused-keyframes": [1],
+  "vue-scoped-css/no-unused-selector": [1],
+  "vue-scoped-css/require-v-deep-argument": [1],
+  "vue-scoped-css/require-v-global-argument": [1],
+  "vue-scoped-css/require-v-slotted-argument": [1],
+  "vue/array-bracket-newline": [0],
+  "vue/array-bracket-spacing": [0],
+  "vue/array-element-newline": [0],
+  "vue/arrow-spacing": [0],
+  "vue/attribute-hyphenation": [1],
+  "vue/attributes-order": [1],
+  "vue/block-spacing": [0],
+  "vue/block-tag-newline": [0],
+  "vue/brace-style": [0],
+  "vue/comma-dangle": [0],
+  "vue/comma-spacing": [0],
+  "vue/comma-style": [0],
+  "vue/comment-directive": [2],
+  "vue/component-definition-name-casing": [1],
   "vue/component-tags-order": [
-    "error",
+    2,
     {
       "order": ["template", "script", "style"]
     }
   ],
-  "vue/dot-location": ["off"],
-  "vue/first-attribute-linebreak": ["warn"],
-  "vue/func-call-spacing": ["off"],
-  "vue/html-closing-bracket-newline": ["off"],
-  "vue/html-closing-bracket-spacing": ["off"],
-  "vue/html-end-tags": ["off"],
-  "vue/html-indent": ["off"],
-  "vue/html-quotes": ["off"],
+  "vue/dot-location": [0],
+  "vue/first-attribute-linebreak": [1],
+  "vue/func-call-spacing": [0],
+  "vue/html-closing-bracket-newline": [0],
+  "vue/html-closing-bracket-spacing": [0],
+  "vue/html-end-tags": [0],
+  "vue/html-indent": [0],
+  "vue/html-quotes": [0],
   "vue/html-self-closing": [0],
-  "vue/jsx-uses-vars": ["error"],
-  "vue/key-spacing": ["off"],
-  "vue/keyword-spacing": ["off"],
-  "vue/max-attributes-per-line": ["off"],
+  "vue/jsx-uses-vars": [2],
+  "vue/key-spacing": [0],
+  "vue/keyword-spacing": [0],
+  "vue/max-attributes-per-line": [0],
   "vue/max-len": [0],
-  "vue/multi-word-component-names": ["off"],
-  "vue/multiline-html-element-content-newline": ["off"],
-  "vue/multiline-ternary": ["off"],
-  "vue/mustache-interpolation-spacing": ["off"],
-  "vue/no-arrow-functions-in-watch": ["error"],
-  "vue/no-async-in-computed-properties": ["error"],
-  "vue/no-child-content": ["error"],
-  "vue/no-computed-properties-in-data": ["error"],
-  "vue/no-custom-modifiers-on-v-model": ["error"],
-  "vue/no-deprecated-data-object-declaration": ["error"],
-  "vue/no-deprecated-destroyed-lifecycle": ["off"],
-  "vue/no-deprecated-dollar-listeners-api": ["off"],
-  "vue/no-deprecated-dollar-scopedslots-api": ["off"],
-  "vue/no-deprecated-events-api": ["error"],
-  "vue/no-deprecated-filter": ["warn"],
-  "vue/no-deprecated-functional-template": ["error"],
-  "vue/no-deprecated-html-element-is": ["error"],
-  "vue/no-deprecated-inline-template": ["error"],
-  "vue/no-deprecated-props-default-this": ["off"],
-  "vue/no-deprecated-router-link-tag-prop": ["error"],
-  "vue/no-deprecated-scope-attribute": ["error"],
-  "vue/no-deprecated-slot-attribute": ["off"],
-  "vue/no-deprecated-slot-scope-attribute": ["off"],
-  "vue/no-deprecated-v-bind-sync": ["off"],
-  "vue/no-deprecated-v-is": ["error"],
-  "vue/no-deprecated-v-on-native-modifier": ["warn"],
-  "vue/no-deprecated-v-on-number-modifiers": ["error"],
-  "vue/no-deprecated-vue-config-keycodes": ["error"],
-  "vue/no-dupe-keys": ["error"],
-  "vue/no-dupe-v-else-if": ["error"],
-  "vue/no-duplicate-attributes": ["error"],
-  "vue/no-export-in-script-setup": ["error"],
-  "vue/no-expose-after-await": ["error"],
-  "vue/no-extra-parens": ["off"],
-  "vue/no-lifecycle-after-await": ["error"],
-  "vue/no-lone-template": ["warn"],
-  "vue/no-multi-spaces": ["off"],
-  "vue/no-multiple-slot-args": ["warn"],
-  "vue/no-multiple-template-root": ["error"],
+  "vue/multi-word-component-names": [0],
+  "vue/multiline-html-element-content-newline": [0],
+  "vue/multiline-ternary": [0],
+  "vue/mustache-interpolation-spacing": [0],
+  "vue/no-arrow-functions-in-watch": [2],
+  "vue/no-async-in-computed-properties": [2],
+  "vue/no-child-content": [2],
+  "vue/no-computed-properties-in-data": [2],
+  "vue/no-custom-modifiers-on-v-model": [2],
+  "vue/no-deprecated-data-object-declaration": [2],
+  "vue/no-deprecated-destroyed-lifecycle": [0],
+  "vue/no-deprecated-dollar-listeners-api": [0],
+  "vue/no-deprecated-dollar-scopedslots-api": [0],
+  "vue/no-deprecated-events-api": [2],
+  "vue/no-deprecated-filter": [1],
+  "vue/no-deprecated-functional-template": [2],
+  "vue/no-deprecated-html-element-is": [2],
+  "vue/no-deprecated-inline-template": [2],
+  "vue/no-deprecated-props-default-this": [0],
+  "vue/no-deprecated-router-link-tag-prop": [2],
+  "vue/no-deprecated-scope-attribute": [2],
+  "vue/no-deprecated-slot-attribute": [0],
+  "vue/no-deprecated-slot-scope-attribute": [0],
+  "vue/no-deprecated-v-bind-sync": [0],
+  "vue/no-deprecated-v-is": [2],
+  "vue/no-deprecated-v-on-native-modifier": [1],
+  "vue/no-deprecated-v-on-number-modifiers": [2],
+  "vue/no-deprecated-vue-config-keycodes": [2],
+  "vue/no-dupe-keys": [2],
+  "vue/no-dupe-v-else-if": [2],
+  "vue/no-duplicate-attributes": [2],
+  "vue/no-export-in-script-setup": [2],
+  "vue/no-expose-after-await": [2],
+  "vue/no-extra-parens": [0],
+  "vue/no-lifecycle-after-await": [2],
+  "vue/no-lone-template": [1],
+  "vue/no-multi-spaces": [0],
+  "vue/no-multiple-slot-args": [1],
+  "vue/no-multiple-template-root": [2],
   "vue/no-mutating-props": [
-    "error",
+    2,
     {
       "shallowOnly": true
     }
   ],
-  "vue/no-parsing-error": ["error"],
-  "vue/no-ref-as-operand": ["error"],
-  "vue/no-reserved-component-names": ["error"],
-  "vue/no-reserved-keys": ["error"],
+  "vue/no-parsing-error": [2],
+  "vue/no-ref-as-operand": [2],
+  "vue/no-reserved-component-names": [2],
+  "vue/no-reserved-keys": [2],
   "vue/no-reserved-props": [
-    "error",
+    2,
     {
       "vueVersion": 2
     }
   ],
-  "vue/no-shared-component-data": ["error"],
-  "vue/no-side-effects-in-computed-properties": ["error"],
-  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
-  "vue/no-template-key": ["error"],
-  "vue/no-template-shadow": ["warn"],
-  "vue/no-textarea-mustache": ["error"],
-  "vue/no-unused-components": ["error"],
-  "vue/no-unused-vars": ["error"],
-  "vue/no-use-computed-property-like-method": ["error"],
-  "vue/no-use-v-if-with-v-for": ["error"],
-  "vue/no-useless-template-attributes": ["error"],
-  "vue/no-v-for-template-key": ["error"],
-  "vue/no-v-for-template-key-on-child": ["off"],
-  "vue/no-v-html": ["warn"],
-  "vue/no-v-model-argument": ["warn"],
-  "vue/no-v-text-v-html-on-component": ["error"],
-  "vue/no-watch-after-await": ["error"],
-  "vue/object-curly-newline": ["off"],
-  "vue/object-curly-spacing": ["off"],
-  "vue/object-property-newline": ["off"],
-  "vue/one-component-per-file": ["warn"],
-  "vue/operator-linebreak": ["off"],
-  "vue/order-in-components": ["warn"],
-  "vue/prefer-import-from-vue": ["error"],
-  "vue/prop-name-casing": ["warn"],
-  "vue/quote-props": ["off"],
-  "vue/require-component-is": ["error"],
-  "vue/require-default-prop": ["warn"],
-  "vue/require-explicit-emits": ["off"],
-  "vue/require-prop-type-constructor": ["error"],
-  "vue/require-prop-types": ["warn"],
-  "vue/require-render-return": ["error"],
-  "vue/require-slots-as-functions": ["error"],
-  "vue/require-toggle-inside-transition": ["error"],
-  "vue/require-v-for-key": ["error"],
-  "vue/require-valid-default-prop": ["error"],
-  "vue/return-in-computed-property": ["error"],
-  "vue/return-in-emits-validator": ["error"],
-  "vue/script-indent": ["off"],
-  "vue/singleline-html-element-content-newline": ["off"],
-  "vue/space-in-parens": ["off"],
-  "vue/space-infix-ops": ["off"],
-  "vue/space-unary-ops": ["off"],
-  "vue/template-curly-spacing": ["off"],
-  "vue/this-in-template": ["warn"],
-  "vue/use-v-on-exact": ["error"],
-  "vue/v-bind-style": ["warn"],
+  "vue/no-shared-component-data": [2],
+  "vue/no-side-effects-in-computed-properties": [2],
+  "vue/no-spaces-around-equal-signs-in-attribute": [0],
+  "vue/no-template-key": [2],
+  "vue/no-template-shadow": [1],
+  "vue/no-textarea-mustache": [2],
+  "vue/no-unused-components": [2],
+  "vue/no-unused-vars": [2],
+  "vue/no-use-computed-property-like-method": [2],
+  "vue/no-use-v-if-with-v-for": [2],
+  "vue/no-useless-template-attributes": [2],
+  "vue/no-v-for-template-key": [2],
+  "vue/no-v-for-template-key-on-child": [0],
+  "vue/no-v-html": [1],
+  "vue/no-v-model-argument": [1],
+  "vue/no-v-text-v-html-on-component": [2],
+  "vue/no-watch-after-await": [2],
+  "vue/object-curly-newline": [0],
+  "vue/object-curly-spacing": [0],
+  "vue/object-property-newline": [0],
+  "vue/one-component-per-file": [1],
+  "vue/operator-linebreak": [0],
+  "vue/order-in-components": [1],
+  "vue/prefer-import-from-vue": [2],
+  "vue/prop-name-casing": [1],
+  "vue/quote-props": [0],
+  "vue/require-component-is": [2],
+  "vue/require-default-prop": [1],
+  "vue/require-explicit-emits": [0],
+  "vue/require-prop-type-constructor": [2],
+  "vue/require-prop-types": [1],
+  "vue/require-render-return": [2],
+  "vue/require-slots-as-functions": [2],
+  "vue/require-toggle-inside-transition": [2],
+  "vue/require-v-for-key": [2],
+  "vue/require-valid-default-prop": [2],
+  "vue/return-in-computed-property": [2],
+  "vue/return-in-emits-validator": [2],
+  "vue/script-indent": [0],
+  "vue/singleline-html-element-content-newline": [0],
+  "vue/space-in-parens": [0],
+  "vue/space-infix-ops": [0],
+  "vue/space-unary-ops": [0],
+  "vue/template-curly-spacing": [0],
+  "vue/this-in-template": [1],
+  "vue/use-v-on-exact": [2],
+  "vue/v-bind-style": [1],
   "vue/v-on-event-hyphenation": [
-    "warn",
+    1,
     "always",
     {
       "autofix": true
     }
   ],
-  "vue/v-on-style": ["warn"],
-  "vue/v-slot-style": ["warn"],
-  "vue/valid-attribute-name": ["error"],
-  "vue/valid-define-emits": ["error"],
-  "vue/valid-define-props": ["error"],
-  "vue/valid-model-definition": ["error"],
-  "vue/valid-next-tick": ["error"],
-  "vue/valid-template-root": ["error"],
-  "vue/valid-v-bind": ["error"],
-  "vue/valid-v-bind-sync": ["error"],
-  "vue/valid-v-cloak": ["error"],
-  "vue/valid-v-else": ["error"],
-  "vue/valid-v-else-if": ["error"],
-  "vue/valid-v-for": ["error"],
-  "vue/valid-v-html": ["error"],
-  "vue/valid-v-if": ["error"],
-  "vue/valid-v-is": ["error"],
-  "vue/valid-v-memo": ["error"],
-  "vue/valid-v-model": ["error"],
-  "vue/valid-v-on": ["error"],
-  "vue/valid-v-once": ["error"],
-  "vue/valid-v-pre": ["error"],
-  "vue/valid-v-show": ["error"],
-  "vue/valid-v-slot": ["error"],
-  "vue/valid-v-text": ["error"],
-  "wrap-iife": ["off"],
-  "wrap-regex": ["off"],
-  "yield-star-spacing": ["off"]
+  "vue/v-on-style": [1],
+  "vue/v-slot-style": [1],
+  "vue/valid-attribute-name": [2],
+  "vue/valid-define-emits": [2],
+  "vue/valid-define-props": [2],
+  "vue/valid-model-definition": [2],
+  "vue/valid-next-tick": [2],
+  "vue/valid-template-root": [2],
+  "vue/valid-v-bind": [2],
+  "vue/valid-v-bind-sync": [2],
+  "vue/valid-v-cloak": [2],
+  "vue/valid-v-else": [2],
+  "vue/valid-v-else-if": [2],
+  "vue/valid-v-for": [2],
+  "vue/valid-v-html": [2],
+  "vue/valid-v-if": [2],
+  "vue/valid-v-is": [2],
+  "vue/valid-v-memo": [2],
+  "vue/valid-v-model": [2],
+  "vue/valid-v-on": [2],
+  "vue/valid-v-once": [2],
+  "vue/valid-v-pre": [2],
+  "vue/valid-v-show": [2],
+  "vue/valid-v-slot": [2],
+  "vue/valid-v-text": [2],
+  "wrap-iife": [0],
+  "wrap-regex": [0],
+  "yield-star-spacing": [0]
 }
diff --git a/frontend/eslint-config-vue.json b/frontend/eslint-config-vue.json
index ccf5d7fd83..1bbc3a2a82 100644
--- a/frontend/eslint-config-vue.json
+++ b/frontend/eslint-config-vue.json
@@ -1,392 +1,394 @@
 {
-  "@babel/object-curly-spacing": ["off"],
-  "@babel/semi": ["off"],
-  "@typescript-eslint/block-spacing": ["off"],
-  "@typescript-eslint/brace-style": ["off"],
-  "@typescript-eslint/comma-dangle": ["off"],
-  "@typescript-eslint/comma-spacing": ["off"],
-  "@typescript-eslint/func-call-spacing": ["off"],
-  "@typescript-eslint/indent": ["off"],
-  "@typescript-eslint/key-spacing": ["off"],
-  "@typescript-eslint/keyword-spacing": ["off"],
+  "@babel/object-curly-spacing": [0],
+  "@babel/semi": [0],
+  "@typescript-eslint/block-spacing": [0],
+  "@typescript-eslint/brace-style": [0],
+  "@typescript-eslint/comma-dangle": [0],
+  "@typescript-eslint/comma-spacing": [0],
+  "@typescript-eslint/func-call-spacing": [0],
+  "@typescript-eslint/indent": [0],
+  "@typescript-eslint/key-spacing": [0],
+  "@typescript-eslint/keyword-spacing": [0],
   "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": ["off"],
-  "@typescript-eslint/no-extra-parens": ["off"],
-  "@typescript-eslint/no-extra-semi": ["off"],
-  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/member-delimiter-style": [0],
+  "@typescript-eslint/no-extra-parens": [0],
+  "@typescript-eslint/no-extra-semi": [0],
+  "@typescript-eslint/object-curly-spacing": [0],
   "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": ["off"],
-  "@typescript-eslint/space-before-blocks": ["off"],
-  "@typescript-eslint/space-before-function-paren": ["off"],
-  "@typescript-eslint/space-infix-ops": ["off"],
-  "@typescript-eslint/type-annotation-spacing": ["off"],
-  "array-bracket-newline": ["off"],
-  "array-bracket-spacing": ["off"],
-  "array-element-newline": ["off"],
-  "arrow-body-style": ["off"],
-  "arrow-parens": ["off"],
-  "arrow-spacing": ["off"],
-  "babel/object-curly-spacing": ["off"],
+  "@typescript-eslint/semi": [0],
+  "@typescript-eslint/space-before-blocks": [0],
+  "@typescript-eslint/space-before-function-paren": [0],
+  "@typescript-eslint/space-infix-ops": [0],
+  "@typescript-eslint/type-annotation-spacing": [0],
+  "array-bracket-newline": [0],
+  "array-bracket-spacing": [0],
+  "array-element-newline": [0],
+  "arrow-body-style": [0],
+  "arrow-parens": [0],
+  "arrow-spacing": [0],
+  "babel/object-curly-spacing": [0],
   "babel/quotes": [0],
-  "babel/semi": ["off"],
-  "block-spacing": ["off"],
-  "brace-style": ["off"],
-  "comma-dangle": ["off"],
-  "comma-spacing": ["off"],
-  "comma-style": ["off"],
-  "computed-property-spacing": ["off"],
-  "constructor-super": ["error"],
+  "babel/semi": [0],
+  "block-spacing": [0],
+  "brace-style": [0],
+  "comma-dangle": [0],
+  "comma-spacing": [0],
+  "comma-style": [0],
+  "computed-property-spacing": [0],
+  "constructor-super": [2],
   "curly": [0],
-  "dot-location": ["off"],
-  "eol-last": ["off"],
-  "flowtype/boolean-style": ["off"],
-  "flowtype/delimiter-dangle": ["off"],
-  "flowtype/generic-spacing": ["off"],
-  "flowtype/object-type-curly-spacing": ["off"],
-  "flowtype/object-type-delimiter": ["off"],
-  "flowtype/quotes": ["off"],
-  "flowtype/semi": ["off"],
-  "flowtype/space-after-type-colon": ["off"],
-  "flowtype/space-before-generic-bracket": ["off"],
-  "flowtype/space-before-type-colon": ["off"],
-  "flowtype/union-intersection-spacing": ["off"],
-  "for-direction": ["error"],
-  "func-call-spacing": ["off"],
-  "function-call-argument-newline": ["off"],
-  "function-paren-newline": ["off"],
-  "generator-star": ["off"],
-  "generator-star-spacing": ["off"],
-  "getter-return": ["error"],
-  "implicit-arrow-linebreak": ["off"],
-  "indent": ["off"],
-  "indent-legacy": ["off"],
-  "jsx-quotes": ["off"],
-  "key-spacing": ["off"],
-  "keyword-spacing": ["off"],
-  "linebreak-style": ["off"],
+  "dot-location": [0],
+  "eol-last": [0],
+  "flowtype/boolean-style": [0],
+  "flowtype/delimiter-dangle": [0],
+  "flowtype/generic-spacing": [0],
+  "flowtype/object-type-curly-spacing": [0],
+  "flowtype/object-type-delimiter": [0],
+  "flowtype/quotes": [0],
+  "flowtype/semi": [0],
+  "flowtype/space-after-type-colon": [0],
+  "flowtype/space-before-generic-bracket": [0],
+  "flowtype/space-before-type-colon": [0],
+  "flowtype/union-intersection-spacing": [0],
+  "for-direction": [2],
+  "func-call-spacing": [0],
+  "function-call-argument-newline": [0],
+  "function-paren-newline": [0],
+  "generator-star": [0],
+  "generator-star-spacing": [0],
+  "getter-return": [2],
+  "implicit-arrow-linebreak": [0],
+  "indent": [0],
+  "indent-legacy": [0],
+  "jsx-quotes": [0],
+  "key-spacing": [0],
+  "keyword-spacing": [0],
+  "linebreak-style": [0],
   "lines-around-comment": [0],
   "local-rules/matching-translation-keys": [
-    "error",
+    2,
     {
       "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
       "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
     }
   ],
   "max-len": [0],
-  "max-statements-per-line": ["off"],
-  "multiline-ternary": ["off"],
-  "new-parens": ["off"],
-  "newline-per-chained-call": ["off"],
-  "no-arrow-condition": ["off"],
-  "no-async-promise-executor": ["error"],
-  "no-case-declarations": ["error"],
-  "no-class-assign": ["error"],
-  "no-comma-dangle": ["off"],
-  "no-compare-neg-zero": ["error"],
-  "no-cond-assign": ["error"],
+  "max-statements-per-line": [0],
+  "multiline-ternary": [0],
+  "new-parens": [0],
+  "newline-per-chained-call": [0],
+  "no-arrow-condition": [0],
+  "no-async-promise-executor": [2],
+  "no-case-declarations": [2],
+  "no-class-assign": [2],
+  "no-comma-dangle": [0],
+  "no-compare-neg-zero": [2],
+  "no-cond-assign": [2],
   "no-confusing-arrow": [0],
-  "no-const-assign": ["error"],
-  "no-constant-condition": ["error"],
-  "no-control-regex": ["error"],
-  "no-debugger": ["error"],
-  "no-delete-var": ["error"],
-  "no-dupe-args": ["error"],
-  "no-dupe-class-members": ["error"],
-  "no-dupe-else-if": ["error"],
-  "no-dupe-keys": ["error"],
-  "no-duplicate-case": ["error"],
-  "no-empty": ["error"],
-  "no-empty-character-class": ["error"],
-  "no-empty-pattern": ["error"],
-  "no-ex-assign": ["error"],
-  "no-extra-boolean-cast": ["error"],
-  "no-extra-parens": ["off"],
-  "no-extra-semi": ["off"],
-  "no-fallthrough": ["error"],
-  "no-floating-decimal": ["off"],
-  "no-func-assign": ["error"],
-  "no-global-assign": ["error"],
-  "no-import-assign": ["error"],
-  "no-inner-declarations": ["error"],
-  "no-invalid-regexp": ["error"],
-  "no-irregular-whitespace": ["error"],
-  "no-loss-of-precision": ["error"],
-  "no-misleading-character-class": ["error"],
+  "no-const-assign": [2],
+  "no-constant-binary-expression": [2],
+  "no-constant-condition": [2],
+  "no-control-regex": [2],
+  "no-debugger": [2],
+  "no-delete-var": [2],
+  "no-dupe-args": [2],
+  "no-dupe-class-members": [2],
+  "no-dupe-else-if": [2],
+  "no-dupe-keys": [2],
+  "no-duplicate-case": [2],
+  "no-empty": [2],
+  "no-empty-character-class": [2],
+  "no-empty-pattern": [2],
+  "no-empty-static-block": [2],
+  "no-ex-assign": [2],
+  "no-extra-boolean-cast": [2],
+  "no-extra-parens": [0],
+  "no-extra-semi": [0],
+  "no-fallthrough": [2],
+  "no-floating-decimal": [0],
+  "no-func-assign": [2],
+  "no-global-assign": [2],
+  "no-import-assign": [2],
+  "no-invalid-regexp": [2],
+  "no-irregular-whitespace": [2],
+  "no-loss-of-precision": [2],
+  "no-misleading-character-class": [2],
   "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": ["off"],
-  "no-multi-spaces": ["off"],
-  "no-multiple-empty-lines": ["off"],
-  "no-new-symbol": ["error"],
-  "no-nonoctal-decimal-escape": ["error"],
-  "no-obj-calls": ["error"],
-  "no-octal": ["error"],
-  "no-prototype-builtins": ["error"],
-  "no-redeclare": ["error"],
-  "no-regex-spaces": ["error"],
-  "no-reserved-keys": ["off"],
-  "no-self-assign": ["error"],
-  "no-setter-return": ["error"],
-  "no-shadow-restricted-names": ["error"],
-  "no-space-before-semi": ["off"],
-  "no-spaced-func": ["off"],
-  "no-sparse-arrays": ["error"],
+  "no-mixed-spaces-and-tabs": [0],
+  "no-multi-spaces": [0],
+  "no-multiple-empty-lines": [0],
+  "no-new-native-nonconstructor": [2],
+  "no-nonoctal-decimal-escape": [2],
+  "no-obj-calls": [2],
+  "no-octal": [2],
+  "no-prototype-builtins": [2],
+  "no-redeclare": [2],
+  "no-regex-spaces": [2],
+  "no-reserved-keys": [0],
+  "no-self-assign": [2],
+  "no-setter-return": [2],
+  "no-shadow-restricted-names": [2],
+  "no-space-before-semi": [0],
+  "no-spaced-func": [0],
+  "no-sparse-arrays": [2],
   "no-tabs": [0],
-  "no-this-before-super": ["error"],
-  "no-trailing-spaces": ["off"],
-  "no-undef": ["error"],
+  "no-this-before-super": [2],
+  "no-trailing-spaces": [0],
+  "no-undef": [2],
   "no-unexpected-multiline": [0],
-  "no-unreachable": ["error"],
-  "no-unsafe-finally": ["error"],
-  "no-unsafe-negation": ["error"],
-  "no-unsafe-optional-chaining": ["error"],
-  "no-unused-labels": ["error"],
+  "no-unreachable": [2],
+  "no-unsafe-finally": [2],
+  "no-unsafe-negation": [2],
+  "no-unsafe-optional-chaining": [2],
+  "no-unused-labels": [2],
+  "no-unused-private-class-members": [2],
   "no-unused-vars": [
-    "error",
+    2,
     {
       "argsIgnorePattern": "^_$"
     }
   ],
-  "no-useless-backreference": ["error"],
-  "no-useless-catch": ["error"],
-  "no-useless-escape": ["error"],
-  "no-whitespace-before-property": ["off"],
-  "no-with": ["error"],
-  "no-wrap-func": ["off"],
-  "nonblock-statement-body-position": ["off"],
-  "object-curly-newline": ["off"],
-  "object-curly-spacing": ["off"],
-  "object-property-newline": ["off"],
-  "one-var-declaration-per-line": ["off"],
-  "operator-linebreak": ["off"],
-  "padded-blocks": ["off"],
-  "prefer-arrow-callback": ["off"],
-  "prefer-const": ["error"],
-  "prettier/prettier": ["error"],
-  "quote-props": ["off"],
+  "no-useless-backreference": [2],
+  "no-useless-catch": [2],
+  "no-useless-escape": [2],
+  "no-whitespace-before-property": [0],
+  "no-with": [2],
+  "no-wrap-func": [0],
+  "nonblock-statement-body-position": [0],
+  "object-curly-newline": [0],
+  "object-curly-spacing": [0],
+  "object-property-newline": [0],
+  "one-var-declaration-per-line": [0],
+  "operator-linebreak": [0],
+  "padded-blocks": [0],
+  "prefer-arrow-callback": [0],
+  "prefer-const": [2],
+  "prettier/prettier": [2],
+  "quote-props": [0],
   "quotes": [0],
-  "react/jsx-child-element-spacing": ["off"],
-  "react/jsx-closing-bracket-location": ["off"],
-  "react/jsx-closing-tag-location": ["off"],
-  "react/jsx-curly-newline": ["off"],
-  "react/jsx-curly-spacing": ["off"],
-  "react/jsx-equals-spacing": ["off"],
-  "react/jsx-first-prop-new-line": ["off"],
-  "react/jsx-indent": ["off"],
-  "react/jsx-indent-props": ["off"],
-  "react/jsx-max-props-per-line": ["off"],
-  "react/jsx-newline": ["off"],
-  "react/jsx-one-expression-per-line": ["off"],
-  "react/jsx-props-no-multi-spaces": ["off"],
-  "react/jsx-space-before-closing": ["off"],
-  "react/jsx-tag-spacing": ["off"],
-  "react/jsx-wrap-multilines": ["off"],
-  "require-yield": ["error"],
-  "rest-spread-spacing": ["off"],
-  "semi": ["off"],
-  "semi-spacing": ["off"],
-  "semi-style": ["off"],
-  "space-after-function-name": ["off"],
-  "space-after-keywords": ["off"],
-  "space-before-blocks": ["off"],
-  "space-before-function-paren": ["off"],
-  "space-before-function-parentheses": ["off"],
-  "space-before-keywords": ["off"],
-  "space-in-brackets": ["off"],
-  "space-in-parens": ["off"],
-  "space-infix-ops": ["off"],
-  "space-return-throw-case": ["off"],
-  "space-unary-ops": ["off"],
-  "space-unary-word-ops": ["off"],
-  "standard/array-bracket-even-spacing": ["off"],
-  "standard/computed-property-even-spacing": ["off"],
-  "standard/object-curly-even-spacing": ["off"],
-  "switch-colon-spacing": ["off"],
-  "template-curly-spacing": ["off"],
-  "template-tag-spacing": ["off"],
-  "unicorn/empty-brace-spaces": ["off"],
-  "unicorn/no-nested-ternary": ["off"],
-  "unicorn/number-literal-case": ["off"],
+  "react/jsx-child-element-spacing": [0],
+  "react/jsx-closing-bracket-location": [0],
+  "react/jsx-closing-tag-location": [0],
+  "react/jsx-curly-newline": [0],
+  "react/jsx-curly-spacing": [0],
+  "react/jsx-equals-spacing": [0],
+  "react/jsx-first-prop-new-line": [0],
+  "react/jsx-indent": [0],
+  "react/jsx-indent-props": [0],
+  "react/jsx-max-props-per-line": [0],
+  "react/jsx-newline": [0],
+  "react/jsx-one-expression-per-line": [0],
+  "react/jsx-props-no-multi-spaces": [0],
+  "react/jsx-space-before-closing": [0],
+  "react/jsx-tag-spacing": [0],
+  "react/jsx-wrap-multilines": [0],
+  "require-yield": [2],
+  "rest-spread-spacing": [0],
+  "semi": [0],
+  "semi-spacing": [0],
+  "semi-style": [0],
+  "space-after-function-name": [0],
+  "space-after-keywords": [0],
+  "space-before-blocks": [0],
+  "space-before-function-paren": [0],
+  "space-before-function-parentheses": [0],
+  "space-before-keywords": [0],
+  "space-in-brackets": [0],
+  "space-in-parens": [0],
+  "space-infix-ops": [0],
+  "space-return-throw-case": [0],
+  "space-unary-ops": [0],
+  "space-unary-word-ops": [0],
+  "standard/array-bracket-even-spacing": [0],
+  "standard/computed-property-even-spacing": [0],
+  "standard/object-curly-even-spacing": [0],
+  "switch-colon-spacing": [0],
+  "template-curly-spacing": [0],
+  "template-tag-spacing": [0],
+  "unicorn/empty-brace-spaces": [0],
+  "unicorn/no-nested-ternary": [0],
+  "unicorn/number-literal-case": [0],
   "unicorn/template-indent": [0],
-  "use-isnan": ["error"],
-  "valid-typeof": ["error"],
-  "vue-scoped-css/enforce-style-type": ["warn"],
-  "vue-scoped-css/no-deprecated-deep-combinator": ["warn"],
-  "vue-scoped-css/no-parent-of-v-global": ["warn"],
-  "vue-scoped-css/no-parsing-error": ["warn"],
-  "vue-scoped-css/no-unused-keyframes": ["warn"],
-  "vue-scoped-css/no-unused-selector": ["warn"],
-  "vue-scoped-css/require-v-deep-argument": ["warn"],
-  "vue-scoped-css/require-v-global-argument": ["warn"],
-  "vue-scoped-css/require-v-slotted-argument": ["warn"],
-  "vue/array-bracket-newline": ["off"],
-  "vue/array-bracket-spacing": ["off"],
-  "vue/array-element-newline": ["off"],
-  "vue/arrow-spacing": ["off"],
-  "vue/attribute-hyphenation": ["warn"],
-  "vue/attributes-order": ["warn"],
-  "vue/block-spacing": ["off"],
-  "vue/block-tag-newline": ["off"],
-  "vue/brace-style": ["off"],
-  "vue/comma-dangle": ["off"],
-  "vue/comma-spacing": ["off"],
-  "vue/comma-style": ["off"],
-  "vue/comment-directive": ["error"],
-  "vue/component-definition-name-casing": ["warn"],
+  "use-isnan": [2],
+  "valid-typeof": [2],
+  "vue-scoped-css/enforce-style-type": [1],
+  "vue-scoped-css/no-deprecated-deep-combinator": [1],
+  "vue-scoped-css/no-parent-of-v-global": [1],
+  "vue-scoped-css/no-parsing-error": [1],
+  "vue-scoped-css/no-unused-keyframes": [1],
+  "vue-scoped-css/no-unused-selector": [1],
+  "vue-scoped-css/require-v-deep-argument": [1],
+  "vue-scoped-css/require-v-global-argument": [1],
+  "vue-scoped-css/require-v-slotted-argument": [1],
+  "vue/array-bracket-newline": [0],
+  "vue/array-bracket-spacing": [0],
+  "vue/array-element-newline": [0],
+  "vue/arrow-spacing": [0],
+  "vue/attribute-hyphenation": [1],
+  "vue/attributes-order": [1],
+  "vue/block-spacing": [0],
+  "vue/block-tag-newline": [0],
+  "vue/brace-style": [0],
+  "vue/comma-dangle": [0],
+  "vue/comma-spacing": [0],
+  "vue/comma-style": [0],
+  "vue/comment-directive": [2],
+  "vue/component-definition-name-casing": [1],
   "vue/component-tags-order": [
-    "error",
+    2,
     {
       "order": ["template", "script", "style"]
     }
   ],
-  "vue/dot-location": ["off"],
-  "vue/first-attribute-linebreak": ["warn"],
-  "vue/func-call-spacing": ["off"],
-  "vue/html-closing-bracket-newline": ["off"],
-  "vue/html-closing-bracket-spacing": ["off"],
-  "vue/html-end-tags": ["off"],
-  "vue/html-indent": ["off"],
-  "vue/html-quotes": ["off"],
+  "vue/dot-location": [0],
+  "vue/first-attribute-linebreak": [1],
+  "vue/func-call-spacing": [0],
+  "vue/html-closing-bracket-newline": [0],
+  "vue/html-closing-bracket-spacing": [0],
+  "vue/html-end-tags": [0],
+  "vue/html-indent": [0],
+  "vue/html-quotes": [0],
   "vue/html-self-closing": [0],
-  "vue/jsx-uses-vars": ["error"],
-  "vue/key-spacing": ["off"],
-  "vue/keyword-spacing": ["off"],
-  "vue/max-attributes-per-line": ["off"],
+  "vue/jsx-uses-vars": [2],
+  "vue/key-spacing": [0],
+  "vue/keyword-spacing": [0],
+  "vue/max-attributes-per-line": [0],
   "vue/max-len": [0],
-  "vue/multi-word-component-names": ["off"],
-  "vue/multiline-html-element-content-newline": ["off"],
-  "vue/multiline-ternary": ["off"],
-  "vue/mustache-interpolation-spacing": ["off"],
-  "vue/no-arrow-functions-in-watch": ["error"],
-  "vue/no-async-in-computed-properties": ["error"],
-  "vue/no-child-content": ["error"],
-  "vue/no-computed-properties-in-data": ["error"],
-  "vue/no-custom-modifiers-on-v-model": ["error"],
-  "vue/no-deprecated-data-object-declaration": ["error"],
-  "vue/no-deprecated-destroyed-lifecycle": ["off"],
-  "vue/no-deprecated-dollar-listeners-api": ["off"],
-  "vue/no-deprecated-dollar-scopedslots-api": ["off"],
-  "vue/no-deprecated-events-api": ["error"],
-  "vue/no-deprecated-filter": ["warn"],
-  "vue/no-deprecated-functional-template": ["error"],
-  "vue/no-deprecated-html-element-is": ["error"],
-  "vue/no-deprecated-inline-template": ["error"],
-  "vue/no-deprecated-props-default-this": ["off"],
-  "vue/no-deprecated-router-link-tag-prop": ["error"],
-  "vue/no-deprecated-scope-attribute": ["error"],
-  "vue/no-deprecated-slot-attribute": ["off"],
-  "vue/no-deprecated-slot-scope-attribute": ["off"],
-  "vue/no-deprecated-v-bind-sync": ["off"],
-  "vue/no-deprecated-v-is": ["error"],
-  "vue/no-deprecated-v-on-native-modifier": ["warn"],
-  "vue/no-deprecated-v-on-number-modifiers": ["error"],
-  "vue/no-deprecated-vue-config-keycodes": ["error"],
-  "vue/no-dupe-keys": ["error"],
-  "vue/no-dupe-v-else-if": ["error"],
-  "vue/no-duplicate-attributes": ["error"],
-  "vue/no-export-in-script-setup": ["error"],
-  "vue/no-expose-after-await": ["error"],
-  "vue/no-extra-parens": ["off"],
-  "vue/no-lifecycle-after-await": ["error"],
-  "vue/no-lone-template": ["warn"],
-  "vue/no-multi-spaces": ["off"],
-  "vue/no-multiple-slot-args": ["warn"],
-  "vue/no-multiple-template-root": ["error"],
+  "vue/multi-word-component-names": [0],
+  "vue/multiline-html-element-content-newline": [0],
+  "vue/multiline-ternary": [0],
+  "vue/mustache-interpolation-spacing": [0],
+  "vue/no-arrow-functions-in-watch": [2],
+  "vue/no-async-in-computed-properties": [2],
+  "vue/no-child-content": [2],
+  "vue/no-computed-properties-in-data": [2],
+  "vue/no-custom-modifiers-on-v-model": [2],
+  "vue/no-deprecated-data-object-declaration": [2],
+  "vue/no-deprecated-destroyed-lifecycle": [0],
+  "vue/no-deprecated-dollar-listeners-api": [0],
+  "vue/no-deprecated-dollar-scopedslots-api": [0],
+  "vue/no-deprecated-events-api": [2],
+  "vue/no-deprecated-filter": [1],
+  "vue/no-deprecated-functional-template": [2],
+  "vue/no-deprecated-html-element-is": [2],
+  "vue/no-deprecated-inline-template": [2],
+  "vue/no-deprecated-props-default-this": [0],
+  "vue/no-deprecated-router-link-tag-prop": [2],
+  "vue/no-deprecated-scope-attribute": [2],
+  "vue/no-deprecated-slot-attribute": [0],
+  "vue/no-deprecated-slot-scope-attribute": [0],
+  "vue/no-deprecated-v-bind-sync": [0],
+  "vue/no-deprecated-v-is": [2],
+  "vue/no-deprecated-v-on-native-modifier": [1],
+  "vue/no-deprecated-v-on-number-modifiers": [2],
+  "vue/no-deprecated-vue-config-keycodes": [2],
+  "vue/no-dupe-keys": [2],
+  "vue/no-dupe-v-else-if": [2],
+  "vue/no-duplicate-attributes": [2],
+  "vue/no-export-in-script-setup": [2],
+  "vue/no-expose-after-await": [2],
+  "vue/no-extra-parens": [0],
+  "vue/no-lifecycle-after-await": [2],
+  "vue/no-lone-template": [1],
+  "vue/no-multi-spaces": [0],
+  "vue/no-multiple-slot-args": [1],
+  "vue/no-multiple-template-root": [2],
   "vue/no-mutating-props": [
-    "error",
+    2,
     {
       "shallowOnly": true
     }
   ],
-  "vue/no-parsing-error": ["error"],
-  "vue/no-ref-as-operand": ["error"],
-  "vue/no-reserved-component-names": ["error"],
-  "vue/no-reserved-keys": ["error"],
+  "vue/no-parsing-error": [2],
+  "vue/no-ref-as-operand": [2],
+  "vue/no-reserved-component-names": [2],
+  "vue/no-reserved-keys": [2],
   "vue/no-reserved-props": [
-    "error",
+    2,
     {
       "vueVersion": 2
     }
   ],
-  "vue/no-shared-component-data": ["error"],
-  "vue/no-side-effects-in-computed-properties": ["error"],
-  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
-  "vue/no-template-key": ["error"],
-  "vue/no-template-shadow": ["warn"],
-  "vue/no-textarea-mustache": ["error"],
-  "vue/no-unused-components": ["error"],
-  "vue/no-unused-vars": ["error"],
-  "vue/no-use-computed-property-like-method": ["error"],
-  "vue/no-use-v-if-with-v-for": ["error"],
-  "vue/no-useless-template-attributes": ["error"],
-  "vue/no-v-for-template-key": ["error"],
-  "vue/no-v-for-template-key-on-child": ["off"],
-  "vue/no-v-html": ["warn"],
-  "vue/no-v-model-argument": ["warn"],
-  "vue/no-v-text-v-html-on-component": ["error"],
-  "vue/no-watch-after-await": ["error"],
-  "vue/object-curly-newline": ["off"],
-  "vue/object-curly-spacing": ["off"],
-  "vue/object-property-newline": ["off"],
-  "vue/one-component-per-file": ["warn"],
-  "vue/operator-linebreak": ["off"],
-  "vue/order-in-components": ["warn"],
-  "vue/prefer-import-from-vue": ["error"],
-  "vue/prop-name-casing": ["warn"],
-  "vue/quote-props": ["off"],
-  "vue/require-component-is": ["error"],
-  "vue/require-default-prop": ["warn"],
-  "vue/require-explicit-emits": ["off"],
-  "vue/require-prop-type-constructor": ["error"],
-  "vue/require-prop-types": ["warn"],
-  "vue/require-render-return": ["error"],
-  "vue/require-slots-as-functions": ["error"],
-  "vue/require-toggle-inside-transition": ["error"],
-  "vue/require-v-for-key": ["error"],
-  "vue/require-valid-default-prop": ["error"],
-  "vue/return-in-computed-property": ["error"],
-  "vue/return-in-emits-validator": ["error"],
-  "vue/script-indent": ["off"],
-  "vue/singleline-html-element-content-newline": ["off"],
-  "vue/space-in-parens": ["off"],
-  "vue/space-infix-ops": ["off"],
-  "vue/space-unary-ops": ["off"],
-  "vue/template-curly-spacing": ["off"],
-  "vue/this-in-template": ["warn"],
-  "vue/use-v-on-exact": ["error"],
-  "vue/v-bind-style": ["warn"],
+  "vue/no-shared-component-data": [2],
+  "vue/no-side-effects-in-computed-properties": [2],
+  "vue/no-spaces-around-equal-signs-in-attribute": [0],
+  "vue/no-template-key": [2],
+  "vue/no-template-shadow": [1],
+  "vue/no-textarea-mustache": [2],
+  "vue/no-unused-components": [2],
+  "vue/no-unused-vars": [2],
+  "vue/no-use-computed-property-like-method": [2],
+  "vue/no-use-v-if-with-v-for": [2],
+  "vue/no-useless-template-attributes": [2],
+  "vue/no-v-for-template-key": [2],
+  "vue/no-v-for-template-key-on-child": [0],
+  "vue/no-v-html": [1],
+  "vue/no-v-model-argument": [1],
+  "vue/no-v-text-v-html-on-component": [2],
+  "vue/no-watch-after-await": [2],
+  "vue/object-curly-newline": [0],
+  "vue/object-curly-spacing": [0],
+  "vue/object-property-newline": [0],
+  "vue/one-component-per-file": [1],
+  "vue/operator-linebreak": [0],
+  "vue/order-in-components": [1],
+  "vue/prefer-import-from-vue": [2],
+  "vue/prop-name-casing": [1],
+  "vue/quote-props": [0],
+  "vue/require-component-is": [2],
+  "vue/require-default-prop": [1],
+  "vue/require-explicit-emits": [0],
+  "vue/require-prop-type-constructor": [2],
+  "vue/require-prop-types": [1],
+  "vue/require-render-return": [2],
+  "vue/require-slots-as-functions": [2],
+  "vue/require-toggle-inside-transition": [2],
+  "vue/require-v-for-key": [2],
+  "vue/require-valid-default-prop": [2],
+  "vue/return-in-computed-property": [2],
+  "vue/return-in-emits-validator": [2],
+  "vue/script-indent": [0],
+  "vue/singleline-html-element-content-newline": [0],
+  "vue/space-in-parens": [0],
+  "vue/space-infix-ops": [0],
+  "vue/space-unary-ops": [0],
+  "vue/template-curly-spacing": [0],
+  "vue/this-in-template": [1],
+  "vue/use-v-on-exact": [2],
+  "vue/v-bind-style": [1],
   "vue/v-on-event-hyphenation": [
-    "warn",
+    1,
     "always",
     {
       "autofix": true
     }
   ],
-  "vue/v-on-style": ["warn"],
-  "vue/v-slot-style": ["warn"],
-  "vue/valid-attribute-name": ["error"],
-  "vue/valid-define-emits": ["error"],
-  "vue/valid-define-props": ["error"],
-  "vue/valid-model-definition": ["error"],
-  "vue/valid-next-tick": ["error"],
-  "vue/valid-template-root": ["error"],
-  "vue/valid-v-bind": ["error"],
-  "vue/valid-v-bind-sync": ["error"],
-  "vue/valid-v-cloak": ["error"],
-  "vue/valid-v-else": ["error"],
-  "vue/valid-v-else-if": ["error"],
-  "vue/valid-v-for": ["error"],
-  "vue/valid-v-html": ["error"],
-  "vue/valid-v-if": ["error"],
-  "vue/valid-v-is": ["error"],
-  "vue/valid-v-memo": ["error"],
-  "vue/valid-v-model": ["error"],
-  "vue/valid-v-on": ["error"],
-  "vue/valid-v-once": ["error"],
-  "vue/valid-v-pre": ["error"],
-  "vue/valid-v-show": ["error"],
-  "vue/valid-v-slot": ["error"],
-  "vue/valid-v-text": ["error"],
-  "wrap-iife": ["off"],
-  "wrap-regex": ["off"],
-  "yield-star-spacing": ["off"]
+  "vue/v-on-style": [1],
+  "vue/v-slot-style": [1],
+  "vue/valid-attribute-name": [2],
+  "vue/valid-define-emits": [2],
+  "vue/valid-define-props": [2],
+  "vue/valid-model-definition": [2],
+  "vue/valid-next-tick": [2],
+  "vue/valid-template-root": [2],
+  "vue/valid-v-bind": [2],
+  "vue/valid-v-bind-sync": [2],
+  "vue/valid-v-cloak": [2],
+  "vue/valid-v-else": [2],
+  "vue/valid-v-else-if": [2],
+  "vue/valid-v-for": [2],
+  "vue/valid-v-html": [2],
+  "vue/valid-v-if": [2],
+  "vue/valid-v-is": [2],
+  "vue/valid-v-memo": [2],
+  "vue/valid-v-model": [2],
+  "vue/valid-v-on": [2],
+  "vue/valid-v-once": [2],
+  "vue/valid-v-pre": [2],
+  "vue/valid-v-show": [2],
+  "vue/valid-v-slot": [2],
+  "vue/valid-v-text": [2],
+  "wrap-iife": [0],
+  "wrap-regex": [0],
+  "yield-star-spacing": [0]
 }
diff --git a/frontend/eslint.config.mjs b/frontend/eslint.config.mjs
new file mode 100644
index 0000000000..cd3bfc8a0f
--- /dev/null
+++ b/frontend/eslint.config.mjs
@@ -0,0 +1,98 @@
+import { includeIgnoreFile } from '@eslint/compat'
+import localRules from 'eslint-plugin-local-rules'
+import globals from 'globals'
+import path from 'node:path'
+import { fileURLToPath } from 'node:url'
+import js from '@eslint/js'
+import { FlatCompat } from '@eslint/eslintrc'
+
+const __filename = fileURLToPath(import.meta.url)
+const __dirname = path.dirname(__filename)
+const compat = new FlatCompat({
+  baseDirectory: __dirname,
+  recommendedConfig: js.configs.recommended,
+  allConfig: js.configs.all,
+})
+const gitignorePath = path.resolve(__dirname, '.gitignore')
+export default [
+  ...compat.extends(
+    'plugin:vue/recommended',
+    'plugin:vue/vue3-recommended',
+    'plugin:vue-scoped-css/vue3-recommended',
+    'eslint:recommended',
+    'plugin:prettier/recommended',
+    '@vue/eslint-config-prettier'
+  ),
+  {
+    ignores: ['data/', 'dist/', 'public/twemoji/'],
+  },
+
+  includeIgnoreFile(gitignorePath),
+
+  {
+    plugins: {
+      'local-rules': localRules,
+    },
+
+    languageOptions: {
+      globals: {
+        ...globals.node,
+        ...globals.jest,
+      },
+
+      parserOptions: {
+        ecmaVersion: '6',
+        parser: '@babel/eslint-parser',
+      },
+    },
+
+    rules: {
+      'prefer-const': 'error',
+      'prettier/prettier': 'error',
+
+      'vue/component-tags-order': [
+        'error',
+        {
+          order: ['template', 'script', 'style'],
+        },
+      ],
+
+      'vue/multi-word-component-names': 'off',
+      'vue/no-deprecated-destroyed-lifecycle': 'off',
+      'vue/no-deprecated-dollar-listeners-api': 'off',
+      'vue/no-deprecated-dollar-scopedslots-api': 'off',
+      'vue/no-deprecated-filter': 'warn',
+      'vue/no-deprecated-props-default-this': 'off',
+      'vue/no-deprecated-slot-attribute': 'off',
+      'vue/no-deprecated-slot-scope-attribute': 'off',
+      'vue/no-deprecated-v-bind-sync': 'off',
+      'vue/no-deprecated-v-on-native-modifier': 'warn',
+      'vue/no-v-for-template-key-on-child': 'off',
+      'vue/no-v-model-argument': 'warn',
+      'vue/require-explicit-emits': 'off',
+
+      'no-unused-vars': [
+        'error',
+        {
+          argsIgnorePattern: '^_$',
+        },
+      ],
+
+      'local-rules/matching-translation-keys': [
+        'error',
+        {
+          ignoreKeysRegex:
+            '^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+',
+          translationKeyPropRegex: '[a-zA-Z0-9]-i18n-key$',
+        },
+      ],
+
+      'vue/no-mutating-props': [
+        'error',
+        {
+          shallowOnly: true,
+        },
+      ],
+    },
+  },
+]
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 0ecf9c449a..2bb758ba9d 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -72,6 +72,9 @@
       },
       "devDependencies": {
         "@babel/eslint-parser": "7.25.1",
+        "@eslint/compat": "1.1.1",
+        "@eslint/eslintrc": "3.1.0",
+        "@eslint/js": "9.9.0",
         "@sentry/vite-plugin": "2.22.2",
         "@testing-library/jest-dom": "6.4.8",
         "@testing-library/user-event": "14.5.2",
@@ -93,6 +96,7 @@
         "eslint-plugin-vue": "9.27.0",
         "eslint-plugin-vue-scoped-css": "2.8.1",
         "flush-promises": "1.0.2",
+        "globals": "15.9.0",
         "jest-serializer-vue-tjw": "3.20.0",
         "jsdom": "24.1.1",
         "lint-staged": "15.2.9",
@@ -1110,6 +1114,16 @@
         "@babel/core": "^7.0.0-0"
       }
     },
+    "node_modules/@babel/plugin-transform-classes/node_modules/globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/@babel/plugin-transform-computed-properties": {
       "version": "7.24.7",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz",
@@ -1990,6 +2004,16 @@
         "node": ">=6.9.0"
       }
     },
+    "node_modules/@babel/traverse/node_modules/globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/@babel/types": {
       "version": "7.25.2",
       "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
@@ -2441,17 +2465,27 @@
         "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
+    "node_modules/@eslint/compat": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.1.1.tgz",
+      "integrity": "sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
     "node_modules/@eslint/eslintrc": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
-      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+      "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "ajv": "^6.12.4",
         "debug": "^4.3.2",
-        "espree": "^9.6.0",
-        "globals": "^13.19.0",
+        "espree": "^10.0.1",
+        "globals": "^14.0.0",
         "ignore": "^5.2.0",
         "import-fresh": "^3.2.1",
         "js-yaml": "^4.1.0",
@@ -2459,36 +2493,64 @@
         "strip-json-comments": "^3.1.1"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/globals": {
-      "version": "13.24.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+    "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+      "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
       "dev": true,
-      "license": "MIT",
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/espree": {
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+      "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
+      "dev": true,
+      "license": "BSD-2-Clause",
       "dependencies": {
-        "type-fest": "^0.20.2"
+        "acorn": "^8.12.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^4.0.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/globals": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/@eslint/js": {
-      "version": "8.57.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
-      "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+      "version": "9.9.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.0.tgz",
+      "integrity": "sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
     "node_modules/@humanwhocodes/config-array": {
@@ -7039,19 +7101,6 @@
         "balanced-match": "^1.0.0"
       }
     },
-    "node_modules/eslint-plugin-n/node_modules/globals": {
-      "version": "15.9.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
-      "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/eslint-plugin-n/node_modules/minimatch": {
       "version": "9.0.5",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
@@ -7231,6 +7280,40 @@
         "node": ">=10"
       }
     },
+    "node_modules/eslint/node_modules/@eslint/eslintrc": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.6.0",
+        "globals": "^13.19.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint/node_modules/@eslint/js": {
+      "version": "8.57.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+      "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
     "node_modules/eslint/node_modules/ansi-styles": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -7984,13 +8067,16 @@
       }
     },
     "node_modules/globals": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+      "version": "15.9.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
+      "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=4"
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/globalthis": {
diff --git a/frontend/package.json b/frontend/package.json
index 50bab34ec2..b70313e729 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -6,10 +6,10 @@
     "preview": "vite preview --host 0.0.0.0 --port 3000",
     "build": "vite build",
     "lint": "npm run lint:eslint && npm run lint:prettier",
-    "lint:eslint": "eslint . --ext .vue,.js --fix --ignore-path .gitignore",
+    "lint:eslint": "eslint --fix .",
     "lint:prettier": "prettier --write --ignore-path .prettierignore **/*.{css,scss,json,md}",
     "lint:check": "npm run lint:check:eslint && npm run lint:check:prettier",
-    "lint:check:eslint": "eslint . --ext .vue,.js --no-fix --ignore-path .gitignore",
+    "lint:check:eslint": "eslint .",
     "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json,md}",
     "start": "vite --host 0.0.0.0",
     "dev": "vite --host 0.0.0.0",
@@ -84,6 +84,9 @@
   },
   "devDependencies": {
     "@babel/eslint-parser": "7.25.1",
+    "@eslint/compat": "1.1.1",
+    "@eslint/eslintrc": "3.1.0",
+    "@eslint/js": "9.9.0",
     "@sentry/vite-plugin": "2.22.2",
     "@testing-library/jest-dom": "6.4.8",
     "@testing-library/user-event": "14.5.2",
@@ -105,6 +108,7 @@
     "eslint-plugin-vue": "9.27.0",
     "eslint-plugin-vue-scoped-css": "2.8.1",
     "flush-promises": "1.0.2",
+    "globals": "15.9.0",
     "jest-serializer-vue-tjw": "3.20.0",
     "jsdom": "24.1.1",
     "lint-staged": "15.2.9",

From 685f71183d66f22220d8ca8f4811c5833a017bfc Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Tue, 13 Aug 2024 23:50:34 +0200
Subject: [PATCH 077/273] frontend: delete eslint-config-(js,vue).json again

Was only needed for the migration
---
 frontend/eslint-config-js.json  | 394 --------------------------------
 frontend/eslint-config-vue.json | 394 --------------------------------
 2 files changed, 788 deletions(-)
 delete mode 100644 frontend/eslint-config-js.json
 delete mode 100644 frontend/eslint-config-vue.json

diff --git a/frontend/eslint-config-js.json b/frontend/eslint-config-js.json
deleted file mode 100644
index 1bbc3a2a82..0000000000
--- a/frontend/eslint-config-js.json
+++ /dev/null
@@ -1,394 +0,0 @@
-{
-  "@babel/object-curly-spacing": [0],
-  "@babel/semi": [0],
-  "@typescript-eslint/block-spacing": [0],
-  "@typescript-eslint/brace-style": [0],
-  "@typescript-eslint/comma-dangle": [0],
-  "@typescript-eslint/comma-spacing": [0],
-  "@typescript-eslint/func-call-spacing": [0],
-  "@typescript-eslint/indent": [0],
-  "@typescript-eslint/key-spacing": [0],
-  "@typescript-eslint/keyword-spacing": [0],
-  "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": [0],
-  "@typescript-eslint/no-extra-parens": [0],
-  "@typescript-eslint/no-extra-semi": [0],
-  "@typescript-eslint/object-curly-spacing": [0],
-  "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": [0],
-  "@typescript-eslint/space-before-blocks": [0],
-  "@typescript-eslint/space-before-function-paren": [0],
-  "@typescript-eslint/space-infix-ops": [0],
-  "@typescript-eslint/type-annotation-spacing": [0],
-  "array-bracket-newline": [0],
-  "array-bracket-spacing": [0],
-  "array-element-newline": [0],
-  "arrow-body-style": [0],
-  "arrow-parens": [0],
-  "arrow-spacing": [0],
-  "babel/object-curly-spacing": [0],
-  "babel/quotes": [0],
-  "babel/semi": [0],
-  "block-spacing": [0],
-  "brace-style": [0],
-  "comma-dangle": [0],
-  "comma-spacing": [0],
-  "comma-style": [0],
-  "computed-property-spacing": [0],
-  "constructor-super": [2],
-  "curly": [0],
-  "dot-location": [0],
-  "eol-last": [0],
-  "flowtype/boolean-style": [0],
-  "flowtype/delimiter-dangle": [0],
-  "flowtype/generic-spacing": [0],
-  "flowtype/object-type-curly-spacing": [0],
-  "flowtype/object-type-delimiter": [0],
-  "flowtype/quotes": [0],
-  "flowtype/semi": [0],
-  "flowtype/space-after-type-colon": [0],
-  "flowtype/space-before-generic-bracket": [0],
-  "flowtype/space-before-type-colon": [0],
-  "flowtype/union-intersection-spacing": [0],
-  "for-direction": [2],
-  "func-call-spacing": [0],
-  "function-call-argument-newline": [0],
-  "function-paren-newline": [0],
-  "generator-star": [0],
-  "generator-star-spacing": [0],
-  "getter-return": [2],
-  "implicit-arrow-linebreak": [0],
-  "indent": [0],
-  "indent-legacy": [0],
-  "jsx-quotes": [0],
-  "key-spacing": [0],
-  "keyword-spacing": [0],
-  "linebreak-style": [0],
-  "lines-around-comment": [0],
-  "local-rules/matching-translation-keys": [
-    2,
-    {
-      "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
-      "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
-    }
-  ],
-  "max-len": [0],
-  "max-statements-per-line": [0],
-  "multiline-ternary": [0],
-  "new-parens": [0],
-  "newline-per-chained-call": [0],
-  "no-arrow-condition": [0],
-  "no-async-promise-executor": [2],
-  "no-case-declarations": [2],
-  "no-class-assign": [2],
-  "no-comma-dangle": [0],
-  "no-compare-neg-zero": [2],
-  "no-cond-assign": [2],
-  "no-confusing-arrow": [0],
-  "no-const-assign": [2],
-  "no-constant-binary-expression": [2],
-  "no-constant-condition": [2],
-  "no-control-regex": [2],
-  "no-debugger": [2],
-  "no-delete-var": [2],
-  "no-dupe-args": [2],
-  "no-dupe-class-members": [2],
-  "no-dupe-else-if": [2],
-  "no-dupe-keys": [2],
-  "no-duplicate-case": [2],
-  "no-empty": [2],
-  "no-empty-character-class": [2],
-  "no-empty-pattern": [2],
-  "no-empty-static-block": [2],
-  "no-ex-assign": [2],
-  "no-extra-boolean-cast": [2],
-  "no-extra-parens": [0],
-  "no-extra-semi": [0],
-  "no-fallthrough": [2],
-  "no-floating-decimal": [0],
-  "no-func-assign": [2],
-  "no-global-assign": [2],
-  "no-import-assign": [2],
-  "no-invalid-regexp": [2],
-  "no-irregular-whitespace": [2],
-  "no-loss-of-precision": [2],
-  "no-misleading-character-class": [2],
-  "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": [0],
-  "no-multi-spaces": [0],
-  "no-multiple-empty-lines": [0],
-  "no-new-native-nonconstructor": [2],
-  "no-nonoctal-decimal-escape": [2],
-  "no-obj-calls": [2],
-  "no-octal": [2],
-  "no-prototype-builtins": [2],
-  "no-redeclare": [2],
-  "no-regex-spaces": [2],
-  "no-reserved-keys": [0],
-  "no-self-assign": [2],
-  "no-setter-return": [2],
-  "no-shadow-restricted-names": [2],
-  "no-space-before-semi": [0],
-  "no-spaced-func": [0],
-  "no-sparse-arrays": [2],
-  "no-tabs": [0],
-  "no-this-before-super": [2],
-  "no-trailing-spaces": [0],
-  "no-undef": [2],
-  "no-unexpected-multiline": [0],
-  "no-unreachable": [2],
-  "no-unsafe-finally": [2],
-  "no-unsafe-negation": [2],
-  "no-unsafe-optional-chaining": [2],
-  "no-unused-labels": [2],
-  "no-unused-private-class-members": [2],
-  "no-unused-vars": [
-    2,
-    {
-      "argsIgnorePattern": "^_$"
-    }
-  ],
-  "no-useless-backreference": [2],
-  "no-useless-catch": [2],
-  "no-useless-escape": [2],
-  "no-whitespace-before-property": [0],
-  "no-with": [2],
-  "no-wrap-func": [0],
-  "nonblock-statement-body-position": [0],
-  "object-curly-newline": [0],
-  "object-curly-spacing": [0],
-  "object-property-newline": [0],
-  "one-var-declaration-per-line": [0],
-  "operator-linebreak": [0],
-  "padded-blocks": [0],
-  "prefer-arrow-callback": [0],
-  "prefer-const": [2],
-  "prettier/prettier": [2],
-  "quote-props": [0],
-  "quotes": [0],
-  "react/jsx-child-element-spacing": [0],
-  "react/jsx-closing-bracket-location": [0],
-  "react/jsx-closing-tag-location": [0],
-  "react/jsx-curly-newline": [0],
-  "react/jsx-curly-spacing": [0],
-  "react/jsx-equals-spacing": [0],
-  "react/jsx-first-prop-new-line": [0],
-  "react/jsx-indent": [0],
-  "react/jsx-indent-props": [0],
-  "react/jsx-max-props-per-line": [0],
-  "react/jsx-newline": [0],
-  "react/jsx-one-expression-per-line": [0],
-  "react/jsx-props-no-multi-spaces": [0],
-  "react/jsx-space-before-closing": [0],
-  "react/jsx-tag-spacing": [0],
-  "react/jsx-wrap-multilines": [0],
-  "require-yield": [2],
-  "rest-spread-spacing": [0],
-  "semi": [0],
-  "semi-spacing": [0],
-  "semi-style": [0],
-  "space-after-function-name": [0],
-  "space-after-keywords": [0],
-  "space-before-blocks": [0],
-  "space-before-function-paren": [0],
-  "space-before-function-parentheses": [0],
-  "space-before-keywords": [0],
-  "space-in-brackets": [0],
-  "space-in-parens": [0],
-  "space-infix-ops": [0],
-  "space-return-throw-case": [0],
-  "space-unary-ops": [0],
-  "space-unary-word-ops": [0],
-  "standard/array-bracket-even-spacing": [0],
-  "standard/computed-property-even-spacing": [0],
-  "standard/object-curly-even-spacing": [0],
-  "switch-colon-spacing": [0],
-  "template-curly-spacing": [0],
-  "template-tag-spacing": [0],
-  "unicorn/empty-brace-spaces": [0],
-  "unicorn/no-nested-ternary": [0],
-  "unicorn/number-literal-case": [0],
-  "unicorn/template-indent": [0],
-  "use-isnan": [2],
-  "valid-typeof": [2],
-  "vue-scoped-css/enforce-style-type": [1],
-  "vue-scoped-css/no-deprecated-deep-combinator": [1],
-  "vue-scoped-css/no-parent-of-v-global": [1],
-  "vue-scoped-css/no-parsing-error": [1],
-  "vue-scoped-css/no-unused-keyframes": [1],
-  "vue-scoped-css/no-unused-selector": [1],
-  "vue-scoped-css/require-v-deep-argument": [1],
-  "vue-scoped-css/require-v-global-argument": [1],
-  "vue-scoped-css/require-v-slotted-argument": [1],
-  "vue/array-bracket-newline": [0],
-  "vue/array-bracket-spacing": [0],
-  "vue/array-element-newline": [0],
-  "vue/arrow-spacing": [0],
-  "vue/attribute-hyphenation": [1],
-  "vue/attributes-order": [1],
-  "vue/block-spacing": [0],
-  "vue/block-tag-newline": [0],
-  "vue/brace-style": [0],
-  "vue/comma-dangle": [0],
-  "vue/comma-spacing": [0],
-  "vue/comma-style": [0],
-  "vue/comment-directive": [2],
-  "vue/component-definition-name-casing": [1],
-  "vue/component-tags-order": [
-    2,
-    {
-      "order": ["template", "script", "style"]
-    }
-  ],
-  "vue/dot-location": [0],
-  "vue/first-attribute-linebreak": [1],
-  "vue/func-call-spacing": [0],
-  "vue/html-closing-bracket-newline": [0],
-  "vue/html-closing-bracket-spacing": [0],
-  "vue/html-end-tags": [0],
-  "vue/html-indent": [0],
-  "vue/html-quotes": [0],
-  "vue/html-self-closing": [0],
-  "vue/jsx-uses-vars": [2],
-  "vue/key-spacing": [0],
-  "vue/keyword-spacing": [0],
-  "vue/max-attributes-per-line": [0],
-  "vue/max-len": [0],
-  "vue/multi-word-component-names": [0],
-  "vue/multiline-html-element-content-newline": [0],
-  "vue/multiline-ternary": [0],
-  "vue/mustache-interpolation-spacing": [0],
-  "vue/no-arrow-functions-in-watch": [2],
-  "vue/no-async-in-computed-properties": [2],
-  "vue/no-child-content": [2],
-  "vue/no-computed-properties-in-data": [2],
-  "vue/no-custom-modifiers-on-v-model": [2],
-  "vue/no-deprecated-data-object-declaration": [2],
-  "vue/no-deprecated-destroyed-lifecycle": [0],
-  "vue/no-deprecated-dollar-listeners-api": [0],
-  "vue/no-deprecated-dollar-scopedslots-api": [0],
-  "vue/no-deprecated-events-api": [2],
-  "vue/no-deprecated-filter": [1],
-  "vue/no-deprecated-functional-template": [2],
-  "vue/no-deprecated-html-element-is": [2],
-  "vue/no-deprecated-inline-template": [2],
-  "vue/no-deprecated-props-default-this": [0],
-  "vue/no-deprecated-router-link-tag-prop": [2],
-  "vue/no-deprecated-scope-attribute": [2],
-  "vue/no-deprecated-slot-attribute": [0],
-  "vue/no-deprecated-slot-scope-attribute": [0],
-  "vue/no-deprecated-v-bind-sync": [0],
-  "vue/no-deprecated-v-is": [2],
-  "vue/no-deprecated-v-on-native-modifier": [1],
-  "vue/no-deprecated-v-on-number-modifiers": [2],
-  "vue/no-deprecated-vue-config-keycodes": [2],
-  "vue/no-dupe-keys": [2],
-  "vue/no-dupe-v-else-if": [2],
-  "vue/no-duplicate-attributes": [2],
-  "vue/no-export-in-script-setup": [2],
-  "vue/no-expose-after-await": [2],
-  "vue/no-extra-parens": [0],
-  "vue/no-lifecycle-after-await": [2],
-  "vue/no-lone-template": [1],
-  "vue/no-multi-spaces": [0],
-  "vue/no-multiple-slot-args": [1],
-  "vue/no-multiple-template-root": [2],
-  "vue/no-mutating-props": [
-    2,
-    {
-      "shallowOnly": true
-    }
-  ],
-  "vue/no-parsing-error": [2],
-  "vue/no-ref-as-operand": [2],
-  "vue/no-reserved-component-names": [2],
-  "vue/no-reserved-keys": [2],
-  "vue/no-reserved-props": [
-    2,
-    {
-      "vueVersion": 2
-    }
-  ],
-  "vue/no-shared-component-data": [2],
-  "vue/no-side-effects-in-computed-properties": [2],
-  "vue/no-spaces-around-equal-signs-in-attribute": [0],
-  "vue/no-template-key": [2],
-  "vue/no-template-shadow": [1],
-  "vue/no-textarea-mustache": [2],
-  "vue/no-unused-components": [2],
-  "vue/no-unused-vars": [2],
-  "vue/no-use-computed-property-like-method": [2],
-  "vue/no-use-v-if-with-v-for": [2],
-  "vue/no-useless-template-attributes": [2],
-  "vue/no-v-for-template-key": [2],
-  "vue/no-v-for-template-key-on-child": [0],
-  "vue/no-v-html": [1],
-  "vue/no-v-model-argument": [1],
-  "vue/no-v-text-v-html-on-component": [2],
-  "vue/no-watch-after-await": [2],
-  "vue/object-curly-newline": [0],
-  "vue/object-curly-spacing": [0],
-  "vue/object-property-newline": [0],
-  "vue/one-component-per-file": [1],
-  "vue/operator-linebreak": [0],
-  "vue/order-in-components": [1],
-  "vue/prefer-import-from-vue": [2],
-  "vue/prop-name-casing": [1],
-  "vue/quote-props": [0],
-  "vue/require-component-is": [2],
-  "vue/require-default-prop": [1],
-  "vue/require-explicit-emits": [0],
-  "vue/require-prop-type-constructor": [2],
-  "vue/require-prop-types": [1],
-  "vue/require-render-return": [2],
-  "vue/require-slots-as-functions": [2],
-  "vue/require-toggle-inside-transition": [2],
-  "vue/require-v-for-key": [2],
-  "vue/require-valid-default-prop": [2],
-  "vue/return-in-computed-property": [2],
-  "vue/return-in-emits-validator": [2],
-  "vue/script-indent": [0],
-  "vue/singleline-html-element-content-newline": [0],
-  "vue/space-in-parens": [0],
-  "vue/space-infix-ops": [0],
-  "vue/space-unary-ops": [0],
-  "vue/template-curly-spacing": [0],
-  "vue/this-in-template": [1],
-  "vue/use-v-on-exact": [2],
-  "vue/v-bind-style": [1],
-  "vue/v-on-event-hyphenation": [
-    1,
-    "always",
-    {
-      "autofix": true
-    }
-  ],
-  "vue/v-on-style": [1],
-  "vue/v-slot-style": [1],
-  "vue/valid-attribute-name": [2],
-  "vue/valid-define-emits": [2],
-  "vue/valid-define-props": [2],
-  "vue/valid-model-definition": [2],
-  "vue/valid-next-tick": [2],
-  "vue/valid-template-root": [2],
-  "vue/valid-v-bind": [2],
-  "vue/valid-v-bind-sync": [2],
-  "vue/valid-v-cloak": [2],
-  "vue/valid-v-else": [2],
-  "vue/valid-v-else-if": [2],
-  "vue/valid-v-for": [2],
-  "vue/valid-v-html": [2],
-  "vue/valid-v-if": [2],
-  "vue/valid-v-is": [2],
-  "vue/valid-v-memo": [2],
-  "vue/valid-v-model": [2],
-  "vue/valid-v-on": [2],
-  "vue/valid-v-once": [2],
-  "vue/valid-v-pre": [2],
-  "vue/valid-v-show": [2],
-  "vue/valid-v-slot": [2],
-  "vue/valid-v-text": [2],
-  "wrap-iife": [0],
-  "wrap-regex": [0],
-  "yield-star-spacing": [0]
-}
diff --git a/frontend/eslint-config-vue.json b/frontend/eslint-config-vue.json
deleted file mode 100644
index 1bbc3a2a82..0000000000
--- a/frontend/eslint-config-vue.json
+++ /dev/null
@@ -1,394 +0,0 @@
-{
-  "@babel/object-curly-spacing": [0],
-  "@babel/semi": [0],
-  "@typescript-eslint/block-spacing": [0],
-  "@typescript-eslint/brace-style": [0],
-  "@typescript-eslint/comma-dangle": [0],
-  "@typescript-eslint/comma-spacing": [0],
-  "@typescript-eslint/func-call-spacing": [0],
-  "@typescript-eslint/indent": [0],
-  "@typescript-eslint/key-spacing": [0],
-  "@typescript-eslint/keyword-spacing": [0],
-  "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": [0],
-  "@typescript-eslint/no-extra-parens": [0],
-  "@typescript-eslint/no-extra-semi": [0],
-  "@typescript-eslint/object-curly-spacing": [0],
-  "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": [0],
-  "@typescript-eslint/space-before-blocks": [0],
-  "@typescript-eslint/space-before-function-paren": [0],
-  "@typescript-eslint/space-infix-ops": [0],
-  "@typescript-eslint/type-annotation-spacing": [0],
-  "array-bracket-newline": [0],
-  "array-bracket-spacing": [0],
-  "array-element-newline": [0],
-  "arrow-body-style": [0],
-  "arrow-parens": [0],
-  "arrow-spacing": [0],
-  "babel/object-curly-spacing": [0],
-  "babel/quotes": [0],
-  "babel/semi": [0],
-  "block-spacing": [0],
-  "brace-style": [0],
-  "comma-dangle": [0],
-  "comma-spacing": [0],
-  "comma-style": [0],
-  "computed-property-spacing": [0],
-  "constructor-super": [2],
-  "curly": [0],
-  "dot-location": [0],
-  "eol-last": [0],
-  "flowtype/boolean-style": [0],
-  "flowtype/delimiter-dangle": [0],
-  "flowtype/generic-spacing": [0],
-  "flowtype/object-type-curly-spacing": [0],
-  "flowtype/object-type-delimiter": [0],
-  "flowtype/quotes": [0],
-  "flowtype/semi": [0],
-  "flowtype/space-after-type-colon": [0],
-  "flowtype/space-before-generic-bracket": [0],
-  "flowtype/space-before-type-colon": [0],
-  "flowtype/union-intersection-spacing": [0],
-  "for-direction": [2],
-  "func-call-spacing": [0],
-  "function-call-argument-newline": [0],
-  "function-paren-newline": [0],
-  "generator-star": [0],
-  "generator-star-spacing": [0],
-  "getter-return": [2],
-  "implicit-arrow-linebreak": [0],
-  "indent": [0],
-  "indent-legacy": [0],
-  "jsx-quotes": [0],
-  "key-spacing": [0],
-  "keyword-spacing": [0],
-  "linebreak-style": [0],
-  "lines-around-comment": [0],
-  "local-rules/matching-translation-keys": [
-    2,
-    {
-      "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
-      "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
-    }
-  ],
-  "max-len": [0],
-  "max-statements-per-line": [0],
-  "multiline-ternary": [0],
-  "new-parens": [0],
-  "newline-per-chained-call": [0],
-  "no-arrow-condition": [0],
-  "no-async-promise-executor": [2],
-  "no-case-declarations": [2],
-  "no-class-assign": [2],
-  "no-comma-dangle": [0],
-  "no-compare-neg-zero": [2],
-  "no-cond-assign": [2],
-  "no-confusing-arrow": [0],
-  "no-const-assign": [2],
-  "no-constant-binary-expression": [2],
-  "no-constant-condition": [2],
-  "no-control-regex": [2],
-  "no-debugger": [2],
-  "no-delete-var": [2],
-  "no-dupe-args": [2],
-  "no-dupe-class-members": [2],
-  "no-dupe-else-if": [2],
-  "no-dupe-keys": [2],
-  "no-duplicate-case": [2],
-  "no-empty": [2],
-  "no-empty-character-class": [2],
-  "no-empty-pattern": [2],
-  "no-empty-static-block": [2],
-  "no-ex-assign": [2],
-  "no-extra-boolean-cast": [2],
-  "no-extra-parens": [0],
-  "no-extra-semi": [0],
-  "no-fallthrough": [2],
-  "no-floating-decimal": [0],
-  "no-func-assign": [2],
-  "no-global-assign": [2],
-  "no-import-assign": [2],
-  "no-invalid-regexp": [2],
-  "no-irregular-whitespace": [2],
-  "no-loss-of-precision": [2],
-  "no-misleading-character-class": [2],
-  "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": [0],
-  "no-multi-spaces": [0],
-  "no-multiple-empty-lines": [0],
-  "no-new-native-nonconstructor": [2],
-  "no-nonoctal-decimal-escape": [2],
-  "no-obj-calls": [2],
-  "no-octal": [2],
-  "no-prototype-builtins": [2],
-  "no-redeclare": [2],
-  "no-regex-spaces": [2],
-  "no-reserved-keys": [0],
-  "no-self-assign": [2],
-  "no-setter-return": [2],
-  "no-shadow-restricted-names": [2],
-  "no-space-before-semi": [0],
-  "no-spaced-func": [0],
-  "no-sparse-arrays": [2],
-  "no-tabs": [0],
-  "no-this-before-super": [2],
-  "no-trailing-spaces": [0],
-  "no-undef": [2],
-  "no-unexpected-multiline": [0],
-  "no-unreachable": [2],
-  "no-unsafe-finally": [2],
-  "no-unsafe-negation": [2],
-  "no-unsafe-optional-chaining": [2],
-  "no-unused-labels": [2],
-  "no-unused-private-class-members": [2],
-  "no-unused-vars": [
-    2,
-    {
-      "argsIgnorePattern": "^_$"
-    }
-  ],
-  "no-useless-backreference": [2],
-  "no-useless-catch": [2],
-  "no-useless-escape": [2],
-  "no-whitespace-before-property": [0],
-  "no-with": [2],
-  "no-wrap-func": [0],
-  "nonblock-statement-body-position": [0],
-  "object-curly-newline": [0],
-  "object-curly-spacing": [0],
-  "object-property-newline": [0],
-  "one-var-declaration-per-line": [0],
-  "operator-linebreak": [0],
-  "padded-blocks": [0],
-  "prefer-arrow-callback": [0],
-  "prefer-const": [2],
-  "prettier/prettier": [2],
-  "quote-props": [0],
-  "quotes": [0],
-  "react/jsx-child-element-spacing": [0],
-  "react/jsx-closing-bracket-location": [0],
-  "react/jsx-closing-tag-location": [0],
-  "react/jsx-curly-newline": [0],
-  "react/jsx-curly-spacing": [0],
-  "react/jsx-equals-spacing": [0],
-  "react/jsx-first-prop-new-line": [0],
-  "react/jsx-indent": [0],
-  "react/jsx-indent-props": [0],
-  "react/jsx-max-props-per-line": [0],
-  "react/jsx-newline": [0],
-  "react/jsx-one-expression-per-line": [0],
-  "react/jsx-props-no-multi-spaces": [0],
-  "react/jsx-space-before-closing": [0],
-  "react/jsx-tag-spacing": [0],
-  "react/jsx-wrap-multilines": [0],
-  "require-yield": [2],
-  "rest-spread-spacing": [0],
-  "semi": [0],
-  "semi-spacing": [0],
-  "semi-style": [0],
-  "space-after-function-name": [0],
-  "space-after-keywords": [0],
-  "space-before-blocks": [0],
-  "space-before-function-paren": [0],
-  "space-before-function-parentheses": [0],
-  "space-before-keywords": [0],
-  "space-in-brackets": [0],
-  "space-in-parens": [0],
-  "space-infix-ops": [0],
-  "space-return-throw-case": [0],
-  "space-unary-ops": [0],
-  "space-unary-word-ops": [0],
-  "standard/array-bracket-even-spacing": [0],
-  "standard/computed-property-even-spacing": [0],
-  "standard/object-curly-even-spacing": [0],
-  "switch-colon-spacing": [0],
-  "template-curly-spacing": [0],
-  "template-tag-spacing": [0],
-  "unicorn/empty-brace-spaces": [0],
-  "unicorn/no-nested-ternary": [0],
-  "unicorn/number-literal-case": [0],
-  "unicorn/template-indent": [0],
-  "use-isnan": [2],
-  "valid-typeof": [2],
-  "vue-scoped-css/enforce-style-type": [1],
-  "vue-scoped-css/no-deprecated-deep-combinator": [1],
-  "vue-scoped-css/no-parent-of-v-global": [1],
-  "vue-scoped-css/no-parsing-error": [1],
-  "vue-scoped-css/no-unused-keyframes": [1],
-  "vue-scoped-css/no-unused-selector": [1],
-  "vue-scoped-css/require-v-deep-argument": [1],
-  "vue-scoped-css/require-v-global-argument": [1],
-  "vue-scoped-css/require-v-slotted-argument": [1],
-  "vue/array-bracket-newline": [0],
-  "vue/array-bracket-spacing": [0],
-  "vue/array-element-newline": [0],
-  "vue/arrow-spacing": [0],
-  "vue/attribute-hyphenation": [1],
-  "vue/attributes-order": [1],
-  "vue/block-spacing": [0],
-  "vue/block-tag-newline": [0],
-  "vue/brace-style": [0],
-  "vue/comma-dangle": [0],
-  "vue/comma-spacing": [0],
-  "vue/comma-style": [0],
-  "vue/comment-directive": [2],
-  "vue/component-definition-name-casing": [1],
-  "vue/component-tags-order": [
-    2,
-    {
-      "order": ["template", "script", "style"]
-    }
-  ],
-  "vue/dot-location": [0],
-  "vue/first-attribute-linebreak": [1],
-  "vue/func-call-spacing": [0],
-  "vue/html-closing-bracket-newline": [0],
-  "vue/html-closing-bracket-spacing": [0],
-  "vue/html-end-tags": [0],
-  "vue/html-indent": [0],
-  "vue/html-quotes": [0],
-  "vue/html-self-closing": [0],
-  "vue/jsx-uses-vars": [2],
-  "vue/key-spacing": [0],
-  "vue/keyword-spacing": [0],
-  "vue/max-attributes-per-line": [0],
-  "vue/max-len": [0],
-  "vue/multi-word-component-names": [0],
-  "vue/multiline-html-element-content-newline": [0],
-  "vue/multiline-ternary": [0],
-  "vue/mustache-interpolation-spacing": [0],
-  "vue/no-arrow-functions-in-watch": [2],
-  "vue/no-async-in-computed-properties": [2],
-  "vue/no-child-content": [2],
-  "vue/no-computed-properties-in-data": [2],
-  "vue/no-custom-modifiers-on-v-model": [2],
-  "vue/no-deprecated-data-object-declaration": [2],
-  "vue/no-deprecated-destroyed-lifecycle": [0],
-  "vue/no-deprecated-dollar-listeners-api": [0],
-  "vue/no-deprecated-dollar-scopedslots-api": [0],
-  "vue/no-deprecated-events-api": [2],
-  "vue/no-deprecated-filter": [1],
-  "vue/no-deprecated-functional-template": [2],
-  "vue/no-deprecated-html-element-is": [2],
-  "vue/no-deprecated-inline-template": [2],
-  "vue/no-deprecated-props-default-this": [0],
-  "vue/no-deprecated-router-link-tag-prop": [2],
-  "vue/no-deprecated-scope-attribute": [2],
-  "vue/no-deprecated-slot-attribute": [0],
-  "vue/no-deprecated-slot-scope-attribute": [0],
-  "vue/no-deprecated-v-bind-sync": [0],
-  "vue/no-deprecated-v-is": [2],
-  "vue/no-deprecated-v-on-native-modifier": [1],
-  "vue/no-deprecated-v-on-number-modifiers": [2],
-  "vue/no-deprecated-vue-config-keycodes": [2],
-  "vue/no-dupe-keys": [2],
-  "vue/no-dupe-v-else-if": [2],
-  "vue/no-duplicate-attributes": [2],
-  "vue/no-export-in-script-setup": [2],
-  "vue/no-expose-after-await": [2],
-  "vue/no-extra-parens": [0],
-  "vue/no-lifecycle-after-await": [2],
-  "vue/no-lone-template": [1],
-  "vue/no-multi-spaces": [0],
-  "vue/no-multiple-slot-args": [1],
-  "vue/no-multiple-template-root": [2],
-  "vue/no-mutating-props": [
-    2,
-    {
-      "shallowOnly": true
-    }
-  ],
-  "vue/no-parsing-error": [2],
-  "vue/no-ref-as-operand": [2],
-  "vue/no-reserved-component-names": [2],
-  "vue/no-reserved-keys": [2],
-  "vue/no-reserved-props": [
-    2,
-    {
-      "vueVersion": 2
-    }
-  ],
-  "vue/no-shared-component-data": [2],
-  "vue/no-side-effects-in-computed-properties": [2],
-  "vue/no-spaces-around-equal-signs-in-attribute": [0],
-  "vue/no-template-key": [2],
-  "vue/no-template-shadow": [1],
-  "vue/no-textarea-mustache": [2],
-  "vue/no-unused-components": [2],
-  "vue/no-unused-vars": [2],
-  "vue/no-use-computed-property-like-method": [2],
-  "vue/no-use-v-if-with-v-for": [2],
-  "vue/no-useless-template-attributes": [2],
-  "vue/no-v-for-template-key": [2],
-  "vue/no-v-for-template-key-on-child": [0],
-  "vue/no-v-html": [1],
-  "vue/no-v-model-argument": [1],
-  "vue/no-v-text-v-html-on-component": [2],
-  "vue/no-watch-after-await": [2],
-  "vue/object-curly-newline": [0],
-  "vue/object-curly-spacing": [0],
-  "vue/object-property-newline": [0],
-  "vue/one-component-per-file": [1],
-  "vue/operator-linebreak": [0],
-  "vue/order-in-components": [1],
-  "vue/prefer-import-from-vue": [2],
-  "vue/prop-name-casing": [1],
-  "vue/quote-props": [0],
-  "vue/require-component-is": [2],
-  "vue/require-default-prop": [1],
-  "vue/require-explicit-emits": [0],
-  "vue/require-prop-type-constructor": [2],
-  "vue/require-prop-types": [1],
-  "vue/require-render-return": [2],
-  "vue/require-slots-as-functions": [2],
-  "vue/require-toggle-inside-transition": [2],
-  "vue/require-v-for-key": [2],
-  "vue/require-valid-default-prop": [2],
-  "vue/return-in-computed-property": [2],
-  "vue/return-in-emits-validator": [2],
-  "vue/script-indent": [0],
-  "vue/singleline-html-element-content-newline": [0],
-  "vue/space-in-parens": [0],
-  "vue/space-infix-ops": [0],
-  "vue/space-unary-ops": [0],
-  "vue/template-curly-spacing": [0],
-  "vue/this-in-template": [1],
-  "vue/use-v-on-exact": [2],
-  "vue/v-bind-style": [1],
-  "vue/v-on-event-hyphenation": [
-    1,
-    "always",
-    {
-      "autofix": true
-    }
-  ],
-  "vue/v-on-style": [1],
-  "vue/v-slot-style": [1],
-  "vue/valid-attribute-name": [2],
-  "vue/valid-define-emits": [2],
-  "vue/valid-define-props": [2],
-  "vue/valid-model-definition": [2],
-  "vue/valid-next-tick": [2],
-  "vue/valid-template-root": [2],
-  "vue/valid-v-bind": [2],
-  "vue/valid-v-bind-sync": [2],
-  "vue/valid-v-cloak": [2],
-  "vue/valid-v-else": [2],
-  "vue/valid-v-else-if": [2],
-  "vue/valid-v-for": [2],
-  "vue/valid-v-html": [2],
-  "vue/valid-v-if": [2],
-  "vue/valid-v-is": [2],
-  "vue/valid-v-memo": [2],
-  "vue/valid-v-model": [2],
-  "vue/valid-v-on": [2],
-  "vue/valid-v-once": [2],
-  "vue/valid-v-pre": [2],
-  "vue/valid-v-show": [2],
-  "vue/valid-v-slot": [2],
-  "vue/valid-v-text": [2],
-  "wrap-iife": [0],
-  "wrap-regex": [0],
-  "yield-star-spacing": [0]
-}

From 721f357e9013dc4e5cd6d5706dd6034001cf7935 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Thu, 18 Jul 2024 23:10:03 +0200
Subject: [PATCH 078/273] e2e: pin cypress image

Even to digest, that we control it when the image changes.
---
 docker-compose.yml | 2 +-
 renovate.json      | 8 ++++++++
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/docker-compose.yml b/docker-compose.yml
index 1108cc4b11..713955dccb 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -181,7 +181,7 @@ services:
       - FUNCTION_ENABLE_INCOGNITO_MODE=true
 
   e2e:
-    image: cypress/included:13.13.0
+    image: cypress/included:cypress-13.13.0-node-20.15.1-chrome-126.0.6478.114-1-ff-128.0-edge-126.0.2592.61-1@sha256:f9733a2cadc3aa270e40f8ce1158a23cb99703476a9db7154b4ecc51ba02bd5c
     profiles: ['e2e']
     container_name: 'ecamp3-e2e'
     environment:
diff --git a/renovate.json b/renovate.json
index c4472b6ed0..eb4cbc079d 100644
--- a/renovate.json
+++ b/renovate.json
@@ -140,6 +140,14 @@
         "postgres"
       ],
       "allowedVersions": "15-alpine"
+    },
+    {
+      "matchDepNames": [
+        "cypress",
+        "cypress/included"
+      ],
+      "automerge": false,
+      "groupName": "cypress"
     }
   ],
   "customManagers": [

From 16fad5d281e8bc20b781b31ccc752944bb82f723 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 19 Aug 2024 03:27:06 +0000
Subject: [PATCH 079/273] chore(deps): update dependency @types/node to
 v20.16.1

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index 964a06b662..dc512a52ff 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -12,7 +12,7 @@
             },
             "devDependencies": {
                 "@babel/eslint-parser": "7.25.1",
-                "@types/node": "20.16.0",
+                "@types/node": "20.16.1",
                 "eslint": "8.57.0",
                 "eslint-config-prettier": "9.1.0",
                 "eslint-plugin-import": "2.29.1",
@@ -2866,9 +2866,9 @@
             }
         },
         "node_modules/@types/node": {
-            "version": "20.16.0",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.0.tgz",
-            "integrity": "sha512-vDxceJcoZhIVh67S568bm1UGZO0DX0hpplJZxzeXMKwIPLn190ec5RRxQ69BKhX44SUGIxxgMdDY557lGLKprQ==",
+            "version": "20.16.1",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz",
+            "integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==",
             "license": "MIT",
             "dependencies": {
                 "undici-types": "~6.19.2"
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 18fe8fdb6c..e2c5850d52 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -16,7 +16,7 @@
     },
     "devDependencies": {
         "@babel/eslint-parser": "7.25.1",
-        "@types/node": "20.16.0",
+        "@types/node": "20.16.1",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
         "eslint-plugin-import": "2.29.1",

From 7002b4971f051e3132bab5df3cffeab46f36c8c9 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 19 Aug 2024 14:01:30 +0000
Subject: [PATCH 080/273] chore(deps): update dependency @nuxt/eslint-config to
 v0.5.1

---
 print/package-lock.json | 111 ++++++++++++++++++++--------------------
 print/package.json      |   2 +-
 2 files changed, 57 insertions(+), 56 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index 318292dfc0..7e0cde9a04 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -21,7 +21,7 @@
         "vuex": "4.1.0"
       },
       "devDependencies": {
-        "@nuxt/eslint-config": "0.5.0",
+        "@nuxt/eslint-config": "0.5.1",
         "@nuxtjs/eslint-module": "4.1.0",
         "@nuxtjs/i18n": "8.4.0",
         "@nuxtjs/tailwindcss": "6.12.1",
@@ -735,15 +735,15 @@
       }
     },
     "node_modules/@es-joy/jsdoccomment": {
-      "version": "0.46.0",
-      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.46.0.tgz",
-      "integrity": "sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==",
+      "version": "0.48.0",
+      "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.48.0.tgz",
+      "integrity": "sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "comment-parser": "1.4.1",
         "esquery": "^1.6.0",
-        "jsdoc-type-pratt-parser": "~4.0.0"
+        "jsdoc-type-pratt-parser": "~4.1.0"
       },
       "engines": {
         "node": ">=16"
@@ -2060,22 +2060,22 @@
       }
     },
     "node_modules/@nuxt/eslint-config": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.0.tgz",
-      "integrity": "sha512-jG+S9lLIpAHIngJNiEbEMsZlnLEichJ/dZJufPhX/nqZIvbgKNn2eGInbi0bJJbqMnm0qzk7458NUzOhek8ZVw==",
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.1.tgz",
+      "integrity": "sha512-Z6JNHe4trtJdte3y5Fy0CueFCris/kEIbDAoY1bYum1EtOFjEhOcx6BWCrkQybzUIfPVel7YgJ4CiG9bkD3plQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@eslint/js": "^9.8.0",
-        "@nuxt/eslint-plugin": "0.5.0",
+        "@eslint/js": "^9.9.0",
+        "@nuxt/eslint-plugin": "0.5.1",
         "@rushstack/eslint-patch": "^1.10.4",
-        "@stylistic/eslint-plugin": "^2.6.1",
-        "@typescript-eslint/eslint-plugin": "^8.0.0",
-        "@typescript-eslint/parser": "^8.0.0",
+        "@stylistic/eslint-plugin": "^2.6.4",
+        "@typescript-eslint/eslint-plugin": "^8.1.0",
+        "@typescript-eslint/parser": "^8.1.0",
         "eslint-config-flat-gitignore": "^0.1.8",
-        "eslint-flat-config-utils": "^0.3.0",
+        "eslint-flat-config-utils": "^0.3.1",
         "eslint-plugin-import-x": "^3.1.0",
-        "eslint-plugin-jsdoc": "^48.11.0",
+        "eslint-plugin-jsdoc": "^50.2.2",
         "eslint-plugin-regexp": "^2.6.0",
         "eslint-plugin-unicorn": "^55.0.0",
         "eslint-plugin-vue": "^9.27.0",
@@ -2287,14 +2287,14 @@
       }
     },
     "node_modules/@nuxt/eslint-plugin": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.0.tgz",
-      "integrity": "sha512-p0HNkpNxur0DKW3euIR25FgYMSSRp7hkecA0vOdQo+4qTipYLznqj9MjUvRo10CZtS0g9D9Gv5NyIkjPLTMN8A==",
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.1.tgz",
+      "integrity": "sha512-erJ6bum60DTAy+nCq+oU2ZmG4kat+zhvTPvBEkA9SSnJvrHLSjTzJ/r74rgwPM5yuUfIxtujYQ6BBvwvbCBzXw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "^8.0.0",
-        "@typescript-eslint/utils": "^8.0.0"
+        "@typescript-eslint/types": "^8.1.0",
+        "@typescript-eslint/utils": "^8.1.0"
       },
       "peerDependencies": {
         "eslint": "^8.57.0 || ^9.0.0"
@@ -3965,16 +3965,16 @@
       }
     },
     "node_modules/@stylistic/eslint-plugin": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.6.2.tgz",
-      "integrity": "sha512-Ic5oFNM/25iuagob6LiIBkSI/A2y45TsyKtDtODXHRZDy52WfPfeexI6r+OH5+aWN9QGob2Bw+4JRM9/4areWw==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.6.4.tgz",
+      "integrity": "sha512-euUGnjzH8EOqEYTGk9dB2OBINp0FX1nuO7/k4fO82zNRBIKZgJoDwTLM4Ce+Om6W1Qmh1PrZjCr4jh4tMEXGPQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@stylistic/eslint-plugin-js": "2.6.2",
-        "@stylistic/eslint-plugin-jsx": "2.6.2",
-        "@stylistic/eslint-plugin-plus": "2.6.2",
-        "@stylistic/eslint-plugin-ts": "2.6.2",
+        "@stylistic/eslint-plugin-js": "2.6.4",
+        "@stylistic/eslint-plugin-jsx": "2.6.4",
+        "@stylistic/eslint-plugin-plus": "2.6.4",
+        "@stylistic/eslint-plugin-ts": "2.6.4",
         "@types/eslint": "^9.6.0"
       },
       "engines": {
@@ -3985,9 +3985,9 @@
       }
     },
     "node_modules/@stylistic/eslint-plugin-js": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.6.2.tgz",
-      "integrity": "sha512-wCr/kVctAPayMU3pcOI1MKR7MoKIh6VKZU89lPklAqtJoxT+Em6RueiiARbpznUYG5eg3LymiU+aMD+aIZXdqA==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.6.4.tgz",
+      "integrity": "sha512-kx1hS3xTvzxZLdr/DCU/dLBE++vcP97sHeEFX2QXhk1Ipa4K1rzPOLw1HCbf4mU3s+7kHP5eYpDe+QteEOFLug==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4004,14 +4004,16 @@
       }
     },
     "node_modules/@stylistic/eslint-plugin-jsx": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-2.6.2.tgz",
-      "integrity": "sha512-dSXK/fSPA938J1fBi10QmhzLKtZ/2TuyVNHQMk8jUhWfKJDleAogaSqcWNAbN8fwcoe9UWmt/3StiIf2oYC1aQ==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-2.6.4.tgz",
+      "integrity": "sha512-bIvVhdtjmyu3S10V7QRIuawtCZSq9gRmzAX23ucjCOdSFzEwlq+di0IM0riBAvvQerrJL4SM6G3xgyPs8BSXIA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@stylistic/eslint-plugin-js": "^2.6.2",
+        "@stylistic/eslint-plugin-js": "^2.6.4",
         "@types/eslint": "^9.6.0",
+        "eslint-visitor-keys": "^4.0.0",
+        "espree": "^10.1.0",
         "estraverse": "^5.3.0",
         "picomatch": "^4.0.2"
       },
@@ -4036,29 +4038,28 @@
       }
     },
     "node_modules/@stylistic/eslint-plugin-plus": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-2.6.2.tgz",
-      "integrity": "sha512-cANcPASfRvq3VTbbQCrSIXq+2AI0IW68PNYaZoXXS0ENlp7HDB8dmrsJnOgWCcoEvdCB8z/eWcG/eq/v5Qcl+Q==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-2.6.4.tgz",
+      "integrity": "sha512-EuRvtxhf7Hv8OoMIePulP/6rBJIgPTu1l5GAm1780WcF1Cl8bOZXIn84Pdac5pNv6lVlzCOFm8MD3VE+2YROuA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@types/eslint": "^9.6.0",
-        "@typescript-eslint/utils": "^8.0.0"
+        "@types/eslint": "^9.6.0"
       },
       "peerDependencies": {
         "eslint": "*"
       }
     },
     "node_modules/@stylistic/eslint-plugin-ts": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.6.2.tgz",
-      "integrity": "sha512-6OEN3VtUNxjgOvWPavnC10MByr1H4zsgwNND3rQXr5lDFv93MLUnTsH+/SH15OkuqdyJgrQILI6b9lYecb1vIg==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.6.4.tgz",
+      "integrity": "sha512-yxL8Hj6WkObw1jfiLpBzKy5yfxY6vwlwO4miq34ySErUjUecPV5jxfVbOe4q1QDPKemQGPq93v7sAQS5PzM8lA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@stylistic/eslint-plugin-js": "2.6.2",
+        "@stylistic/eslint-plugin-js": "2.6.4",
         "@types/eslint": "^9.6.0",
-        "@typescript-eslint/utils": "^8.0.0"
+        "@typescript-eslint/utils": "^8.1.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -8071,9 +8072,9 @@
       }
     },
     "node_modules/eslint-flat-config-utils": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-flat-config-utils/-/eslint-flat-config-utils-0.3.0.tgz",
-      "integrity": "sha512-FaFQLUunAl6YK7aU/pT23DXYVWg/cEHbSfxwAxpCGT6Su8H9RfkmzKLh1G2bba46p6dTlQeA4VTiV5//0SeToQ==",
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/eslint-flat-config-utils/-/eslint-flat-config-utils-0.3.1.tgz",
+      "integrity": "sha512-eFT3EaoJN1hlN97xw4FIEX//h0TiFUobgl2l5uLkIwhVN9ahGq95Pbs+i1/B5UACA78LO3rco3JzuvxLdTUOPA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8169,16 +8170,16 @@
       }
     },
     "node_modules/eslint-plugin-jsdoc": {
-      "version": "48.11.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.11.0.tgz",
-      "integrity": "sha512-d12JHJDPNo7IFwTOAItCeJY1hcqoIxE0lHA8infQByLilQ9xkqrRa6laWCnsuCrf+8rUnvxXY1XuTbibRBNylA==",
+      "version": "50.2.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.2.2.tgz",
+      "integrity": "sha512-i0ZMWA199DG7sjxlzXn5AeYZxpRfMJjDPUl7lL9eJJX8TPRoIaxJU4ys/joP5faM5AXE1eqW/dslCj3uj4Nqpg==",
       "dev": true,
       "license": "BSD-3-Clause",
       "dependencies": {
-        "@es-joy/jsdoccomment": "~0.46.0",
+        "@es-joy/jsdoccomment": "~0.48.0",
         "are-docs-informative": "^0.0.2",
         "comment-parser": "1.4.1",
-        "debug": "^4.3.5",
+        "debug": "^4.3.6",
         "escape-string-regexp": "^4.0.0",
         "espree": "^10.1.0",
         "esquery": "^1.6.0",
@@ -10354,9 +10355,9 @@
       "license": "MIT"
     },
     "node_modules/jsdoc-type-pratt-parser": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz",
-      "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz",
+      "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/print/package.json b/print/package.json
index c0739013f5..690fad6c03 100644
--- a/print/package.json
+++ b/print/package.json
@@ -30,7 +30,7 @@
     "vuex": "4.1.0"
   },
   "devDependencies": {
-    "@nuxt/eslint-config": "0.5.0",
+    "@nuxt/eslint-config": "0.5.1",
     "@nuxtjs/eslint-module": "4.1.0",
     "@nuxtjs/i18n": "8.4.0",
     "@nuxtjs/tailwindcss": "6.12.1",

From fb2c3c6ce5d5ca099c39f4f172c98c6fcbb9e2a1 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 19 Aug 2024 14:01:44 +0000
Subject: [PATCH 081/273] chore(deps): update dependency @nuxtjs/i18n to v8.5.0

---
 print/package-lock.json | 8 ++++----
 print/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index 318292dfc0..d310fc67b6 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -23,7 +23,7 @@
       "devDependencies": {
         "@nuxt/eslint-config": "0.5.0",
         "@nuxtjs/eslint-module": "4.1.0",
-        "@nuxtjs/i18n": "8.4.0",
+        "@nuxtjs/i18n": "8.5.0",
         "@nuxtjs/tailwindcss": "6.12.1",
         "@tailwindcss/typography": "0.5.14",
         "@typescript-eslint/eslint-plugin": "7.18.0",
@@ -2464,9 +2464,9 @@
       }
     },
     "node_modules/@nuxtjs/i18n": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.4.0.tgz",
-      "integrity": "sha512-+iFDUlWNT99jVlXoVTcaEJdiE/psWBVMyVvDl4aB58/nB9ICzNy1bLAYrUxtoEtxhFF2tF+DHTdcs8dSVWeHWQ==",
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.5.0.tgz",
+      "integrity": "sha512-FMdVUzsbTWu3FOCQsUt5aDyc6ffPAowo1MfPmuFwDIgqWgzMnayDEaQM2c2D1Hyn1pjYYI46IVsJ9+aJqp+SHQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/print/package.json b/print/package.json
index c0739013f5..9c32691e0a 100644
--- a/print/package.json
+++ b/print/package.json
@@ -32,7 +32,7 @@
   "devDependencies": {
     "@nuxt/eslint-config": "0.5.0",
     "@nuxtjs/eslint-module": "4.1.0",
-    "@nuxtjs/i18n": "8.4.0",
+    "@nuxtjs/i18n": "8.5.0",
     "@nuxtjs/tailwindcss": "6.12.1",
     "@tailwindcss/typography": "0.5.14",
     "@typescript-eslint/eslint-plugin": "7.18.0",

From d7ae8d09ad065c76ee91496cf8484f47bb0b1c4f Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 19 Aug 2024 18:13:30 +0000
Subject: [PATCH 082/273] chore(deps): update dependency
 @typescript-eslint/eslint-plugin to v8

---
 print/package-lock.json | 537 +++++++++++++++++++---------------------
 print/package.json      |   2 +-
 2 files changed, 249 insertions(+), 290 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index f24d709520..124b278d11 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -26,7 +26,7 @@
         "@nuxtjs/i18n": "8.5.0",
         "@nuxtjs/tailwindcss": "6.12.1",
         "@tailwindcss/typography": "0.5.14",
-        "@typescript-eslint/eslint-plugin": "7.18.0",
+        "@typescript-eslint/eslint-plugin": "8.2.0",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/compiler-dom": "3.4.38",
         "@vue/compiler-sfc": "3.4.38",
@@ -2089,203 +2089,6 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
-    "node_modules/@nuxt/eslint-config/node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.1.0.tgz",
-      "integrity": "sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.1.0",
-        "@typescript-eslint/type-utils": "8.1.0",
-        "@typescript-eslint/utils": "8.1.0",
-        "@typescript-eslint/visitor-keys": "8.1.0",
-        "graphemer": "^1.4.0",
-        "ignore": "^5.3.1",
-        "natural-compare": "^1.4.0",
-        "ts-api-utils": "^1.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
-        "eslint": "^8.57.0 || ^9.0.0"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@nuxt/eslint-config/node_modules/@typescript-eslint/parser": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.1.0.tgz",
-      "integrity": "sha512-U7iTAtGgJk6DPX9wIWPPOlt1gO57097G06gIcl0N0EEnNw8RGD62c+2/DiP/zL7KrkqnnqF7gtFGR7YgzPllTA==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "@typescript-eslint/scope-manager": "8.1.0",
-        "@typescript-eslint/types": "8.1.0",
-        "@typescript-eslint/typescript-estree": "8.1.0",
-        "@typescript-eslint/visitor-keys": "8.1.0",
-        "debug": "^4.3.4"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@nuxt/eslint-config/node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.1.0.tgz",
-      "integrity": "sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.1.0",
-        "@typescript-eslint/visitor-keys": "8.1.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@nuxt/eslint-config/node_modules/@typescript-eslint/type-utils": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.1.0.tgz",
-      "integrity": "sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/typescript-estree": "8.1.0",
-        "@typescript-eslint/utils": "8.1.0",
-        "debug": "^4.3.4",
-        "ts-api-utils": "^1.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@nuxt/eslint-config/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.1.0.tgz",
-      "integrity": "sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "@typescript-eslint/types": "8.1.0",
-        "@typescript-eslint/visitor-keys": "8.1.0",
-        "debug": "^4.3.4",
-        "globby": "^11.1.0",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^1.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@nuxt/eslint-config/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz",
-      "integrity": "sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.1.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@nuxt/eslint-config/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@nuxt/eslint-config/node_modules/globby": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-union": "^2.1.0",
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.9",
-        "ignore": "^5.2.0",
-        "merge2": "^1.4.1",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@nuxt/eslint-config/node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/@nuxt/eslint-plugin": {
       "version": "0.5.1",
       "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.1.tgz",
@@ -4284,32 +4087,32 @@
       }
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz",
-      "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==",
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.2.0.tgz",
+      "integrity": "sha512-02tJIs655em7fvt9gps/+4k4OsKULYGtLBPJfOsmOq1+3cdClYiF0+d6mHu6qDnTcg88wJBkcPLpQhq7FyDz0A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "7.18.0",
-        "@typescript-eslint/type-utils": "7.18.0",
-        "@typescript-eslint/utils": "7.18.0",
-        "@typescript-eslint/visitor-keys": "7.18.0",
+        "@typescript-eslint/scope-manager": "8.2.0",
+        "@typescript-eslint/type-utils": "8.2.0",
+        "@typescript-eslint/utils": "8.2.0",
+        "@typescript-eslint/visitor-keys": "8.2.0",
         "graphemer": "^1.4.0",
         "ignore": "^5.3.1",
         "natural-compare": "^1.4.0",
         "ts-api-utils": "^1.3.0"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
       "peerDependencies": {
-        "@typescript-eslint/parser": "^7.0.0",
-        "eslint": "^8.56.0"
+        "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+        "eslint": "^8.57.0 || ^9.0.0"
       },
       "peerDependenciesMeta": {
         "typescript": {
@@ -4317,66 +4120,77 @@
         }
       }
     },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
-      "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz",
+      "integrity": "sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.2.0",
+        "@typescript-eslint/visitor-keys": "8.2.0"
+      },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
-      "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz",
+      "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "7.18.0",
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/typescript-estree": "7.18.0"
+        "@typescript-eslint/types": "8.2.0",
+        "eslint-visitor-keys": "^3.4.3"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
-      "peerDependencies": {
-        "eslint": "^8.56.0"
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz",
-      "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==",
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.2.0.tgz",
+      "integrity": "sha512-j3Di+o0lHgPrb7FxL3fdEy6LJ/j2NE8u+AP/5cQ9SKb+JLH6V6UHDqJ+e0hXBkHP1wn1YDFjYCS9LBQsZDlDEg==",
       "dev": true,
       "license": "BSD-2-Clause",
-      "peer": true,
       "dependencies": {
-        "@typescript-eslint/scope-manager": "7.18.0",
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/typescript-estree": "7.18.0",
-        "@typescript-eslint/visitor-keys": "7.18.0",
+        "@typescript-eslint/scope-manager": "8.2.0",
+        "@typescript-eslint/types": "8.2.0",
+        "@typescript-eslint/typescript-estree": "8.2.0",
+        "@typescript-eslint/visitor-keys": "8.2.0",
         "debug": "^4.3.4"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
       "peerDependencies": {
-        "eslint": "^8.56.0"
+        "eslint": "^8.57.0 || ^9.0.0"
       },
       "peerDependenciesMeta": {
         "typescript": {
@@ -4384,21 +4198,115 @@
         }
       }
     },
-    "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
-      "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
+    "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz",
+      "integrity": "sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==",
       "dev": true,
       "license": "MIT",
-      "peer": true,
+      "dependencies": {
+        "@typescript-eslint/types": "8.2.0",
+        "@typescript-eslint/visitor-keys": "8.2.0"
+      },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz",
+      "integrity": "sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "@typescript-eslint/types": "8.2.0",
+        "@typescript-eslint/visitor-keys": "8.2.0",
+        "debug": "^4.3.4",
+        "globby": "^11.1.0",
+        "is-glob": "^4.0.3",
+        "minimatch": "^9.0.4",
+        "semver": "^7.6.0",
+        "ts-api-utils": "^1.3.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz",
+      "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.2.0",
+        "eslint-visitor-keys": "^3.4.3"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
+    "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/parser/node_modules/globby": {
+      "version": "11.1.0",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "array-union": "^2.1.0",
+        "dir-glob": "^3.0.1",
+        "fast-glob": "^3.2.9",
+        "ignore": "^5.2.0",
+        "merge2": "^1.4.1",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@typescript-eslint/parser/node_modules/slash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/@typescript-eslint/scope-manager": {
       "version": "7.18.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
@@ -4432,74 +4340,125 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz",
-      "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==",
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.2.0.tgz",
+      "integrity": "sha512-g1CfXGFMQdT5S+0PSO0fvGXUaiSkl73U1n9LTK5aRAFnPlJ8dLKkXr4AaLFvPedW8lVDoMgLLE3JN98ZZfsj0w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "7.18.0",
-        "@typescript-eslint/utils": "7.18.0",
+        "@typescript-eslint/typescript-estree": "8.2.0",
+        "@typescript-eslint/utils": "8.2.0",
         "debug": "^4.3.4",
         "ts-api-utils": "^1.3.0"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
-      "peerDependencies": {
-        "eslint": "^8.56.0"
-      },
       "peerDependenciesMeta": {
         "typescript": {
           "optional": true
         }
       }
     },
-    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
-      "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
+    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz",
+      "integrity": "sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==",
       "dev": true,
-      "license": "MIT",
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "@typescript-eslint/types": "8.2.0",
+        "@typescript-eslint/visitor-keys": "8.2.0",
+        "debug": "^4.3.4",
+        "globby": "^11.1.0",
+        "is-glob": "^4.0.3",
+        "minimatch": "^9.0.4",
+        "semver": "^7.6.0",
+        "ts-api-utils": "^1.3.0"
+      },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
-      "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
+    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz",
+      "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "7.18.0",
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/typescript-estree": "7.18.0"
+        "@typescript-eslint/types": "8.2.0",
+        "eslint-visitor-keys": "^3.4.3"
       },
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
-      "peerDependencies": {
-        "eslint": "^8.56.0"
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils/node_modules/globby": {
+      "version": "11.1.0",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "array-union": "^2.1.0",
+        "dir-glob": "^3.0.1",
+        "fast-glob": "^3.2.9",
+        "ignore": "^5.2.0",
+        "merge2": "^1.4.1",
+        "slash": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils/node_modules/slash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.1.0.tgz",
-      "integrity": "sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==",
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.2.0.tgz",
+      "integrity": "sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -4585,16 +4544,16 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.1.0.tgz",
-      "integrity": "sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA==",
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.2.0.tgz",
+      "integrity": "sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "8.1.0",
-        "@typescript-eslint/types": "8.1.0",
-        "@typescript-eslint/typescript-estree": "8.1.0"
+        "@typescript-eslint/scope-manager": "8.2.0",
+        "@typescript-eslint/types": "8.2.0",
+        "@typescript-eslint/typescript-estree": "8.2.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4608,14 +4567,14 @@
       }
     },
     "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.1.0.tgz",
-      "integrity": "sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==",
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz",
+      "integrity": "sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.1.0",
-        "@typescript-eslint/visitor-keys": "8.1.0"
+        "@typescript-eslint/types": "8.2.0",
+        "@typescript-eslint/visitor-keys": "8.2.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4626,14 +4585,14 @@
       }
     },
     "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.1.0.tgz",
-      "integrity": "sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==",
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz",
+      "integrity": "sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "@typescript-eslint/types": "8.1.0",
-        "@typescript-eslint/visitor-keys": "8.1.0",
+        "@typescript-eslint/types": "8.2.0",
+        "@typescript-eslint/visitor-keys": "8.2.0",
         "debug": "^4.3.4",
         "globby": "^11.1.0",
         "is-glob": "^4.0.3",
@@ -4655,13 +4614,13 @@
       }
     },
     "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.1.0.tgz",
-      "integrity": "sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==",
+      "version": "8.2.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz",
+      "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.1.0",
+        "@typescript-eslint/types": "8.2.0",
         "eslint-visitor-keys": "^3.4.3"
       },
       "engines": {
diff --git a/print/package.json b/print/package.json
index 2c172ba213..1e1ded864f 100644
--- a/print/package.json
+++ b/print/package.json
@@ -35,7 +35,7 @@
     "@nuxtjs/i18n": "8.5.0",
     "@nuxtjs/tailwindcss": "6.12.1",
     "@tailwindcss/typography": "0.5.14",
-    "@typescript-eslint/eslint-plugin": "7.18.0",
+    "@typescript-eslint/eslint-plugin": "8.2.0",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/compiler-dom": "3.4.38",
     "@vue/compiler-sfc": "3.4.38",

From fd3ab744dd3a3bb6fe644d707268bbc36cfef4e0 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 19 Aug 2024 21:59:20 +0000
Subject: [PATCH 083/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.33

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index d821f8896e..f01aff4df0 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.32
+    image: amazon/aws-cli:2.17.33
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From 7ac7775b28e8cfecfe0f53fc9fb63f1d68cc6ec0 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 20 Aug 2024 14:54:02 +0000
Subject: [PATCH 084/273] chore(deps): update dependency vite to v5.4.2

---
 frontend/package-lock.json | 10 +++++-----
 frontend/package.json      |  2 +-
 pdf/package-lock.json      | 10 +++++-----
 pdf/package.json           |  2 +-
 4 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 2bb758ba9d..15fee98423 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -103,7 +103,7 @@
         "prettier": "3.3.3",
         "sass": "1.32.13",
         "unplugin-vue-components": "0.27.4",
-        "vite": "5.4.1",
+        "vite": "5.4.2",
         "vite-plugin-comlink": "5.0.1",
         "vite-plugin-vue2-svg": "0.4.0",
         "vitest": "2.0.5",
@@ -12780,15 +12780,15 @@
       }
     },
     "node_modules/vite": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz",
-      "integrity": "sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==",
+      "version": "5.4.2",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz",
+      "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
         "postcss": "^8.4.41",
-        "rollup": "^4.13.0"
+        "rollup": "^4.20.0"
       },
       "bin": {
         "vite": "bin/vite.js"
diff --git a/frontend/package.json b/frontend/package.json
index b70313e729..83e5bb9fe3 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -115,7 +115,7 @@
     "prettier": "3.3.3",
     "sass": "1.32.13",
     "unplugin-vue-components": "0.27.4",
-    "vite": "5.4.1",
+    "vite": "5.4.2",
     "vite-plugin-comlink": "5.0.1",
     "vite-plugin-vue2-svg": "0.4.0",
     "vitest": "2.0.5",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index ac408f1a7d..e7e0dc00ea 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -36,7 +36,7 @@
         "jsdom": "24.1.1",
         "prettier": "3.3.3",
         "url-template": "3.1.1",
-        "vite": "5.4.1",
+        "vite": "5.4.2",
         "vitest": "2.0.5"
       },
       "peerDependencies": {
@@ -7786,15 +7786,15 @@
       "license": "MIT"
     },
     "node_modules/vite": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz",
-      "integrity": "sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==",
+      "version": "5.4.2",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz",
+      "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
         "postcss": "^8.4.41",
-        "rollup": "^4.13.0"
+        "rollup": "^4.20.0"
       },
       "bin": {
         "vite": "bin/vite.js"
diff --git a/pdf/package.json b/pdf/package.json
index 3530fcc662..a545e50fb3 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -56,7 +56,7 @@
     "jsdom": "24.1.1",
     "prettier": "3.3.3",
     "url-template": "3.1.1",
-    "vite": "5.4.1",
+    "vite": "5.4.2",
     "vitest": "2.0.5"
   }
 }

From d2edb8cadc6fe8599539d82e4c42c6c9e020be12 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 20 Aug 2024 16:43:13 +0000
Subject: [PATCH 085/273] fix(deps): update dependency dayjs to v1.11.13

---
 frontend/package-lock.json | 18 +++++++++---------
 frontend/package.json      |  4 ++--
 pdf/package-lock.json      | 18 +++++++++---------
 pdf/package.json           |  4 ++--
 print/package-lock.json    |  8 ++++----
 print/package.json         |  2 +-
 6 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 15fee98423..4a40d201af 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -43,7 +43,7 @@
         "axios": "1.7.4",
         "colorjs.io": "0.5.2",
         "comlink": "4.4.1",
-        "dayjs": "1.11.12",
+        "dayjs": "1.11.13",
         "deepmerge": "4.3.1",
         "emoji-regex": "10.3.0",
         "file-saver": "2.0.5",
@@ -103,7 +103,7 @@
         "prettier": "3.3.3",
         "sass": "1.32.13",
         "unplugin-vue-components": "0.27.4",
-        "vite": "5.4.2",
+        "vite": "5.4.1",
         "vite-plugin-comlink": "5.0.1",
         "vite-plugin-vue2-svg": "0.4.0",
         "vitest": "2.0.5",
@@ -6206,9 +6206,9 @@
       }
     },
     "node_modules/dayjs": {
-      "version": "1.11.12",
-      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz",
-      "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==",
+      "version": "1.11.13",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
       "license": "MIT"
     },
     "node_modules/de-indent": {
@@ -12780,15 +12780,15 @@
       }
     },
     "node_modules/vite": {
-      "version": "5.4.2",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz",
-      "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==",
+      "version": "5.4.1",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz",
+      "integrity": "sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
         "postcss": "^8.4.41",
-        "rollup": "^4.20.0"
+        "rollup": "^4.13.0"
       },
       "bin": {
         "vite": "bin/vite.js"
diff --git a/frontend/package.json b/frontend/package.json
index 83e5bb9fe3..08d5b92b6d 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -55,7 +55,7 @@
     "axios": "1.7.4",
     "colorjs.io": "0.5.2",
     "comlink": "4.4.1",
-    "dayjs": "1.11.12",
+    "dayjs": "1.11.13",
     "deepmerge": "4.3.1",
     "emoji-regex": "10.3.0",
     "file-saver": "2.0.5",
@@ -115,7 +115,7 @@
     "prettier": "3.3.3",
     "sass": "1.32.13",
     "unplugin-vue-components": "0.27.4",
-    "vite": "5.4.2",
+    "vite": "5.4.1",
     "vite-plugin-comlink": "5.0.1",
     "vite-plugin-vue2-svg": "0.4.0",
     "vitest": "2.0.5",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index e7e0dc00ea..1b7980d25e 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -28,7 +28,7 @@
         "@vue/shared": "3.4.38",
         "@vue/test-utils": "2.4.6",
         "css": "3.0.0",
-        "dayjs": "1.11.12",
+        "dayjs": "1.11.13",
         "eslint": "8.57.0",
         "eslint-plugin-local-rules": "3.0.2",
         "eslint-plugin-vue": "9.27.0",
@@ -36,7 +36,7 @@
         "jsdom": "24.1.1",
         "prettier": "3.3.3",
         "url-template": "3.1.1",
-        "vite": "5.4.2",
+        "vite": "5.4.1",
         "vitest": "2.0.5"
       },
       "peerDependencies": {
@@ -4370,9 +4370,9 @@
       }
     },
     "node_modules/dayjs": {
-      "version": "1.11.12",
-      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz",
-      "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==",
+      "version": "1.11.13",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
       "dev": true,
       "license": "MIT"
     },
@@ -7786,15 +7786,15 @@
       "license": "MIT"
     },
     "node_modules/vite": {
-      "version": "5.4.2",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz",
-      "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==",
+      "version": "5.4.1",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz",
+      "integrity": "sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
         "postcss": "^8.4.41",
-        "rollup": "^4.20.0"
+        "rollup": "^4.13.0"
       },
       "bin": {
         "vite": "bin/vite.js"
diff --git a/pdf/package.json b/pdf/package.json
index a545e50fb3..ff0dd8a30f 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -48,7 +48,7 @@
     "@vue/shared": "3.4.38",
     "@vue/test-utils": "2.4.6",
     "css": "3.0.0",
-    "dayjs": "1.11.12",
+    "dayjs": "1.11.13",
     "eslint": "8.57.0",
     "eslint-plugin-local-rules": "3.0.2",
     "eslint-plugin-vue": "9.27.0",
@@ -56,7 +56,7 @@
     "jsdom": "24.1.1",
     "prettier": "3.3.3",
     "url-template": "3.1.1",
-    "vite": "5.4.2",
+    "vite": "5.4.1",
     "vitest": "2.0.5"
   }
 }
diff --git a/print/package-lock.json b/print/package-lock.json
index f24d709520..d386b191b9 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -11,7 +11,7 @@
         "@sentry/node": "8.26.0",
         "axios": "1.7.4",
         "colorjs.io": "0.5.2",
-        "dayjs": "1.11.12",
+        "dayjs": "1.11.13",
         "deepmerge": "4.3.1",
         "hal-json-vuex": "3.0.0-alpha.1",
         "isomorphic-dompurify": "2.14.0",
@@ -7347,9 +7347,9 @@
       }
     },
     "node_modules/dayjs": {
-      "version": "1.11.12",
-      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz",
-      "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==",
+      "version": "1.11.13",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
       "license": "MIT"
     },
     "node_modules/db0": {
diff --git a/print/package.json b/print/package.json
index 2c172ba213..f59ab8ea44 100644
--- a/print/package.json
+++ b/print/package.json
@@ -20,7 +20,7 @@
     "@sentry/node": "8.26.0",
     "axios": "1.7.4",
     "colorjs.io": "0.5.2",
-    "dayjs": "1.11.12",
+    "dayjs": "1.11.13",
     "deepmerge": "4.3.1",
     "hal-json-vuex": "3.0.0-alpha.1",
     "isomorphic-dompurify": "2.14.0",

From 51403a6570c019e0706973489cf9964da286f36a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 20 Aug 2024 20:14:18 +0000
Subject: [PATCH 086/273] chore(deps): update dependency vite to v5.4.2

---
 frontend/package-lock.json | 10 +++++-----
 frontend/package.json      |  2 +-
 pdf/package-lock.json      | 10 +++++-----
 pdf/package.json           |  2 +-
 4 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 4a40d201af..90e0afd674 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -103,7 +103,7 @@
         "prettier": "3.3.3",
         "sass": "1.32.13",
         "unplugin-vue-components": "0.27.4",
-        "vite": "5.4.1",
+        "vite": "5.4.2",
         "vite-plugin-comlink": "5.0.1",
         "vite-plugin-vue2-svg": "0.4.0",
         "vitest": "2.0.5",
@@ -12780,15 +12780,15 @@
       }
     },
     "node_modules/vite": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz",
-      "integrity": "sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==",
+      "version": "5.4.2",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz",
+      "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
         "postcss": "^8.4.41",
-        "rollup": "^4.13.0"
+        "rollup": "^4.20.0"
       },
       "bin": {
         "vite": "bin/vite.js"
diff --git a/frontend/package.json b/frontend/package.json
index 08d5b92b6d..7907b929d9 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -115,7 +115,7 @@
     "prettier": "3.3.3",
     "sass": "1.32.13",
     "unplugin-vue-components": "0.27.4",
-    "vite": "5.4.1",
+    "vite": "5.4.2",
     "vite-plugin-comlink": "5.0.1",
     "vite-plugin-vue2-svg": "0.4.0",
     "vitest": "2.0.5",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index 1b7980d25e..3eae42514a 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -36,7 +36,7 @@
         "jsdom": "24.1.1",
         "prettier": "3.3.3",
         "url-template": "3.1.1",
-        "vite": "5.4.1",
+        "vite": "5.4.2",
         "vitest": "2.0.5"
       },
       "peerDependencies": {
@@ -7786,15 +7786,15 @@
       "license": "MIT"
     },
     "node_modules/vite": {
-      "version": "5.4.1",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz",
-      "integrity": "sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==",
+      "version": "5.4.2",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz",
+      "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
         "postcss": "^8.4.41",
-        "rollup": "^4.13.0"
+        "rollup": "^4.20.0"
       },
       "bin": {
         "vite": "bin/vite.js"
diff --git a/pdf/package.json b/pdf/package.json
index ff0dd8a30f..4dbe2c7fe7 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -56,7 +56,7 @@
     "jsdom": "24.1.1",
     "prettier": "3.3.3",
     "url-template": "3.1.1",
-    "vite": "5.4.1",
+    "vite": "5.4.2",
     "vitest": "2.0.5"
   }
 }

From fd6bcb6b8c4eca23d7330240d62ee0dfd8f81a90 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 20 Aug 2024 23:17:42 +0000
Subject: [PATCH 087/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.34

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index f01aff4df0..770b94f0af 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.33
+    image: amazon/aws-cli:2.17.34
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From b480f45da398b9d7b67f5072fe6cfde91097f2e3 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 21 Aug 2024 08:00:35 +0000
Subject: [PATCH 088/273] fix(deps): update tiptap to v2.6.5

---
 frontend/package-lock.json | 198 ++++++++++++++++++-------------------
 frontend/package.json      |  34 +++----
 2 files changed, 116 insertions(+), 116 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 4a40d201af..81d9ced977 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -16,23 +16,23 @@
         "@react-pdf/render": "3.4.4",
         "@sentry/browser": "8.26.0",
         "@sentry/vue": "8.26.0",
-        "@tiptap/extension-bold": "2.6.4",
-        "@tiptap/extension-bubble-menu": "2.6.4",
-        "@tiptap/extension-bullet-list": "2.6.4",
-        "@tiptap/extension-document": "2.6.4",
-        "@tiptap/extension-hard-break": "2.6.4",
-        "@tiptap/extension-heading": "2.6.4",
-        "@tiptap/extension-history": "2.6.4",
-        "@tiptap/extension-italic": "2.6.4",
-        "@tiptap/extension-list-item": "2.6.4",
-        "@tiptap/extension-ordered-list": "2.6.4",
-        "@tiptap/extension-paragraph": "2.6.4",
-        "@tiptap/extension-placeholder": "2.6.4",
-        "@tiptap/extension-strike": "2.6.4",
-        "@tiptap/extension-text": "2.6.4",
-        "@tiptap/extension-underline": "2.6.4",
-        "@tiptap/pm": "2.6.4",
-        "@tiptap/vue-2": "2.6.4",
+        "@tiptap/extension-bold": "2.6.5",
+        "@tiptap/extension-bubble-menu": "2.6.5",
+        "@tiptap/extension-bullet-list": "2.6.5",
+        "@tiptap/extension-document": "2.6.5",
+        "@tiptap/extension-hard-break": "2.6.5",
+        "@tiptap/extension-heading": "2.6.5",
+        "@tiptap/extension-history": "2.6.5",
+        "@tiptap/extension-italic": "2.6.5",
+        "@tiptap/extension-list-item": "2.6.5",
+        "@tiptap/extension-ordered-list": "2.6.5",
+        "@tiptap/extension-paragraph": "2.6.5",
+        "@tiptap/extension-placeholder": "2.6.5",
+        "@tiptap/extension-strike": "2.6.5",
+        "@tiptap/extension-text": "2.6.5",
+        "@tiptap/extension-underline": "2.6.5",
+        "@tiptap/pm": "2.6.5",
+        "@tiptap/vue-2": "2.6.5",
         "@zxcvbn-ts/core": "3.0.4",
         "@zxcvbn-ts/language-common": "3.0.4",
         "@zxcvbn-ts/language-de": "3.0.2",
@@ -3979,9 +3979,9 @@
       }
     },
     "node_modules/@tiptap/core": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.6.4.tgz",
-      "integrity": "sha512-lv+JyBI+5C6C7BMLYg2bloB00HvAZkcvgO3CzmFia28Vtt1P9yhS44elvBemhUf7IP7Hu12FUzDWY+2GQqiqkw==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.6.5.tgz",
+      "integrity": "sha512-1q5gn4YB0Qm3xFxdQq40FMwjL0gj4flP3UeXHlHXHYvJtMK9ZckRJReYtTEGjRp99BJWivU0YehGdC/96f47GA==",
       "license": "MIT",
       "peer": true,
       "funding": {
@@ -3989,26 +3989,26 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/pm": "^2.6.4"
+        "@tiptap/pm": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-bold": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.6.4.tgz",
-      "integrity": "sha512-DIKUiO2aqO9D3dAQngBacWk/vYwDY13+q3t5dlawRTCIHxgV571vGb+YbcLswbWPQjOziIBc5QgwUVZLjA8OkA==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.6.5.tgz",
+      "integrity": "sha512-ey78g9YCOQi+qQ58QBFvWJVIXLQ+9isamshO9lzoc4RdtWDm+WuIUmmyoeneRcQixbVlyvOOMUf7PNKdIZHHtg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4"
+        "@tiptap/core": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-bubble-menu": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.6.4.tgz",
-      "integrity": "sha512-rtqV6d4qfoTBcXdiYYMpFi7cRhraVaLiGOrGCsHX0mNr4imDbwxVsge279X7IzyGhTvn+kprTTQG57s67Te5aA==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.6.5.tgz",
+      "integrity": "sha512-KIqZnbmIcHEg7ynkkDS7PKqHmsF45FZYeyJGXESrvxwfrvPElTtCwDeNaqmDwb000ljwW7BwiVUj5DjZCJlj2A==",
       "license": "MIT",
       "dependencies": {
         "tippy.js": "^6.3.7"
@@ -4018,40 +4018,40 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4",
-        "@tiptap/pm": "^2.6.4"
+        "@tiptap/core": "^2.6.5",
+        "@tiptap/pm": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-bullet-list": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.6.4.tgz",
-      "integrity": "sha512-SsEqWNvbcLjgPYQXWT+gm8Mdtd6SnM9kr5xdfOvfe9W1RCYi7U7SQjaYGLGQXuy3E8NDugNiG+ss2POMj4RaUQ==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.6.5.tgz",
+      "integrity": "sha512-6r1sc7voURIVU1bl6D9iBOJCHRQphQXHRzE2tLENCHdT8nlgO6wRwAIUVaps8Xkckr+WkLEeHTun+AD6bS+Q3A==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4"
+        "@tiptap/core": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-document": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.6.4.tgz",
-      "integrity": "sha512-fEQzou6J/w7GWiMqxxiwX2TEB6hgjBsImkHCxU05a4IOnIkzC8C9pV+NWa8u1LGvbERmVPBQqWYJG6phDhtYkg==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.6.5.tgz",
+      "integrity": "sha512-3rjyNAW8yAm4jrD8AsD39n/FXZ0PMkqbEN0Uzt4RCfK0Kbi8UcTYgcRCgo+HneqqtUAK/d+5imcbdTP6R2lTCg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4"
+        "@tiptap/core": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-floating-menu": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.6.4.tgz",
-      "integrity": "sha512-oF5utOabYQ/a0Mpt3RS21NKtz2Kd8jnwHOw+4nMgis8Crb0eO5gizWqWMyktLU7oVFU/v8CKTqMBJOAmF4a+eA==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.6.5.tgz",
+      "integrity": "sha512-RrGNBvpvklZH5n3iIeTgrKVH07n6ozb7IZ60T5idhxedWBtvbEAou3Y9XlCqOhNgooHiCqWkiV4dPngk51G2Yg==",
       "license": "MIT",
       "dependencies": {
         "tippy.js": "^6.3.7"
@@ -4061,159 +4061,159 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4",
-        "@tiptap/pm": "^2.6.4"
+        "@tiptap/core": "^2.6.5",
+        "@tiptap/pm": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-hard-break": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.6.4.tgz",
-      "integrity": "sha512-kBGGSBtp9oQlRBH7PfRvhbrauEphiJEuFUP9n/amAbrrNSabwmvBgyMl6wFXgMdfHF6CSv2YDgndE1sk8SjPSg==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.6.5.tgz",
+      "integrity": "sha512-5DcI6hDm3pw5I1jWwzNo/tx/2Nx+as4Nl6Stk3tJO1WPKCWPWouyR62EHyzhgMqcPFKRUWtWpeHag2rGDoY4Bw==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4"
+        "@tiptap/core": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-heading": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.6.4.tgz",
-      "integrity": "sha512-GHwDguzRXRrB5htGPx6T0f0uN9RPAkjbjrl28T7LFXX5Lb2XO+Esr1l4LNsTU49H4wR9nL/89ZjEcd36BUWkog==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.6.5.tgz",
+      "integrity": "sha512-H7WqddzURXUptUznPWqW988mVK1HwghSwKYNTvcw3BHUI6nbVK2UJQyZUV3+XDDru2W77lXwvmBTw8xglPkHlg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4"
+        "@tiptap/core": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-history": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.6.4.tgz",
-      "integrity": "sha512-Hr3SrvMsyDHKcsF4u3QPdY/NBYG9V0g5pPmZs/tdysXot3NUdkEYowjs9K9o5osKom364KjxQS0c9mOjyeKu1g==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.6.5.tgz",
+      "integrity": "sha512-zDCXiVKfqii0D+Q9lu65skW3+4Jqzicge+sw42YBQp4H7jXLJC55QoLuctwhl4iGXliiWnobRpotTPdaUXYhoA==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4",
-        "@tiptap/pm": "^2.6.4"
+        "@tiptap/core": "^2.6.5",
+        "@tiptap/pm": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-italic": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.6.4.tgz",
-      "integrity": "sha512-XG/zaKVuorKr1vGEWEgLQTnQwOpNn/JyGxO7oC7wfYx5eYpbbCtMTEMvuqNvkm7kpvVAUx3ugi/D8DWyWZEtYg==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.6.5.tgz",
+      "integrity": "sha512-g+OC1KcgKu3xhaydTRDcw/Ydr+EEAVLelmtwNILv5UfypFDvcYZRQNqF5/m2ZJ6kjtXQQ8whC3ddMGUgxs29Bg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4"
+        "@tiptap/core": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-list-item": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.6.4.tgz",
-      "integrity": "sha512-NLP0nshX8eCZMLospdCsUApUQHPL1+T/MIi/Hhr0aNeaAg7KwBNH8/rFPuxPNs4BQkHOCuYq4Fm+klkebkFYJA==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.6.5.tgz",
+      "integrity": "sha512-Ks/m2spl3t3pX8W23H1clq0CQ2cGrLKdPxpSn3DAbZxYjT3SF7jpJaG3e+MKKh84PcjY0Xa3FextuLFRSLlgOw==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4"
+        "@tiptap/core": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-ordered-list": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.6.4.tgz",
-      "integrity": "sha512-ecAEFpRKZc+b3f54EGvaRp7hsVza2i1nRhxHoPElqVR5DiCCSuSgAPCsKhUUT1rKweK9h56HiC4xswAyFrU5Ag==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.6.5.tgz",
+      "integrity": "sha512-brTZiwS3Lg3bFXCJABfJ1UOLiX08BNnWw/mOBYuKsnBvIPJQpJ98C1galnX77ihsjFtAUdVdm7xlwcX2q5x8Yg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4"
+        "@tiptap/core": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-paragraph": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.6.4.tgz",
-      "integrity": "sha512-JVlvhZPzjz0Q+29KmnrmLr3A3SvAMfKOZxbZZVnzee6vtI6rqjdYGBOtyyyWwrAliNQB6GkHiKmT3GxH76dz7A==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.6.5.tgz",
+      "integrity": "sha512-RGevQMVpqTxuU9Gz2G4STOVcqoP9i9Fc0QurM/B0mDjs5onzCCJLd6qIqxuT7WfFYILe8q3QIu8KB+XGmvmobQ==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4"
+        "@tiptap/core": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-placeholder": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.6.4.tgz",
-      "integrity": "sha512-2F6gmVDtXfXRU6G4aE+vSZYtkwuaJLZE2r4B8/t83ei1z+elnNT2SWD3Dy5K3zDXhBupvqcMFKgjMnIlUXG0QA==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.6.5.tgz",
+      "integrity": "sha512-ysPt++WIN9j57lQJFk5UmKK1lPMrbREAB206VrOqDmsehThegpgl4rRWQP6G4AUr+ieytYPV49vjJtZQGxo3WA==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4",
-        "@tiptap/pm": "^2.6.4"
+        "@tiptap/core": "^2.6.5",
+        "@tiptap/pm": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-strike": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.6.4.tgz",
-      "integrity": "sha512-EV4hEA5qnRtKViaLKcucFvXP9xEUJOFgpFeOrp2xIgSXJLSmutkaDfz7nxJ2RLzwwYvPfWUL7ay97JSCzSuaIA==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.6.5.tgz",
+      "integrity": "sha512-ehA++vHPMmLNhfjKFDHJR6FAh3wziIfehaZShuvkjlF7mryTa19y7KJem+8d0wv2w5AwoFOMBJmC7EBXyG0boQ==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4"
+        "@tiptap/core": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-text": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.6.4.tgz",
-      "integrity": "sha512-QfspuCTTpmFrSLbDs2z/0W7GLaoNanwj4OCKPSPz5XcraZJgFLsWAqZxZE4aLgZbJH2hcGWMe5ZHmvLf5dJogw==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.6.5.tgz",
+      "integrity": "sha512-ItYw4K2EjP4yNBP2BVa77kimdvpsEqDy0Iic+d46F3SM60wLMhp1qmauZhwk5oo89sDuMz3DI0p+R4lI43wprA==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4"
+        "@tiptap/core": "^2.6.5"
       }
     },
     "node_modules/@tiptap/extension-underline": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.6.4.tgz",
-      "integrity": "sha512-1MSCmX4L2l8DKqIJ6BLMp/XUzWK1lW+BI1+rLBd4N/kU8CdF5UqjWFijsu3UBCibV/fliyAzCoLoKO/lHRUUcA==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.6.5.tgz",
+      "integrity": "sha512-OUkCVviAe1m5j0xZZHDdNhX4kd7TpasWJn9TvEhAoE9zCaCn54T1xSFGWq61Eu4qICn+KPjgWXWOGwniKEIrKg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4"
+        "@tiptap/core": "^2.6.5"
       }
     },
     "node_modules/@tiptap/pm": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.6.4.tgz",
-      "integrity": "sha512-k/AyigUioZVxFTcF7kWcUh5xeOV0bdGzHz+wmtP33md2jo8SJP29yEZ4Kshvk0IcFnVFEDrsfKiGhLRWpKx+YQ==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.6.5.tgz",
+      "integrity": "sha512-5n7O7MdVATwJTNMs5mW0qngtIfaxzBXnkO6gaQj169HgmDHKA0ST60r/G6r6yQ/QU6UCt6ey9Stgr7ko1eU1NQ==",
       "license": "MIT",
       "dependencies": {
         "prosemirror-changeset": "^2.2.1",
@@ -4241,13 +4241,13 @@
       }
     },
     "node_modules/@tiptap/vue-2": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@tiptap/vue-2/-/vue-2-2.6.4.tgz",
-      "integrity": "sha512-NHd+IuJ1Mp7gmXbk6xNREwjsZa1pTKRwTvXLSJDNQscQrdvuyexa8lkljrzpdC6dvDqlsYPCR5yDlDIJPn8M6g==",
+      "version": "2.6.5",
+      "resolved": "https://registry.npmjs.org/@tiptap/vue-2/-/vue-2-2.6.5.tgz",
+      "integrity": "sha512-ImRX66HystlljLGeQQErC2Y+32dcxsMM/3zIdGXaSIpt1ZF7iQkeC55UF8pR5u8Nbpgf13XqTZJUOPI7z3B2xw==",
       "license": "MIT",
       "dependencies": {
-        "@tiptap/extension-bubble-menu": "^2.6.4",
-        "@tiptap/extension-floating-menu": "^2.6.4",
+        "@tiptap/extension-bubble-menu": "^2.6.5",
+        "@tiptap/extension-floating-menu": "^2.6.5",
         "vue-ts-types": "^1.6.0"
       },
       "funding": {
@@ -4255,8 +4255,8 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.4",
-        "@tiptap/pm": "^2.6.4",
+        "@tiptap/core": "^2.6.5",
+        "@tiptap/pm": "^2.6.5",
         "vue": "^2.6.0"
       }
     },
diff --git a/frontend/package.json b/frontend/package.json
index 08d5b92b6d..b342c50f7e 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -28,23 +28,23 @@
     "@react-pdf/render": "3.4.4",
     "@sentry/browser": "8.26.0",
     "@sentry/vue": "8.26.0",
-    "@tiptap/extension-bold": "2.6.4",
-    "@tiptap/extension-bubble-menu": "2.6.4",
-    "@tiptap/extension-bullet-list": "2.6.4",
-    "@tiptap/extension-document": "2.6.4",
-    "@tiptap/extension-hard-break": "2.6.4",
-    "@tiptap/extension-heading": "2.6.4",
-    "@tiptap/extension-history": "2.6.4",
-    "@tiptap/extension-italic": "2.6.4",
-    "@tiptap/extension-list-item": "2.6.4",
-    "@tiptap/extension-ordered-list": "2.6.4",
-    "@tiptap/extension-paragraph": "2.6.4",
-    "@tiptap/extension-placeholder": "2.6.4",
-    "@tiptap/extension-strike": "2.6.4",
-    "@tiptap/extension-text": "2.6.4",
-    "@tiptap/extension-underline": "2.6.4",
-    "@tiptap/pm": "2.6.4",
-    "@tiptap/vue-2": "2.6.4",
+    "@tiptap/extension-bold": "2.6.5",
+    "@tiptap/extension-bubble-menu": "2.6.5",
+    "@tiptap/extension-bullet-list": "2.6.5",
+    "@tiptap/extension-document": "2.6.5",
+    "@tiptap/extension-hard-break": "2.6.5",
+    "@tiptap/extension-heading": "2.6.5",
+    "@tiptap/extension-history": "2.6.5",
+    "@tiptap/extension-italic": "2.6.5",
+    "@tiptap/extension-list-item": "2.6.5",
+    "@tiptap/extension-ordered-list": "2.6.5",
+    "@tiptap/extension-paragraph": "2.6.5",
+    "@tiptap/extension-placeholder": "2.6.5",
+    "@tiptap/extension-strike": "2.6.5",
+    "@tiptap/extension-text": "2.6.5",
+    "@tiptap/extension-underline": "2.6.5",
+    "@tiptap/pm": "2.6.5",
+    "@tiptap/vue-2": "2.6.5",
     "@zxcvbn-ts/core": "3.0.4",
     "@zxcvbn-ts/language-common": "3.0.4",
     "@zxcvbn-ts/language-de": "3.0.2",

From 0ce6dc4cb9224dc4398f941b09e7689aeaaf5a4f Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 21 Aug 2024 12:24:13 +0000
Subject: [PATCH 089/273] fix(deps): update dependency puppeteer-core to v23

---
 print/package-lock.json | 33 ++++++++++++++++++++-------------
 print/package.json      |  2 +-
 2 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index d386b191b9..76a58ad2cf 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -16,7 +16,7 @@
         "hal-json-vuex": "3.0.0-alpha.1",
         "isomorphic-dompurify": "2.14.0",
         "lodash": "4.17.21",
-        "puppeteer-core": "22.15.0",
+        "puppeteer-core": "23.1.1",
         "runes": "0.4.3",
         "vuex": "4.1.0"
       },
@@ -3318,12 +3318,12 @@
       }
     },
     "node_modules/@puppeteer/browsers": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.3.0.tgz",
-      "integrity": "sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.3.1.tgz",
+      "integrity": "sha512-uK7o3hHkK+naEobMSJ+2ySYyXtQkBxIH8Gn4MK9ciePjNV+Pf+PgY/W7iPzn2MTjl3stcYB5AlcTmPYw7AXDwA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "debug": "^4.3.5",
+        "debug": "^4.3.6",
         "extract-zip": "^2.0.1",
         "progress": "^2.0.3",
         "proxy-agent": "^6.4.0",
@@ -6552,9 +6552,9 @@
       }
     },
     "node_modules/chromium-bidi": {
-      "version": "0.6.3",
-      "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.3.tgz",
-      "integrity": "sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==",
+      "version": "0.6.4",
+      "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.4.tgz",
+      "integrity": "sha512-8zoq6ogmhQQkAKZVKO2ObFTl4uOkqoX1PlKQX3hZQ5E9cbUotcAb7h4pTNVAGGv8Z36PF3CtdOriEp/Rz82JqQ==",
       "license": "Apache-2.0",
       "dependencies": {
         "mitt": "3.0.1",
@@ -14017,15 +14017,16 @@
       }
     },
     "node_modules/puppeteer-core": {
-      "version": "22.15.0",
-      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.15.0.tgz",
-      "integrity": "sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==",
+      "version": "23.1.1",
+      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.1.1.tgz",
+      "integrity": "sha512-OeTqNiYGF9qZtwZU4Yc88DDqFJs4TJ4rnK81jkillh6MwDeQodyisM9xe5lBmPhwiDy92s5J5DQtQLjCKHFQ3g==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@puppeteer/browsers": "2.3.0",
-        "chromium-bidi": "0.6.3",
+        "@puppeteer/browsers": "2.3.1",
+        "chromium-bidi": "0.6.4",
         "debug": "^4.3.6",
         "devtools-protocol": "0.0.1312386",
+        "typed-query-selector": "^2.12.0",
         "ws": "^8.18.0"
       },
       "engines": {
@@ -16415,6 +16416,12 @@
         "node": ">= 0.6"
       }
     },
+    "node_modules/typed-query-selector": {
+      "version": "2.12.0",
+      "resolved": "https://registry.npmjs.org/typed-query-selector/-/typed-query-selector-2.12.0.tgz",
+      "integrity": "sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==",
+      "license": "MIT"
+    },
     "node_modules/typescript": {
       "version": "5.5.4",
       "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
diff --git a/print/package.json b/print/package.json
index f59ab8ea44..aa285091ee 100644
--- a/print/package.json
+++ b/print/package.json
@@ -25,7 +25,7 @@
     "hal-json-vuex": "3.0.0-alpha.1",
     "isomorphic-dompurify": "2.14.0",
     "lodash": "4.17.21",
-    "puppeteer-core": "22.15.0",
+    "puppeteer-core": "23.1.1",
     "runes": "0.4.3",
     "vuex": "4.1.0"
   },

From f34090464142b5c751a6a75d67dafe0fa5c0d156 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Mon, 12 Aug 2024 22:37:19 +0200
Subject: [PATCH 090/273] aws-setup: do not check css and scss in
 lint:check:prettier

They do not exist and are not formatted.
---
 .ops/aws-setup/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index e2c5850d52..65b6ed5394 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -7,7 +7,7 @@
         "lint:prettier": "prettier --write --ignore-path .prettierignore **/*.{json,md}",
         "lint:check": "npm run lint:check:eslint && npm run lint:check:prettier",
         "lint:check:eslint": "eslint --no-fix --ext .ts,.js --ignore-path .gitignore .",
-        "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json,md}"
+        "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{json,md}"
     },
     "dependencies": {
         "@pulumi/pulumi": "3.129.0",

From 852c6cdfe1918ac1ac1e26d9af8828ffe1313de4 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Mon, 12 Aug 2024 22:43:46 +0200
Subject: [PATCH 091/273] aws-setup: dump current eslint config

with
node_modules/.bin/eslint --print-config index.ts | jq '.rules' --sort-keys --raw-output > eslint-config-ts.json
That we are sure that the config did not change during the migration.
---
 .ops/aws-setup/eslint-config-ts.json | 247 +++++++++++++++++++++++++++
 1 file changed, 247 insertions(+)
 create mode 100644 .ops/aws-setup/eslint-config-ts.json

diff --git a/.ops/aws-setup/eslint-config-ts.json b/.ops/aws-setup/eslint-config-ts.json
new file mode 100644
index 0000000000..744d74d751
--- /dev/null
+++ b/.ops/aws-setup/eslint-config-ts.json
@@ -0,0 +1,247 @@
+{
+  "@babel/object-curly-spacing": ["off"],
+  "@babel/semi": ["off"],
+  "@typescript-eslint/block-spacing": ["off"],
+  "@typescript-eslint/brace-style": ["off"],
+  "@typescript-eslint/comma-dangle": ["off"],
+  "@typescript-eslint/comma-spacing": ["off"],
+  "@typescript-eslint/func-call-spacing": ["off"],
+  "@typescript-eslint/indent": ["off"],
+  "@typescript-eslint/key-spacing": ["off"],
+  "@typescript-eslint/keyword-spacing": ["off"],
+  "@typescript-eslint/lines-around-comment": [0],
+  "@typescript-eslint/member-delimiter-style": ["off"],
+  "@typescript-eslint/no-extra-parens": ["off"],
+  "@typescript-eslint/no-extra-semi": ["off"],
+  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/quotes": [0],
+  "@typescript-eslint/semi": ["off"],
+  "@typescript-eslint/space-before-blocks": ["off"],
+  "@typescript-eslint/space-before-function-paren": ["off"],
+  "@typescript-eslint/space-infix-ops": ["off"],
+  "@typescript-eslint/type-annotation-spacing": ["off"],
+  "array-bracket-newline": ["off"],
+  "array-bracket-spacing": ["off"],
+  "array-element-newline": ["off"],
+  "arrow-body-style": ["off"],
+  "arrow-parens": ["off"],
+  "arrow-spacing": ["off"],
+  "babel/object-curly-spacing": ["off"],
+  "babel/quotes": [0],
+  "babel/semi": ["off"],
+  "block-spacing": ["off"],
+  "brace-style": ["off"],
+  "comma-dangle": ["off"],
+  "comma-spacing": ["off"],
+  "comma-style": ["off"],
+  "computed-property-spacing": ["off"],
+  "constructor-super": ["error"],
+  "curly": [0],
+  "dot-location": ["off"],
+  "eol-last": ["off"],
+  "flowtype/boolean-style": ["off"],
+  "flowtype/delimiter-dangle": ["off"],
+  "flowtype/generic-spacing": ["off"],
+  "flowtype/object-type-curly-spacing": ["off"],
+  "flowtype/object-type-delimiter": ["off"],
+  "flowtype/quotes": ["off"],
+  "flowtype/semi": ["off"],
+  "flowtype/space-after-type-colon": ["off"],
+  "flowtype/space-before-generic-bracket": ["off"],
+  "flowtype/space-before-type-colon": ["off"],
+  "flowtype/union-intersection-spacing": ["off"],
+  "for-direction": ["error"],
+  "func-call-spacing": ["off"],
+  "function-call-argument-newline": ["off"],
+  "function-paren-newline": ["off"],
+  "generator-star": ["off"],
+  "generator-star-spacing": ["off"],
+  "getter-return": ["error"],
+  "implicit-arrow-linebreak": ["off"],
+  "indent": ["off"],
+  "indent-legacy": ["off"],
+  "jsx-quotes": ["off"],
+  "key-spacing": ["off"],
+  "keyword-spacing": ["off"],
+  "linebreak-style": ["off"],
+  "lines-around-comment": [0],
+  "max-len": [0],
+  "max-statements-per-line": ["off"],
+  "multiline-ternary": ["off"],
+  "new-parens": ["off"],
+  "newline-per-chained-call": ["off"],
+  "no-arrow-condition": ["off"],
+  "no-async-promise-executor": ["error"],
+  "no-case-declarations": ["error"],
+  "no-class-assign": ["error"],
+  "no-comma-dangle": ["off"],
+  "no-compare-neg-zero": ["error"],
+  "no-cond-assign": ["error"],
+  "no-confusing-arrow": [0],
+  "no-const-assign": ["error"],
+  "no-constant-condition": ["error"],
+  "no-control-regex": ["error"],
+  "no-debugger": ["error"],
+  "no-delete-var": ["error"],
+  "no-dupe-args": ["error"],
+  "no-dupe-class-members": ["error"],
+  "no-dupe-else-if": ["error"],
+  "no-dupe-keys": ["error"],
+  "no-duplicate-case": ["error"],
+  "no-empty": ["error"],
+  "no-empty-character-class": ["error"],
+  "no-empty-pattern": ["error"],
+  "no-ex-assign": ["error"],
+  "no-extra-boolean-cast": ["error"],
+  "no-extra-parens": ["off"],
+  "no-extra-semi": ["off"],
+  "no-fallthrough": ["error"],
+  "no-floating-decimal": ["off"],
+  "no-func-assign": ["error"],
+  "no-global-assign": ["error"],
+  "no-import-assign": ["error"],
+  "no-inner-declarations": ["error"],
+  "no-invalid-regexp": ["error"],
+  "no-irregular-whitespace": ["error"],
+  "no-loss-of-precision": ["error"],
+  "no-misleading-character-class": ["error"],
+  "no-mixed-operators": [0],
+  "no-mixed-spaces-and-tabs": ["off"],
+  "no-multi-spaces": ["off"],
+  "no-multiple-empty-lines": ["off"],
+  "no-new-symbol": ["error"],
+  "no-nonoctal-decimal-escape": ["error"],
+  "no-obj-calls": ["error"],
+  "no-octal": ["error"],
+  "no-prototype-builtins": ["error"],
+  "no-redeclare": ["error"],
+  "no-regex-spaces": ["error"],
+  "no-reserved-keys": ["off"],
+  "no-self-assign": ["error"],
+  "no-setter-return": ["error"],
+  "no-shadow-restricted-names": ["error"],
+  "no-space-before-semi": ["off"],
+  "no-spaced-func": ["off"],
+  "no-sparse-arrays": ["error"],
+  "no-tabs": [0],
+  "no-this-before-super": ["error"],
+  "no-trailing-spaces": ["off"],
+  "no-undef": ["error"],
+  "no-unexpected-multiline": [0],
+  "no-unreachable": ["error"],
+  "no-unsafe-finally": ["error"],
+  "no-unsafe-negation": ["error"],
+  "no-unsafe-optional-chaining": ["error"],
+  "no-unused-labels": ["error"],
+  "no-unused-vars": [
+    "error",
+    {
+      "argsIgnorePattern": "^_$"
+    }
+  ],
+  "no-useless-backreference": ["error"],
+  "no-useless-catch": ["error"],
+  "no-useless-escape": ["error"],
+  "no-whitespace-before-property": ["off"],
+  "no-with": ["error"],
+  "no-wrap-func": ["off"],
+  "nonblock-statement-body-position": ["off"],
+  "object-curly-newline": ["off"],
+  "object-curly-spacing": ["off"],
+  "object-property-newline": ["off"],
+  "one-var-declaration-per-line": ["off"],
+  "operator-linebreak": ["off"],
+  "padded-blocks": ["off"],
+  "prefer-arrow-callback": ["off"],
+  "prefer-const": ["error"],
+  "prettier/prettier": ["error"],
+  "quote-props": ["off"],
+  "quotes": [0],
+  "react/jsx-child-element-spacing": ["off"],
+  "react/jsx-closing-bracket-location": ["off"],
+  "react/jsx-closing-tag-location": ["off"],
+  "react/jsx-curly-newline": ["off"],
+  "react/jsx-curly-spacing": ["off"],
+  "react/jsx-equals-spacing": ["off"],
+  "react/jsx-first-prop-new-line": ["off"],
+  "react/jsx-indent": ["off"],
+  "react/jsx-indent-props": ["off"],
+  "react/jsx-max-props-per-line": ["off"],
+  "react/jsx-newline": ["off"],
+  "react/jsx-one-expression-per-line": ["off"],
+  "react/jsx-props-no-multi-spaces": ["off"],
+  "react/jsx-space-before-closing": ["off"],
+  "react/jsx-tag-spacing": ["off"],
+  "react/jsx-wrap-multilines": ["off"],
+  "require-yield": ["error"],
+  "rest-spread-spacing": ["off"],
+  "semi": ["off"],
+  "semi-spacing": ["off"],
+  "semi-style": ["off"],
+  "space-after-function-name": ["off"],
+  "space-after-keywords": ["off"],
+  "space-before-blocks": ["off"],
+  "space-before-function-paren": ["off"],
+  "space-before-function-parentheses": ["off"],
+  "space-before-keywords": ["off"],
+  "space-in-brackets": ["off"],
+  "space-in-parens": ["off"],
+  "space-infix-ops": ["off"],
+  "space-return-throw-case": ["off"],
+  "space-unary-ops": ["off"],
+  "space-unary-word-ops": ["off"],
+  "standard/array-bracket-even-spacing": ["off"],
+  "standard/computed-property-even-spacing": ["off"],
+  "standard/object-curly-even-spacing": ["off"],
+  "switch-colon-spacing": ["off"],
+  "template-curly-spacing": ["off"],
+  "template-tag-spacing": ["off"],
+  "unicorn/empty-brace-spaces": ["off"],
+  "unicorn/no-nested-ternary": ["off"],
+  "unicorn/number-literal-case": ["off"],
+  "unicorn/template-indent": [0],
+  "use-isnan": ["error"],
+  "valid-typeof": ["error"],
+  "vue/array-bracket-newline": ["off"],
+  "vue/array-bracket-spacing": ["off"],
+  "vue/array-element-newline": ["off"],
+  "vue/arrow-spacing": ["off"],
+  "vue/block-spacing": ["off"],
+  "vue/block-tag-newline": ["off"],
+  "vue/brace-style": ["off"],
+  "vue/comma-dangle": ["off"],
+  "vue/comma-spacing": ["off"],
+  "vue/comma-style": ["off"],
+  "vue/dot-location": ["off"],
+  "vue/func-call-spacing": ["off"],
+  "vue/html-closing-bracket-newline": ["off"],
+  "vue/html-closing-bracket-spacing": ["off"],
+  "vue/html-end-tags": ["off"],
+  "vue/html-indent": ["off"],
+  "vue/html-quotes": ["off"],
+  "vue/html-self-closing": [0],
+  "vue/key-spacing": ["off"],
+  "vue/keyword-spacing": ["off"],
+  "vue/max-attributes-per-line": ["off"],
+  "vue/max-len": [0],
+  "vue/multiline-html-element-content-newline": ["off"],
+  "vue/multiline-ternary": ["off"],
+  "vue/mustache-interpolation-spacing": ["off"],
+  "vue/no-extra-parens": ["off"],
+  "vue/no-multi-spaces": ["off"],
+  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
+  "vue/object-curly-newline": ["off"],
+  "vue/object-curly-spacing": ["off"],
+  "vue/object-property-newline": ["off"],
+  "vue/operator-linebreak": ["off"],
+  "vue/quote-props": ["off"],
+  "vue/script-indent": ["off"],
+  "vue/singleline-html-element-content-newline": ["off"],
+  "vue/space-in-parens": ["off"],
+  "vue/space-infix-ops": ["off"],
+  "vue/space-unary-ops": ["off"],
+  "vue/template-curly-spacing": ["off"],
+  "wrap-iife": ["off"],
+  "wrap-regex": ["off"],
+  "yield-star-spacing": ["off"]
+}

From 482605cfdbb043af625317c8ab66015f0ddd51ff Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Mon, 12 Aug 2024 22:45:28 +0200
Subject: [PATCH 092/273] aws-setup: move eslint config to .eslintrc.json

The config migrator needs the configuration to
be in a separate file.
https://eslint.org/blog/2024/05/eslint-configuration-migrator/
---
 .ops/aws-setup/.eslintrc.json | 22 ++++++++++++++++++++++
 .ops/aws-setup/package.json   | 26 --------------------------
 2 files changed, 22 insertions(+), 26 deletions(-)
 create mode 100644 .ops/aws-setup/.eslintrc.json

diff --git a/.ops/aws-setup/.eslintrc.json b/.ops/aws-setup/.eslintrc.json
new file mode 100644
index 0000000000..ab552712f9
--- /dev/null
+++ b/.ops/aws-setup/.eslintrc.json
@@ -0,0 +1,22 @@
+{
+  "root": true,
+  "env": {
+    "node": true
+  },
+  "extends": ["eslint:recommended", "plugin:prettier/recommended", "prettier"],
+  "rules": {
+    "prefer-const": "error",
+    "prettier/prettier": "error",
+    "no-unused-vars": [
+      "error",
+      {
+        "argsIgnorePattern": "^_$"
+      }
+    ]
+  },
+  "parserOptions": {
+    "ecmaVersion": 2022,
+    "sourceType": "module",
+    "parser": "@babel/eslint-parser"
+  }
+}
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 65b6ed5394..2e3de10494 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -24,31 +24,5 @@
         "eslint-plugin-prettier": "5.2.1",
         "eslint-plugin-promise": "7.1.0",
         "prettier": "3.3.3"
-    },
-    "eslintConfig": {
-        "root": true,
-        "env": {
-            "node": true
-        },
-        "extends": [
-            "eslint:recommended",
-            "plugin:prettier/recommended",
-            "prettier"
-        ],
-        "rules": {
-            "prefer-const": "error",
-            "prettier/prettier": "error",
-            "no-unused-vars": [
-                "error",
-                {
-                    "argsIgnorePattern": "^_$"
-                }
-            ]
-        },
-        "parserOptions": {
-            "ecmaVersion": 2022,
-            "sourceType": "module",
-            "parser": "@babel/eslint-parser"
-        }
     }
 }

From 4ae22640dcd080313c44e1e50b1ea5b5b048d832 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Mon, 12 Aug 2024 22:59:18 +0200
Subject: [PATCH 093/273] aws-setup: migrate to flat config

Using npx @eslint/migrate-config .eslintrc.json
Then add the additional packages needed
(@eslint/compat, globals, @eslint/eslintrc, @eslint/js)
Add paths from the .gitignore file to the ignored patterns.
Add .mjs files to the prettier pattern that the eslint.config.mjs is also prettied.
Also lint .ts files with eslint (this seems not to be the default).
Remove the options from the call to eslint which are not
supported anymore in the package.json.

Issue: #5282
---
 .ops/aws-setup/.eslintrc.json        |  22 --
 .ops/aws-setup/eslint-config-ts.json | 454 ++++++++++++++-------------
 .ops/aws-setup/eslint.config.mjs     |  51 +++
 .ops/aws-setup/package-lock.json     | 146 ++++++---
 .ops/aws-setup/package.json          |  12 +-
 5 files changed, 398 insertions(+), 287 deletions(-)
 delete mode 100644 .ops/aws-setup/.eslintrc.json
 create mode 100644 .ops/aws-setup/eslint.config.mjs

diff --git a/.ops/aws-setup/.eslintrc.json b/.ops/aws-setup/.eslintrc.json
deleted file mode 100644
index ab552712f9..0000000000
--- a/.ops/aws-setup/.eslintrc.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-  "root": true,
-  "env": {
-    "node": true
-  },
-  "extends": ["eslint:recommended", "plugin:prettier/recommended", "prettier"],
-  "rules": {
-    "prefer-const": "error",
-    "prettier/prettier": "error",
-    "no-unused-vars": [
-      "error",
-      {
-        "argsIgnorePattern": "^_$"
-      }
-    ]
-  },
-  "parserOptions": {
-    "ecmaVersion": 2022,
-    "sourceType": "module",
-    "parser": "@babel/eslint-parser"
-  }
-}
diff --git a/.ops/aws-setup/eslint-config-ts.json b/.ops/aws-setup/eslint-config-ts.json
index 744d74d751..38e990650b 100644
--- a/.ops/aws-setup/eslint-config-ts.json
+++ b/.ops/aws-setup/eslint-config-ts.json
@@ -1,247 +1,249 @@
 {
-  "@babel/object-curly-spacing": ["off"],
-  "@babel/semi": ["off"],
-  "@typescript-eslint/block-spacing": ["off"],
-  "@typescript-eslint/brace-style": ["off"],
-  "@typescript-eslint/comma-dangle": ["off"],
-  "@typescript-eslint/comma-spacing": ["off"],
-  "@typescript-eslint/func-call-spacing": ["off"],
-  "@typescript-eslint/indent": ["off"],
-  "@typescript-eslint/key-spacing": ["off"],
-  "@typescript-eslint/keyword-spacing": ["off"],
+  "@babel/object-curly-spacing": [0],
+  "@babel/semi": [0],
+  "@typescript-eslint/block-spacing": [0],
+  "@typescript-eslint/brace-style": [0],
+  "@typescript-eslint/comma-dangle": [0],
+  "@typescript-eslint/comma-spacing": [0],
+  "@typescript-eslint/func-call-spacing": [0],
+  "@typescript-eslint/indent": [0],
+  "@typescript-eslint/key-spacing": [0],
+  "@typescript-eslint/keyword-spacing": [0],
   "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": ["off"],
-  "@typescript-eslint/no-extra-parens": ["off"],
-  "@typescript-eslint/no-extra-semi": ["off"],
-  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/member-delimiter-style": [0],
+  "@typescript-eslint/no-extra-parens": [0],
+  "@typescript-eslint/no-extra-semi": [0],
+  "@typescript-eslint/object-curly-spacing": [0],
   "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": ["off"],
-  "@typescript-eslint/space-before-blocks": ["off"],
-  "@typescript-eslint/space-before-function-paren": ["off"],
-  "@typescript-eslint/space-infix-ops": ["off"],
-  "@typescript-eslint/type-annotation-spacing": ["off"],
-  "array-bracket-newline": ["off"],
-  "array-bracket-spacing": ["off"],
-  "array-element-newline": ["off"],
-  "arrow-body-style": ["off"],
-  "arrow-parens": ["off"],
-  "arrow-spacing": ["off"],
-  "babel/object-curly-spacing": ["off"],
+  "@typescript-eslint/semi": [0],
+  "@typescript-eslint/space-before-blocks": [0],
+  "@typescript-eslint/space-before-function-paren": [0],
+  "@typescript-eslint/space-infix-ops": [0],
+  "@typescript-eslint/type-annotation-spacing": [0],
+  "array-bracket-newline": [0],
+  "array-bracket-spacing": [0],
+  "array-element-newline": [0],
+  "arrow-body-style": [0],
+  "arrow-parens": [0],
+  "arrow-spacing": [0],
+  "babel/object-curly-spacing": [0],
   "babel/quotes": [0],
-  "babel/semi": ["off"],
-  "block-spacing": ["off"],
-  "brace-style": ["off"],
-  "comma-dangle": ["off"],
-  "comma-spacing": ["off"],
-  "comma-style": ["off"],
-  "computed-property-spacing": ["off"],
-  "constructor-super": ["error"],
+  "babel/semi": [0],
+  "block-spacing": [0],
+  "brace-style": [0],
+  "comma-dangle": [0],
+  "comma-spacing": [0],
+  "comma-style": [0],
+  "computed-property-spacing": [0],
+  "constructor-super": [2],
   "curly": [0],
-  "dot-location": ["off"],
-  "eol-last": ["off"],
-  "flowtype/boolean-style": ["off"],
-  "flowtype/delimiter-dangle": ["off"],
-  "flowtype/generic-spacing": ["off"],
-  "flowtype/object-type-curly-spacing": ["off"],
-  "flowtype/object-type-delimiter": ["off"],
-  "flowtype/quotes": ["off"],
-  "flowtype/semi": ["off"],
-  "flowtype/space-after-type-colon": ["off"],
-  "flowtype/space-before-generic-bracket": ["off"],
-  "flowtype/space-before-type-colon": ["off"],
-  "flowtype/union-intersection-spacing": ["off"],
-  "for-direction": ["error"],
-  "func-call-spacing": ["off"],
-  "function-call-argument-newline": ["off"],
-  "function-paren-newline": ["off"],
-  "generator-star": ["off"],
-  "generator-star-spacing": ["off"],
-  "getter-return": ["error"],
-  "implicit-arrow-linebreak": ["off"],
-  "indent": ["off"],
-  "indent-legacy": ["off"],
-  "jsx-quotes": ["off"],
-  "key-spacing": ["off"],
-  "keyword-spacing": ["off"],
-  "linebreak-style": ["off"],
+  "dot-location": [0],
+  "eol-last": [0],
+  "flowtype/boolean-style": [0],
+  "flowtype/delimiter-dangle": [0],
+  "flowtype/generic-spacing": [0],
+  "flowtype/object-type-curly-spacing": [0],
+  "flowtype/object-type-delimiter": [0],
+  "flowtype/quotes": [0],
+  "flowtype/semi": [0],
+  "flowtype/space-after-type-colon": [0],
+  "flowtype/space-before-generic-bracket": [0],
+  "flowtype/space-before-type-colon": [0],
+  "flowtype/union-intersection-spacing": [0],
+  "for-direction": [2],
+  "func-call-spacing": [0],
+  "function-call-argument-newline": [0],
+  "function-paren-newline": [0],
+  "generator-star": [0],
+  "generator-star-spacing": [0],
+  "getter-return": [2],
+  "implicit-arrow-linebreak": [0],
+  "indent": [0],
+  "indent-legacy": [0],
+  "jsx-quotes": [0],
+  "key-spacing": [0],
+  "keyword-spacing": [0],
+  "linebreak-style": [0],
   "lines-around-comment": [0],
   "max-len": [0],
-  "max-statements-per-line": ["off"],
-  "multiline-ternary": ["off"],
-  "new-parens": ["off"],
-  "newline-per-chained-call": ["off"],
-  "no-arrow-condition": ["off"],
-  "no-async-promise-executor": ["error"],
-  "no-case-declarations": ["error"],
-  "no-class-assign": ["error"],
-  "no-comma-dangle": ["off"],
-  "no-compare-neg-zero": ["error"],
-  "no-cond-assign": ["error"],
+  "max-statements-per-line": [0],
+  "multiline-ternary": [0],
+  "new-parens": [0],
+  "newline-per-chained-call": [0],
+  "no-arrow-condition": [0],
+  "no-async-promise-executor": [2],
+  "no-case-declarations": [2],
+  "no-class-assign": [2],
+  "no-comma-dangle": [0],
+  "no-compare-neg-zero": [2],
+  "no-cond-assign": [2],
   "no-confusing-arrow": [0],
-  "no-const-assign": ["error"],
-  "no-constant-condition": ["error"],
-  "no-control-regex": ["error"],
-  "no-debugger": ["error"],
-  "no-delete-var": ["error"],
-  "no-dupe-args": ["error"],
-  "no-dupe-class-members": ["error"],
-  "no-dupe-else-if": ["error"],
-  "no-dupe-keys": ["error"],
-  "no-duplicate-case": ["error"],
-  "no-empty": ["error"],
-  "no-empty-character-class": ["error"],
-  "no-empty-pattern": ["error"],
-  "no-ex-assign": ["error"],
-  "no-extra-boolean-cast": ["error"],
-  "no-extra-parens": ["off"],
-  "no-extra-semi": ["off"],
-  "no-fallthrough": ["error"],
-  "no-floating-decimal": ["off"],
-  "no-func-assign": ["error"],
-  "no-global-assign": ["error"],
-  "no-import-assign": ["error"],
-  "no-inner-declarations": ["error"],
-  "no-invalid-regexp": ["error"],
-  "no-irregular-whitespace": ["error"],
-  "no-loss-of-precision": ["error"],
-  "no-misleading-character-class": ["error"],
+  "no-const-assign": [2],
+  "no-constant-binary-expression": [2],
+  "no-constant-condition": [2],
+  "no-control-regex": [2],
+  "no-debugger": [2],
+  "no-delete-var": [2],
+  "no-dupe-args": [2],
+  "no-dupe-class-members": [2],
+  "no-dupe-else-if": [2],
+  "no-dupe-keys": [2],
+  "no-duplicate-case": [2],
+  "no-empty": [2],
+  "no-empty-character-class": [2],
+  "no-empty-pattern": [2],
+  "no-empty-static-block": [2],
+  "no-ex-assign": [2],
+  "no-extra-boolean-cast": [2],
+  "no-extra-parens": [0],
+  "no-extra-semi": [0],
+  "no-fallthrough": [2],
+  "no-floating-decimal": [0],
+  "no-func-assign": [2],
+  "no-global-assign": [2],
+  "no-import-assign": [2],
+  "no-invalid-regexp": [2],
+  "no-irregular-whitespace": [2],
+  "no-loss-of-precision": [2],
+  "no-misleading-character-class": [2],
   "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": ["off"],
-  "no-multi-spaces": ["off"],
-  "no-multiple-empty-lines": ["off"],
-  "no-new-symbol": ["error"],
-  "no-nonoctal-decimal-escape": ["error"],
-  "no-obj-calls": ["error"],
-  "no-octal": ["error"],
-  "no-prototype-builtins": ["error"],
-  "no-redeclare": ["error"],
-  "no-regex-spaces": ["error"],
-  "no-reserved-keys": ["off"],
-  "no-self-assign": ["error"],
-  "no-setter-return": ["error"],
-  "no-shadow-restricted-names": ["error"],
-  "no-space-before-semi": ["off"],
-  "no-spaced-func": ["off"],
-  "no-sparse-arrays": ["error"],
+  "no-mixed-spaces-and-tabs": [0],
+  "no-multi-spaces": [0],
+  "no-multiple-empty-lines": [0],
+  "no-new-native-nonconstructor": [2],
+  "no-nonoctal-decimal-escape": [2],
+  "no-obj-calls": [2],
+  "no-octal": [2],
+  "no-prototype-builtins": [2],
+  "no-redeclare": [2],
+  "no-regex-spaces": [2],
+  "no-reserved-keys": [0],
+  "no-self-assign": [2],
+  "no-setter-return": [2],
+  "no-shadow-restricted-names": [2],
+  "no-space-before-semi": [0],
+  "no-spaced-func": [0],
+  "no-sparse-arrays": [2],
   "no-tabs": [0],
-  "no-this-before-super": ["error"],
-  "no-trailing-spaces": ["off"],
-  "no-undef": ["error"],
+  "no-this-before-super": [2],
+  "no-trailing-spaces": [0],
+  "no-undef": [2],
   "no-unexpected-multiline": [0],
-  "no-unreachable": ["error"],
-  "no-unsafe-finally": ["error"],
-  "no-unsafe-negation": ["error"],
-  "no-unsafe-optional-chaining": ["error"],
-  "no-unused-labels": ["error"],
+  "no-unreachable": [2],
+  "no-unsafe-finally": [2],
+  "no-unsafe-negation": [2],
+  "no-unsafe-optional-chaining": [2],
+  "no-unused-labels": [2],
+  "no-unused-private-class-members": [2],
   "no-unused-vars": [
-    "error",
+    2,
     {
       "argsIgnorePattern": "^_$"
     }
   ],
-  "no-useless-backreference": ["error"],
-  "no-useless-catch": ["error"],
-  "no-useless-escape": ["error"],
-  "no-whitespace-before-property": ["off"],
-  "no-with": ["error"],
-  "no-wrap-func": ["off"],
-  "nonblock-statement-body-position": ["off"],
-  "object-curly-newline": ["off"],
-  "object-curly-spacing": ["off"],
-  "object-property-newline": ["off"],
-  "one-var-declaration-per-line": ["off"],
-  "operator-linebreak": ["off"],
-  "padded-blocks": ["off"],
-  "prefer-arrow-callback": ["off"],
-  "prefer-const": ["error"],
-  "prettier/prettier": ["error"],
-  "quote-props": ["off"],
+  "no-useless-backreference": [2],
+  "no-useless-catch": [2],
+  "no-useless-escape": [2],
+  "no-whitespace-before-property": [0],
+  "no-with": [2],
+  "no-wrap-func": [0],
+  "nonblock-statement-body-position": [0],
+  "object-curly-newline": [0],
+  "object-curly-spacing": [0],
+  "object-property-newline": [0],
+  "one-var-declaration-per-line": [0],
+  "operator-linebreak": [0],
+  "padded-blocks": [0],
+  "prefer-arrow-callback": [0],
+  "prefer-const": [2],
+  "prettier/prettier": [2],
+  "quote-props": [0],
   "quotes": [0],
-  "react/jsx-child-element-spacing": ["off"],
-  "react/jsx-closing-bracket-location": ["off"],
-  "react/jsx-closing-tag-location": ["off"],
-  "react/jsx-curly-newline": ["off"],
-  "react/jsx-curly-spacing": ["off"],
-  "react/jsx-equals-spacing": ["off"],
-  "react/jsx-first-prop-new-line": ["off"],
-  "react/jsx-indent": ["off"],
-  "react/jsx-indent-props": ["off"],
-  "react/jsx-max-props-per-line": ["off"],
-  "react/jsx-newline": ["off"],
-  "react/jsx-one-expression-per-line": ["off"],
-  "react/jsx-props-no-multi-spaces": ["off"],
-  "react/jsx-space-before-closing": ["off"],
-  "react/jsx-tag-spacing": ["off"],
-  "react/jsx-wrap-multilines": ["off"],
-  "require-yield": ["error"],
-  "rest-spread-spacing": ["off"],
-  "semi": ["off"],
-  "semi-spacing": ["off"],
-  "semi-style": ["off"],
-  "space-after-function-name": ["off"],
-  "space-after-keywords": ["off"],
-  "space-before-blocks": ["off"],
-  "space-before-function-paren": ["off"],
-  "space-before-function-parentheses": ["off"],
-  "space-before-keywords": ["off"],
-  "space-in-brackets": ["off"],
-  "space-in-parens": ["off"],
-  "space-infix-ops": ["off"],
-  "space-return-throw-case": ["off"],
-  "space-unary-ops": ["off"],
-  "space-unary-word-ops": ["off"],
-  "standard/array-bracket-even-spacing": ["off"],
-  "standard/computed-property-even-spacing": ["off"],
-  "standard/object-curly-even-spacing": ["off"],
-  "switch-colon-spacing": ["off"],
-  "template-curly-spacing": ["off"],
-  "template-tag-spacing": ["off"],
-  "unicorn/empty-brace-spaces": ["off"],
-  "unicorn/no-nested-ternary": ["off"],
-  "unicorn/number-literal-case": ["off"],
+  "react/jsx-child-element-spacing": [0],
+  "react/jsx-closing-bracket-location": [0],
+  "react/jsx-closing-tag-location": [0],
+  "react/jsx-curly-newline": [0],
+  "react/jsx-curly-spacing": [0],
+  "react/jsx-equals-spacing": [0],
+  "react/jsx-first-prop-new-line": [0],
+  "react/jsx-indent": [0],
+  "react/jsx-indent-props": [0],
+  "react/jsx-max-props-per-line": [0],
+  "react/jsx-newline": [0],
+  "react/jsx-one-expression-per-line": [0],
+  "react/jsx-props-no-multi-spaces": [0],
+  "react/jsx-space-before-closing": [0],
+  "react/jsx-tag-spacing": [0],
+  "react/jsx-wrap-multilines": [0],
+  "require-yield": [2],
+  "rest-spread-spacing": [0],
+  "semi": [0],
+  "semi-spacing": [0],
+  "semi-style": [0],
+  "space-after-function-name": [0],
+  "space-after-keywords": [0],
+  "space-before-blocks": [0],
+  "space-before-function-paren": [0],
+  "space-before-function-parentheses": [0],
+  "space-before-keywords": [0],
+  "space-in-brackets": [0],
+  "space-in-parens": [0],
+  "space-infix-ops": [0],
+  "space-return-throw-case": [0],
+  "space-unary-ops": [0],
+  "space-unary-word-ops": [0],
+  "standard/array-bracket-even-spacing": [0],
+  "standard/computed-property-even-spacing": [0],
+  "standard/object-curly-even-spacing": [0],
+  "switch-colon-spacing": [0],
+  "template-curly-spacing": [0],
+  "template-tag-spacing": [0],
+  "unicorn/empty-brace-spaces": [0],
+  "unicorn/no-nested-ternary": [0],
+  "unicorn/number-literal-case": [0],
   "unicorn/template-indent": [0],
-  "use-isnan": ["error"],
-  "valid-typeof": ["error"],
-  "vue/array-bracket-newline": ["off"],
-  "vue/array-bracket-spacing": ["off"],
-  "vue/array-element-newline": ["off"],
-  "vue/arrow-spacing": ["off"],
-  "vue/block-spacing": ["off"],
-  "vue/block-tag-newline": ["off"],
-  "vue/brace-style": ["off"],
-  "vue/comma-dangle": ["off"],
-  "vue/comma-spacing": ["off"],
-  "vue/comma-style": ["off"],
-  "vue/dot-location": ["off"],
-  "vue/func-call-spacing": ["off"],
-  "vue/html-closing-bracket-newline": ["off"],
-  "vue/html-closing-bracket-spacing": ["off"],
-  "vue/html-end-tags": ["off"],
-  "vue/html-indent": ["off"],
-  "vue/html-quotes": ["off"],
+  "use-isnan": [2],
+  "valid-typeof": [2],
+  "vue/array-bracket-newline": [0],
+  "vue/array-bracket-spacing": [0],
+  "vue/array-element-newline": [0],
+  "vue/arrow-spacing": [0],
+  "vue/block-spacing": [0],
+  "vue/block-tag-newline": [0],
+  "vue/brace-style": [0],
+  "vue/comma-dangle": [0],
+  "vue/comma-spacing": [0],
+  "vue/comma-style": [0],
+  "vue/dot-location": [0],
+  "vue/func-call-spacing": [0],
+  "vue/html-closing-bracket-newline": [0],
+  "vue/html-closing-bracket-spacing": [0],
+  "vue/html-end-tags": [0],
+  "vue/html-indent": [0],
+  "vue/html-quotes": [0],
   "vue/html-self-closing": [0],
-  "vue/key-spacing": ["off"],
-  "vue/keyword-spacing": ["off"],
-  "vue/max-attributes-per-line": ["off"],
+  "vue/key-spacing": [0],
+  "vue/keyword-spacing": [0],
+  "vue/max-attributes-per-line": [0],
   "vue/max-len": [0],
-  "vue/multiline-html-element-content-newline": ["off"],
-  "vue/multiline-ternary": ["off"],
-  "vue/mustache-interpolation-spacing": ["off"],
-  "vue/no-extra-parens": ["off"],
-  "vue/no-multi-spaces": ["off"],
-  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
-  "vue/object-curly-newline": ["off"],
-  "vue/object-curly-spacing": ["off"],
-  "vue/object-property-newline": ["off"],
-  "vue/operator-linebreak": ["off"],
-  "vue/quote-props": ["off"],
-  "vue/script-indent": ["off"],
-  "vue/singleline-html-element-content-newline": ["off"],
-  "vue/space-in-parens": ["off"],
-  "vue/space-infix-ops": ["off"],
-  "vue/space-unary-ops": ["off"],
-  "vue/template-curly-spacing": ["off"],
-  "wrap-iife": ["off"],
-  "wrap-regex": ["off"],
-  "yield-star-spacing": ["off"]
+  "vue/multiline-html-element-content-newline": [0],
+  "vue/multiline-ternary": [0],
+  "vue/mustache-interpolation-spacing": [0],
+  "vue/no-extra-parens": [0],
+  "vue/no-multi-spaces": [0],
+  "vue/no-spaces-around-equal-signs-in-attribute": [0],
+  "vue/object-curly-newline": [0],
+  "vue/object-curly-spacing": [0],
+  "vue/object-property-newline": [0],
+  "vue/operator-linebreak": [0],
+  "vue/quote-props": [0],
+  "vue/script-indent": [0],
+  "vue/singleline-html-element-content-newline": [0],
+  "vue/space-in-parens": [0],
+  "vue/space-infix-ops": [0],
+  "vue/space-unary-ops": [0],
+  "vue/template-curly-spacing": [0],
+  "wrap-iife": [0],
+  "wrap-regex": [0],
+  "yield-star-spacing": [0]
 }
diff --git a/.ops/aws-setup/eslint.config.mjs b/.ops/aws-setup/eslint.config.mjs
new file mode 100644
index 0000000000..97bee214c3
--- /dev/null
+++ b/.ops/aws-setup/eslint.config.mjs
@@ -0,0 +1,51 @@
+import { includeIgnoreFile } from '@eslint/compat'
+import globals from 'globals'
+import path from 'node:path'
+import { fileURLToPath } from 'node:url'
+import js from '@eslint/js'
+import { FlatCompat } from '@eslint/eslintrc'
+
+const __filename = fileURLToPath(import.meta.url)
+const __dirname = path.dirname(__filename)
+const compat = new FlatCompat({
+  baseDirectory: __dirname,
+  recommendedConfig: js.configs.recommended,
+  allConfig: js.configs.all,
+})
+const gitignorePath = path.resolve(__dirname, '.gitignore')
+
+export default [
+  {
+    files: ['**/*.ts'],
+  },
+  ...compat.extends('eslint:recommended', 'plugin:prettier/recommended', 'prettier'),
+
+  includeIgnoreFile(gitignorePath),
+
+  {
+    languageOptions: {
+      globals: {
+        ...globals.node,
+      },
+
+      ecmaVersion: 2022,
+      sourceType: 'module',
+
+      parserOptions: {
+        parser: '@babel/eslint-parser',
+      },
+    },
+
+    rules: {
+      'prefer-const': 'error',
+      'prettier/prettier': 'error',
+
+      'no-unused-vars': [
+        'error',
+        {
+          argsIgnorePattern: '^_$',
+        },
+      ],
+    },
+  },
+]
diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index dc512a52ff..26161d1f31 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -12,6 +12,9 @@
             },
             "devDependencies": {
                 "@babel/eslint-parser": "7.25.1",
+                "@eslint/compat": "1.1.1",
+                "@eslint/eslintrc": "3.1.0",
+                "@eslint/js": "9.9.0",
                 "@types/node": "20.16.1",
                 "eslint": "8.57.0",
                 "eslint-config-prettier": "9.1.0",
@@ -19,6 +22,7 @@
                 "eslint-plugin-n": "17.10.2",
                 "eslint-plugin-prettier": "5.2.1",
                 "eslint-plugin-promise": "7.1.0",
+                "globals": "15.9.0",
                 "prettier": "3.3.3"
             }
         },
@@ -976,6 +980,17 @@
                 "node": ">=6.9.0"
             }
         },
+        "node_modules/@babel/traverse/node_modules/globals": {
+            "version": "11.12.0",
+            "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+            "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+            "dev": true,
+            "license": "MIT",
+            "peer": true,
+            "engines": {
+                "node": ">=4"
+            }
+        },
         "node_modules/@babel/types": {
             "version": "7.25.2",
             "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
@@ -1031,17 +1046,27 @@
                 "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
             }
         },
+        "node_modules/@eslint/compat": {
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.1.1.tgz",
+            "integrity": "sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            }
+        },
         "node_modules/@eslint/eslintrc": {
-            "version": "2.1.4",
-            "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
-            "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+            "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
                 "ajv": "^6.12.4",
                 "debug": "^4.3.2",
-                "espree": "^9.6.0",
-                "globals": "^13.19.0",
+                "espree": "^10.0.1",
+                "globals": "^14.0.0",
                 "ignore": "^5.2.0",
                 "import-fresh": "^3.2.1",
                 "js-yaml": "^4.1.0",
@@ -1049,7 +1074,7 @@
                 "strip-json-comments": "^3.1.1"
             },
             "engines": {
-                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
             },
             "funding": {
                 "url": "https://opencollective.com/eslint"
@@ -1073,17 +1098,45 @@
                 "concat-map": "0.0.1"
             }
         },
-        "node_modules/@eslint/eslintrc/node_modules/globals": {
-            "version": "13.24.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-            "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+        "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+            "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
             "dev": true,
-            "license": "MIT",
+            "license": "Apache-2.0",
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "url": "https://opencollective.com/eslint"
+            }
+        },
+        "node_modules/@eslint/eslintrc/node_modules/espree": {
+            "version": "10.1.0",
+            "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+            "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
+            "dev": true,
+            "license": "BSD-2-Clause",
             "dependencies": {
-                "type-fest": "^0.20.2"
+                "acorn": "^8.12.0",
+                "acorn-jsx": "^5.3.2",
+                "eslint-visitor-keys": "^4.0.0"
             },
             "engines": {
-                "node": ">=8"
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            },
+            "funding": {
+                "url": "https://opencollective.com/eslint"
+            }
+        },
+        "node_modules/@eslint/eslintrc/node_modules/globals": {
+            "version": "14.0.0",
+            "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+            "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": ">=18"
             },
             "funding": {
                 "url": "https://github.com/sponsors/sindresorhus"
@@ -1116,13 +1169,13 @@
             }
         },
         "node_modules/@eslint/js": {
-            "version": "8.57.0",
-            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
-            "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+            "version": "9.9.0",
+            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.0.tgz",
+            "integrity": "sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==",
             "dev": true,
             "license": "MIT",
             "engines": {
-                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
             }
         },
         "node_modules/@grpc/grpc-js": {
@@ -4342,19 +4395,6 @@
                 "eslint": ">=8.23.0"
             }
         },
-        "node_modules/eslint-plugin-n/node_modules/globals": {
-            "version": "15.9.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
-            "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=18"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
         "node_modules/eslint-plugin-n/node_modules/semver": {
             "version": "7.6.3",
             "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
@@ -4439,6 +4479,40 @@
                 "node": ">=10"
             }
         },
+        "node_modules/eslint/node_modules/@eslint/eslintrc": {
+            "version": "2.1.4",
+            "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+            "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "ajv": "^6.12.4",
+                "debug": "^4.3.2",
+                "espree": "^9.6.0",
+                "globals": "^13.19.0",
+                "ignore": "^5.2.0",
+                "import-fresh": "^3.2.1",
+                "js-yaml": "^4.1.0",
+                "minimatch": "^3.1.2",
+                "strip-json-comments": "^3.1.1"
+            },
+            "engines": {
+                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://opencollective.com/eslint"
+            }
+        },
+        "node_modules/eslint/node_modules/@eslint/js": {
+            "version": "8.57.0",
+            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+            "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
+            "dev": true,
+            "license": "MIT",
+            "engines": {
+                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+            }
+        },
         "node_modules/eslint/node_modules/ansi-styles": {
             "version": "4.3.0",
             "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -5112,14 +5186,16 @@
             }
         },
         "node_modules/globals": {
-            "version": "11.12.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
-            "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+            "version": "15.9.0",
+            "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
+            "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==",
             "dev": true,
             "license": "MIT",
-            "peer": true,
             "engines": {
-                "node": ">=4"
+                "node": ">=18"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
         "node_modules/globalthis": {
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 2e3de10494..14fede91c3 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -3,11 +3,11 @@
     "main": "index.ts",
     "scripts": {
         "lint": "npm run lint:eslint && npm run lint:prettier",
-        "lint:eslint": "eslint --fix --ext .ts,.js --ignore-path .gitignore .",
-        "lint:prettier": "prettier --write --ignore-path .prettierignore **/*.{json,md}",
+        "lint:eslint": "eslint --fix .",
+        "lint:prettier": "prettier --write --ignore-path .prettierignore **/*.{json,md,mjs}",
         "lint:check": "npm run lint:check:eslint && npm run lint:check:prettier",
-        "lint:check:eslint": "eslint --no-fix --ext .ts,.js --ignore-path .gitignore .",
-        "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{json,md}"
+        "lint:check:eslint": "eslint .",
+        "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{json,md,mjs}"
     },
     "dependencies": {
         "@pulumi/pulumi": "3.129.0",
@@ -16,6 +16,9 @@
     },
     "devDependencies": {
         "@babel/eslint-parser": "7.25.1",
+        "@eslint/compat": "1.1.1",
+        "@eslint/eslintrc": "3.1.0",
+        "@eslint/js": "9.9.0",
         "@types/node": "20.16.1",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
@@ -23,6 +26,7 @@
         "eslint-plugin-n": "17.10.2",
         "eslint-plugin-prettier": "5.2.1",
         "eslint-plugin-promise": "7.1.0",
+        "globals": "15.9.0",
         "prettier": "3.3.3"
     }
 }

From 6ac8cc741e3a8ffb08edd19046825b47f33858a7 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Mon, 12 Aug 2024 22:59:45 +0200
Subject: [PATCH 094/273] aws-setup: delete eslint-config-js.json again

Was only needed for the migration
---
 .ops/aws-setup/eslint-config-ts.json | 249 ---------------------------
 1 file changed, 249 deletions(-)
 delete mode 100644 .ops/aws-setup/eslint-config-ts.json

diff --git a/.ops/aws-setup/eslint-config-ts.json b/.ops/aws-setup/eslint-config-ts.json
deleted file mode 100644
index 38e990650b..0000000000
--- a/.ops/aws-setup/eslint-config-ts.json
+++ /dev/null
@@ -1,249 +0,0 @@
-{
-  "@babel/object-curly-spacing": [0],
-  "@babel/semi": [0],
-  "@typescript-eslint/block-spacing": [0],
-  "@typescript-eslint/brace-style": [0],
-  "@typescript-eslint/comma-dangle": [0],
-  "@typescript-eslint/comma-spacing": [0],
-  "@typescript-eslint/func-call-spacing": [0],
-  "@typescript-eslint/indent": [0],
-  "@typescript-eslint/key-spacing": [0],
-  "@typescript-eslint/keyword-spacing": [0],
-  "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": [0],
-  "@typescript-eslint/no-extra-parens": [0],
-  "@typescript-eslint/no-extra-semi": [0],
-  "@typescript-eslint/object-curly-spacing": [0],
-  "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": [0],
-  "@typescript-eslint/space-before-blocks": [0],
-  "@typescript-eslint/space-before-function-paren": [0],
-  "@typescript-eslint/space-infix-ops": [0],
-  "@typescript-eslint/type-annotation-spacing": [0],
-  "array-bracket-newline": [0],
-  "array-bracket-spacing": [0],
-  "array-element-newline": [0],
-  "arrow-body-style": [0],
-  "arrow-parens": [0],
-  "arrow-spacing": [0],
-  "babel/object-curly-spacing": [0],
-  "babel/quotes": [0],
-  "babel/semi": [0],
-  "block-spacing": [0],
-  "brace-style": [0],
-  "comma-dangle": [0],
-  "comma-spacing": [0],
-  "comma-style": [0],
-  "computed-property-spacing": [0],
-  "constructor-super": [2],
-  "curly": [0],
-  "dot-location": [0],
-  "eol-last": [0],
-  "flowtype/boolean-style": [0],
-  "flowtype/delimiter-dangle": [0],
-  "flowtype/generic-spacing": [0],
-  "flowtype/object-type-curly-spacing": [0],
-  "flowtype/object-type-delimiter": [0],
-  "flowtype/quotes": [0],
-  "flowtype/semi": [0],
-  "flowtype/space-after-type-colon": [0],
-  "flowtype/space-before-generic-bracket": [0],
-  "flowtype/space-before-type-colon": [0],
-  "flowtype/union-intersection-spacing": [0],
-  "for-direction": [2],
-  "func-call-spacing": [0],
-  "function-call-argument-newline": [0],
-  "function-paren-newline": [0],
-  "generator-star": [0],
-  "generator-star-spacing": [0],
-  "getter-return": [2],
-  "implicit-arrow-linebreak": [0],
-  "indent": [0],
-  "indent-legacy": [0],
-  "jsx-quotes": [0],
-  "key-spacing": [0],
-  "keyword-spacing": [0],
-  "linebreak-style": [0],
-  "lines-around-comment": [0],
-  "max-len": [0],
-  "max-statements-per-line": [0],
-  "multiline-ternary": [0],
-  "new-parens": [0],
-  "newline-per-chained-call": [0],
-  "no-arrow-condition": [0],
-  "no-async-promise-executor": [2],
-  "no-case-declarations": [2],
-  "no-class-assign": [2],
-  "no-comma-dangle": [0],
-  "no-compare-neg-zero": [2],
-  "no-cond-assign": [2],
-  "no-confusing-arrow": [0],
-  "no-const-assign": [2],
-  "no-constant-binary-expression": [2],
-  "no-constant-condition": [2],
-  "no-control-regex": [2],
-  "no-debugger": [2],
-  "no-delete-var": [2],
-  "no-dupe-args": [2],
-  "no-dupe-class-members": [2],
-  "no-dupe-else-if": [2],
-  "no-dupe-keys": [2],
-  "no-duplicate-case": [2],
-  "no-empty": [2],
-  "no-empty-character-class": [2],
-  "no-empty-pattern": [2],
-  "no-empty-static-block": [2],
-  "no-ex-assign": [2],
-  "no-extra-boolean-cast": [2],
-  "no-extra-parens": [0],
-  "no-extra-semi": [0],
-  "no-fallthrough": [2],
-  "no-floating-decimal": [0],
-  "no-func-assign": [2],
-  "no-global-assign": [2],
-  "no-import-assign": [2],
-  "no-invalid-regexp": [2],
-  "no-irregular-whitespace": [2],
-  "no-loss-of-precision": [2],
-  "no-misleading-character-class": [2],
-  "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": [0],
-  "no-multi-spaces": [0],
-  "no-multiple-empty-lines": [0],
-  "no-new-native-nonconstructor": [2],
-  "no-nonoctal-decimal-escape": [2],
-  "no-obj-calls": [2],
-  "no-octal": [2],
-  "no-prototype-builtins": [2],
-  "no-redeclare": [2],
-  "no-regex-spaces": [2],
-  "no-reserved-keys": [0],
-  "no-self-assign": [2],
-  "no-setter-return": [2],
-  "no-shadow-restricted-names": [2],
-  "no-space-before-semi": [0],
-  "no-spaced-func": [0],
-  "no-sparse-arrays": [2],
-  "no-tabs": [0],
-  "no-this-before-super": [2],
-  "no-trailing-spaces": [0],
-  "no-undef": [2],
-  "no-unexpected-multiline": [0],
-  "no-unreachable": [2],
-  "no-unsafe-finally": [2],
-  "no-unsafe-negation": [2],
-  "no-unsafe-optional-chaining": [2],
-  "no-unused-labels": [2],
-  "no-unused-private-class-members": [2],
-  "no-unused-vars": [
-    2,
-    {
-      "argsIgnorePattern": "^_$"
-    }
-  ],
-  "no-useless-backreference": [2],
-  "no-useless-catch": [2],
-  "no-useless-escape": [2],
-  "no-whitespace-before-property": [0],
-  "no-with": [2],
-  "no-wrap-func": [0],
-  "nonblock-statement-body-position": [0],
-  "object-curly-newline": [0],
-  "object-curly-spacing": [0],
-  "object-property-newline": [0],
-  "one-var-declaration-per-line": [0],
-  "operator-linebreak": [0],
-  "padded-blocks": [0],
-  "prefer-arrow-callback": [0],
-  "prefer-const": [2],
-  "prettier/prettier": [2],
-  "quote-props": [0],
-  "quotes": [0],
-  "react/jsx-child-element-spacing": [0],
-  "react/jsx-closing-bracket-location": [0],
-  "react/jsx-closing-tag-location": [0],
-  "react/jsx-curly-newline": [0],
-  "react/jsx-curly-spacing": [0],
-  "react/jsx-equals-spacing": [0],
-  "react/jsx-first-prop-new-line": [0],
-  "react/jsx-indent": [0],
-  "react/jsx-indent-props": [0],
-  "react/jsx-max-props-per-line": [0],
-  "react/jsx-newline": [0],
-  "react/jsx-one-expression-per-line": [0],
-  "react/jsx-props-no-multi-spaces": [0],
-  "react/jsx-space-before-closing": [0],
-  "react/jsx-tag-spacing": [0],
-  "react/jsx-wrap-multilines": [0],
-  "require-yield": [2],
-  "rest-spread-spacing": [0],
-  "semi": [0],
-  "semi-spacing": [0],
-  "semi-style": [0],
-  "space-after-function-name": [0],
-  "space-after-keywords": [0],
-  "space-before-blocks": [0],
-  "space-before-function-paren": [0],
-  "space-before-function-parentheses": [0],
-  "space-before-keywords": [0],
-  "space-in-brackets": [0],
-  "space-in-parens": [0],
-  "space-infix-ops": [0],
-  "space-return-throw-case": [0],
-  "space-unary-ops": [0],
-  "space-unary-word-ops": [0],
-  "standard/array-bracket-even-spacing": [0],
-  "standard/computed-property-even-spacing": [0],
-  "standard/object-curly-even-spacing": [0],
-  "switch-colon-spacing": [0],
-  "template-curly-spacing": [0],
-  "template-tag-spacing": [0],
-  "unicorn/empty-brace-spaces": [0],
-  "unicorn/no-nested-ternary": [0],
-  "unicorn/number-literal-case": [0],
-  "unicorn/template-indent": [0],
-  "use-isnan": [2],
-  "valid-typeof": [2],
-  "vue/array-bracket-newline": [0],
-  "vue/array-bracket-spacing": [0],
-  "vue/array-element-newline": [0],
-  "vue/arrow-spacing": [0],
-  "vue/block-spacing": [0],
-  "vue/block-tag-newline": [0],
-  "vue/brace-style": [0],
-  "vue/comma-dangle": [0],
-  "vue/comma-spacing": [0],
-  "vue/comma-style": [0],
-  "vue/dot-location": [0],
-  "vue/func-call-spacing": [0],
-  "vue/html-closing-bracket-newline": [0],
-  "vue/html-closing-bracket-spacing": [0],
-  "vue/html-end-tags": [0],
-  "vue/html-indent": [0],
-  "vue/html-quotes": [0],
-  "vue/html-self-closing": [0],
-  "vue/key-spacing": [0],
-  "vue/keyword-spacing": [0],
-  "vue/max-attributes-per-line": [0],
-  "vue/max-len": [0],
-  "vue/multiline-html-element-content-newline": [0],
-  "vue/multiline-ternary": [0],
-  "vue/mustache-interpolation-spacing": [0],
-  "vue/no-extra-parens": [0],
-  "vue/no-multi-spaces": [0],
-  "vue/no-spaces-around-equal-signs-in-attribute": [0],
-  "vue/object-curly-newline": [0],
-  "vue/object-curly-spacing": [0],
-  "vue/object-property-newline": [0],
-  "vue/operator-linebreak": [0],
-  "vue/quote-props": [0],
-  "vue/script-indent": [0],
-  "vue/singleline-html-element-content-newline": [0],
-  "vue/space-in-parens": [0],
-  "vue/space-infix-ops": [0],
-  "vue/space-unary-ops": [0],
-  "vue/template-curly-spacing": [0],
-  "wrap-iife": [0],
-  "wrap-regex": [0],
-  "yield-star-spacing": [0]
-}

From c63b2f215bb90ded20236834822374f1f88addd3 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Mon, 12 Aug 2024 23:00:54 +0200
Subject: [PATCH 095/273] aws-setup: also format ts files with prettier

---
 .ops/aws-setup/package.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 14fede91c3..ee7bda21d2 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -4,10 +4,10 @@
     "scripts": {
         "lint": "npm run lint:eslint && npm run lint:prettier",
         "lint:eslint": "eslint --fix .",
-        "lint:prettier": "prettier --write --ignore-path .prettierignore **/*.{json,md,mjs}",
+        "lint:prettier": "prettier --write --ignore-path .prettierignore **/*.{json,md,mjs,ts}",
         "lint:check": "npm run lint:check:eslint && npm run lint:check:prettier",
         "lint:check:eslint": "eslint .",
-        "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{json,md,mjs}"
+        "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{json,md,mjs,ts}"
     },
     "dependencies": {
         "@pulumi/pulumi": "3.129.0",

From 5f34ec0ae2c1ee13380cc691af342de47fb84e6f Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Tue, 13 Aug 2024 22:46:23 +0200
Subject: [PATCH 096/273] print: dump current eslint config

with
node_modules/.bin/eslint --print-config pages/index.vue | jq '.rules' --sort-keys --raw-output > eslint-config-vue.json
node_modules/.bin/eslint --print-config env.d.ts | jq '.rules' --sort-keys --raw-output > eslint-config-ts.json
node_modules/.bin/eslint --print-config server/api/pdf.js | jq '.rules' --sort-keys --raw-output > eslint-config-js.json

That we are sure that the config did not change during the migration.
---
 print/eslint-config-js.json  | 367 ++++++++++++++++++++++++++++++++++
 print/eslint-config-ts.json  | 372 +++++++++++++++++++++++++++++++++++
 print/eslint-config-vue.json | 372 +++++++++++++++++++++++++++++++++++
 3 files changed, 1111 insertions(+)
 create mode 100644 print/eslint-config-js.json
 create mode 100644 print/eslint-config-ts.json
 create mode 100644 print/eslint-config-vue.json

diff --git a/print/eslint-config-js.json b/print/eslint-config-js.json
new file mode 100644
index 0000000000..6642589d87
--- /dev/null
+++ b/print/eslint-config-js.json
@@ -0,0 +1,367 @@
+{
+  "@babel/object-curly-spacing": ["off"],
+  "@babel/semi": ["off"],
+  "@typescript-eslint/block-spacing": ["off"],
+  "@typescript-eslint/brace-style": ["off"],
+  "@typescript-eslint/comma-dangle": ["off"],
+  "@typescript-eslint/comma-spacing": ["off"],
+  "@typescript-eslint/func-call-spacing": ["off"],
+  "@typescript-eslint/indent": ["off"],
+  "@typescript-eslint/key-spacing": ["off"],
+  "@typescript-eslint/keyword-spacing": ["off"],
+  "@typescript-eslint/lines-around-comment": [0],
+  "@typescript-eslint/member-delimiter-style": ["off"],
+  "@typescript-eslint/no-extra-parens": ["off"],
+  "@typescript-eslint/no-extra-semi": ["off"],
+  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/quotes": [0],
+  "@typescript-eslint/semi": ["off"],
+  "@typescript-eslint/space-before-blocks": ["off"],
+  "@typescript-eslint/space-before-function-paren": ["off"],
+  "@typescript-eslint/space-infix-ops": ["off"],
+  "@typescript-eslint/type-annotation-spacing": ["off"],
+  "array-bracket-newline": ["off"],
+  "array-bracket-spacing": ["off"],
+  "array-element-newline": ["off"],
+  "arrow-body-style": ["off"],
+  "arrow-parens": ["off"],
+  "arrow-spacing": ["off"],
+  "babel/object-curly-spacing": ["off"],
+  "babel/quotes": [0],
+  "babel/semi": ["off"],
+  "block-spacing": ["off"],
+  "brace-style": ["off"],
+  "comma-dangle": ["off"],
+  "comma-spacing": ["off"],
+  "comma-style": ["off"],
+  "computed-property-spacing": ["off"],
+  "constructor-super": ["error"],
+  "curly": [0],
+  "dot-location": ["off"],
+  "eol-last": ["off"],
+  "flowtype/boolean-style": ["off"],
+  "flowtype/delimiter-dangle": ["off"],
+  "flowtype/generic-spacing": ["off"],
+  "flowtype/object-type-curly-spacing": ["off"],
+  "flowtype/object-type-delimiter": ["off"],
+  "flowtype/quotes": ["off"],
+  "flowtype/semi": ["off"],
+  "flowtype/space-after-type-colon": ["off"],
+  "flowtype/space-before-generic-bracket": ["off"],
+  "flowtype/space-before-type-colon": ["off"],
+  "flowtype/union-intersection-spacing": ["off"],
+  "for-direction": ["error"],
+  "func-call-spacing": ["off"],
+  "function-call-argument-newline": ["off"],
+  "function-paren-newline": ["off"],
+  "generator-star": ["off"],
+  "generator-star-spacing": ["off"],
+  "getter-return": ["error"],
+  "implicit-arrow-linebreak": ["off"],
+  "indent": ["off"],
+  "indent-legacy": ["off"],
+  "jsx-quotes": ["off"],
+  "key-spacing": ["off"],
+  "keyword-spacing": ["off"],
+  "linebreak-style": ["off"],
+  "lines-around-comment": [0],
+  "local-rules/matching-translation-keys": [
+    "error",
+    {
+      "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
+      "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
+    }
+  ],
+  "max-len": [0],
+  "max-statements-per-line": ["off"],
+  "multiline-ternary": ["off"],
+  "new-parens": ["off"],
+  "newline-per-chained-call": ["off"],
+  "no-arrow-condition": ["off"],
+  "no-async-promise-executor": ["error"],
+  "no-case-declarations": ["error"],
+  "no-class-assign": ["error"],
+  "no-comma-dangle": ["off"],
+  "no-compare-neg-zero": ["error"],
+  "no-cond-assign": ["error"],
+  "no-confusing-arrow": [0],
+  "no-console": ["off"],
+  "no-const-assign": ["error"],
+  "no-constant-condition": ["error"],
+  "no-control-regex": ["error"],
+  "no-debugger": ["error"],
+  "no-delete-var": ["error"],
+  "no-dupe-args": ["error"],
+  "no-dupe-class-members": ["error"],
+  "no-dupe-else-if": ["error"],
+  "no-dupe-keys": ["error"],
+  "no-duplicate-case": ["error"],
+  "no-empty": ["error"],
+  "no-empty-character-class": ["error"],
+  "no-empty-pattern": ["error"],
+  "no-ex-assign": ["error"],
+  "no-extra-boolean-cast": ["error"],
+  "no-extra-parens": ["off"],
+  "no-extra-semi": ["off"],
+  "no-fallthrough": ["error"],
+  "no-floating-decimal": ["off"],
+  "no-func-assign": ["error"],
+  "no-global-assign": ["error"],
+  "no-import-assign": ["error"],
+  "no-inner-declarations": ["error"],
+  "no-invalid-regexp": ["error"],
+  "no-irregular-whitespace": ["error"],
+  "no-loss-of-precision": ["error"],
+  "no-misleading-character-class": ["error"],
+  "no-mixed-operators": [0],
+  "no-mixed-spaces-and-tabs": ["off"],
+  "no-multi-spaces": ["off"],
+  "no-multiple-empty-lines": ["off"],
+  "no-new-symbol": ["error"],
+  "no-nonoctal-decimal-escape": ["error"],
+  "no-obj-calls": ["error"],
+  "no-octal": ["error"],
+  "no-prototype-builtins": ["error"],
+  "no-redeclare": ["error"],
+  "no-regex-spaces": ["error"],
+  "no-reserved-keys": ["off"],
+  "no-self-assign": ["error"],
+  "no-setter-return": ["error"],
+  "no-shadow-restricted-names": ["error"],
+  "no-space-before-semi": ["off"],
+  "no-spaced-func": ["off"],
+  "no-sparse-arrays": ["error"],
+  "no-tabs": [0],
+  "no-this-before-super": ["error"],
+  "no-trailing-spaces": ["off"],
+  "no-undef": ["off"],
+  "no-unexpected-multiline": [0],
+  "no-unreachable": ["error"],
+  "no-unsafe-finally": ["error"],
+  "no-unsafe-negation": ["error"],
+  "no-unsafe-optional-chaining": ["error"],
+  "no-unused-labels": ["error"],
+  "no-unused-vars": ["error"],
+  "no-useless-backreference": ["error"],
+  "no-useless-catch": ["error"],
+  "no-useless-escape": ["error"],
+  "no-whitespace-before-property": ["off"],
+  "no-with": ["error"],
+  "no-wrap-func": ["off"],
+  "nonblock-statement-body-position": ["off"],
+  "object-curly-newline": ["off"],
+  "object-curly-spacing": ["off"],
+  "object-property-newline": ["off"],
+  "one-var-declaration-per-line": ["off"],
+  "operator-linebreak": ["off"],
+  "padded-blocks": ["off"],
+  "prefer-arrow-callback": ["off"],
+  "prefer-const": ["error"],
+  "prettier/prettier": ["error"],
+  "quote-props": ["off"],
+  "quotes": [0],
+  "react/jsx-child-element-spacing": ["off"],
+  "react/jsx-closing-bracket-location": ["off"],
+  "react/jsx-closing-tag-location": ["off"],
+  "react/jsx-curly-newline": ["off"],
+  "react/jsx-curly-spacing": ["off"],
+  "react/jsx-equals-spacing": ["off"],
+  "react/jsx-first-prop-new-line": ["off"],
+  "react/jsx-indent": ["off"],
+  "react/jsx-indent-props": ["off"],
+  "react/jsx-max-props-per-line": ["off"],
+  "react/jsx-newline": ["off"],
+  "react/jsx-one-expression-per-line": ["off"],
+  "react/jsx-props-no-multi-spaces": ["off"],
+  "react/jsx-space-before-closing": ["off"],
+  "react/jsx-tag-spacing": ["off"],
+  "react/jsx-wrap-multilines": ["off"],
+  "require-yield": ["error"],
+  "rest-spread-spacing": ["off"],
+  "semi": ["off"],
+  "semi-spacing": ["off"],
+  "semi-style": ["off"],
+  "space-after-function-name": ["off"],
+  "space-after-keywords": ["off"],
+  "space-before-blocks": ["off"],
+  "space-before-function-paren": ["off"],
+  "space-before-function-parentheses": ["off"],
+  "space-before-keywords": ["off"],
+  "space-in-brackets": ["off"],
+  "space-in-parens": ["off"],
+  "space-infix-ops": ["off"],
+  "space-return-throw-case": ["off"],
+  "space-unary-ops": ["off"],
+  "space-unary-word-ops": ["off"],
+  "standard/array-bracket-even-spacing": ["off"],
+  "standard/computed-property-even-spacing": ["off"],
+  "standard/object-curly-even-spacing": ["off"],
+  "switch-colon-spacing": ["off"],
+  "template-curly-spacing": ["off"],
+  "template-tag-spacing": ["off"],
+  "unicorn/empty-brace-spaces": ["off"],
+  "unicorn/no-nested-ternary": ["off"],
+  "unicorn/number-literal-case": ["off"],
+  "unicorn/template-indent": [0],
+  "use-isnan": ["error"],
+  "valid-typeof": ["error"],
+  "vue-scoped-css/enforce-style-type": ["warn"],
+  "vue-scoped-css/no-deprecated-deep-combinator": ["warn"],
+  "vue-scoped-css/no-parent-of-v-global": ["warn"],
+  "vue-scoped-css/no-parsing-error": ["warn"],
+  "vue-scoped-css/no-unused-keyframes": ["warn"],
+  "vue-scoped-css/no-unused-selector": ["warn"],
+  "vue-scoped-css/require-v-deep-argument": ["warn"],
+  "vue-scoped-css/require-v-global-argument": ["warn"],
+  "vue-scoped-css/require-v-slotted-argument": ["warn"],
+  "vue/array-bracket-newline": ["off"],
+  "vue/array-bracket-spacing": ["off"],
+  "vue/array-element-newline": ["off"],
+  "vue/arrow-spacing": ["off"],
+  "vue/attribute-hyphenation": ["warn"],
+  "vue/attributes-order": ["warn"],
+  "vue/block-spacing": ["off"],
+  "vue/block-tag-newline": ["off"],
+  "vue/brace-style": ["off"],
+  "vue/comma-dangle": ["off"],
+  "vue/comma-spacing": ["off"],
+  "vue/comma-style": ["off"],
+  "vue/comment-directive": ["error"],
+  "vue/component-definition-name-casing": ["warn"],
+  "vue/component-tags-order": ["warn"],
+  "vue/dot-location": ["off"],
+  "vue/first-attribute-linebreak": ["warn"],
+  "vue/func-call-spacing": ["off"],
+  "vue/html-closing-bracket-newline": ["off"],
+  "vue/html-closing-bracket-spacing": ["off"],
+  "vue/html-end-tags": ["off"],
+  "vue/html-indent": ["off"],
+  "vue/html-quotes": ["off"],
+  "vue/html-self-closing": [0],
+  "vue/jsx-uses-vars": ["error"],
+  "vue/key-spacing": ["off"],
+  "vue/keyword-spacing": ["off"],
+  "vue/max-attributes-per-line": ["off"],
+  "vue/max-len": [0],
+  "vue/multi-word-component-names": ["off"],
+  "vue/multiline-html-element-content-newline": ["off"],
+  "vue/multiline-ternary": ["off"],
+  "vue/mustache-interpolation-spacing": ["off"],
+  "vue/no-arrow-functions-in-watch": ["error"],
+  "vue/no-async-in-computed-properties": ["error"],
+  "vue/no-child-content": ["error"],
+  "vue/no-computed-properties-in-data": ["error"],
+  "vue/no-deprecated-data-object-declaration": ["error"],
+  "vue/no-deprecated-destroyed-lifecycle": ["error"],
+  "vue/no-deprecated-dollar-listeners-api": ["error"],
+  "vue/no-deprecated-dollar-scopedslots-api": ["error"],
+  "vue/no-deprecated-events-api": ["error"],
+  "vue/no-deprecated-filter": ["error"],
+  "vue/no-deprecated-functional-template": ["error"],
+  "vue/no-deprecated-html-element-is": ["error"],
+  "vue/no-deprecated-inline-template": ["error"],
+  "vue/no-deprecated-props-default-this": ["error"],
+  "vue/no-deprecated-router-link-tag-prop": ["error"],
+  "vue/no-deprecated-scope-attribute": ["error"],
+  "vue/no-deprecated-slot-attribute": ["error"],
+  "vue/no-deprecated-slot-scope-attribute": ["error"],
+  "vue/no-deprecated-v-bind-sync": ["error"],
+  "vue/no-deprecated-v-is": ["error"],
+  "vue/no-deprecated-v-on-native-modifier": ["error"],
+  "vue/no-deprecated-v-on-number-modifiers": ["error"],
+  "vue/no-deprecated-vue-config-keycodes": ["error"],
+  "vue/no-dupe-keys": ["error"],
+  "vue/no-dupe-v-else-if": ["error"],
+  "vue/no-duplicate-attributes": ["error"],
+  "vue/no-export-in-script-setup": ["error"],
+  "vue/no-expose-after-await": ["error"],
+  "vue/no-extra-parens": ["off"],
+  "vue/no-lifecycle-after-await": ["error"],
+  "vue/no-lone-template": ["warn"],
+  "vue/no-multi-spaces": ["off"],
+  "vue/no-multiple-slot-args": ["warn"],
+  "vue/no-mutating-props": ["error"],
+  "vue/no-parsing-error": ["error"],
+  "vue/no-ref-as-operand": ["error"],
+  "vue/no-reserved-component-names": ["error"],
+  "vue/no-reserved-keys": ["error"],
+  "vue/no-reserved-props": ["error"],
+  "vue/no-shared-component-data": ["error"],
+  "vue/no-side-effects-in-computed-properties": ["error"],
+  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
+  "vue/no-template-key": ["error"],
+  "vue/no-template-shadow": ["warn"],
+  "vue/no-textarea-mustache": ["error"],
+  "vue/no-unused-components": ["error"],
+  "vue/no-unused-vars": ["error"],
+  "vue/no-use-computed-property-like-method": ["error"],
+  "vue/no-use-v-if-with-v-for": ["error"],
+  "vue/no-useless-template-attributes": ["error"],
+  "vue/no-v-for-template-key-on-child": ["error"],
+  "vue/no-v-html": ["warn"],
+  "vue/no-v-text-v-html-on-component": ["error"],
+  "vue/no-watch-after-await": ["error"],
+  "vue/object-curly-newline": ["off"],
+  "vue/object-curly-spacing": ["off"],
+  "vue/object-property-newline": ["off"],
+  "vue/one-component-per-file": ["warn"],
+  "vue/operator-linebreak": ["off"],
+  "vue/order-in-components": ["warn"],
+  "vue/prefer-import-from-vue": ["error"],
+  "vue/prop-name-casing": ["warn"],
+  "vue/quote-props": ["off"],
+  "vue/require-component-is": ["error"],
+  "vue/require-default-prop": ["warn"],
+  "vue/require-explicit-emits": ["warn"],
+  "vue/require-prop-type-constructor": ["error"],
+  "vue/require-prop-types": ["warn"],
+  "vue/require-render-return": ["error"],
+  "vue/require-slots-as-functions": ["error"],
+  "vue/require-toggle-inside-transition": ["error"],
+  "vue/require-v-for-key": ["error"],
+  "vue/require-valid-default-prop": ["error"],
+  "vue/return-in-computed-property": ["error"],
+  "vue/return-in-emits-validator": ["error"],
+  "vue/script-indent": ["off"],
+  "vue/singleline-html-element-content-newline": ["off"],
+  "vue/space-in-parens": ["off"],
+  "vue/space-infix-ops": ["off"],
+  "vue/space-unary-ops": ["off"],
+  "vue/template-curly-spacing": ["off"],
+  "vue/this-in-template": ["warn"],
+  "vue/use-v-on-exact": ["error"],
+  "vue/v-bind-style": ["warn"],
+  "vue/v-on-event-hyphenation": [
+    "warn",
+    "always",
+    {
+      "autofix": true
+    }
+  ],
+  "vue/v-on-style": ["warn"],
+  "vue/v-slot-style": ["warn"],
+  "vue/valid-attribute-name": ["error"],
+  "vue/valid-define-emits": ["error"],
+  "vue/valid-define-props": ["error"],
+  "vue/valid-next-tick": ["error"],
+  "vue/valid-template-root": ["error"],
+  "vue/valid-v-bind": ["error"],
+  "vue/valid-v-cloak": ["error"],
+  "vue/valid-v-else": ["error"],
+  "vue/valid-v-else-if": ["error"],
+  "vue/valid-v-for": ["error"],
+  "vue/valid-v-html": ["error"],
+  "vue/valid-v-if": ["error"],
+  "vue/valid-v-is": ["error"],
+  "vue/valid-v-memo": ["error"],
+  "vue/valid-v-model": ["error"],
+  "vue/valid-v-on": ["error"],
+  "vue/valid-v-once": ["error"],
+  "vue/valid-v-pre": ["error"],
+  "vue/valid-v-show": ["error"],
+  "vue/valid-v-slot": ["error"],
+  "vue/valid-v-text": ["error"],
+  "wrap-iife": ["off"],
+  "wrap-regex": ["off"],
+  "yield-star-spacing": ["off"]
+}
diff --git a/print/eslint-config-ts.json b/print/eslint-config-ts.json
new file mode 100644
index 0000000000..e7b5a7dc86
--- /dev/null
+++ b/print/eslint-config-ts.json
@@ -0,0 +1,372 @@
+{
+  "@babel/object-curly-spacing": ["off"],
+  "@babel/semi": ["off"],
+  "@typescript-eslint/block-spacing": ["off"],
+  "@typescript-eslint/brace-style": ["off"],
+  "@typescript-eslint/comma-dangle": ["off"],
+  "@typescript-eslint/comma-spacing": ["off"],
+  "@typescript-eslint/func-call-spacing": ["off"],
+  "@typescript-eslint/indent": ["off"],
+  "@typescript-eslint/key-spacing": ["off"],
+  "@typescript-eslint/keyword-spacing": ["off"],
+  "@typescript-eslint/lines-around-comment": [0],
+  "@typescript-eslint/member-delimiter-style": ["off"],
+  "@typescript-eslint/no-extra-parens": ["off"],
+  "@typescript-eslint/no-extra-semi": ["off"],
+  "@typescript-eslint/no-unused-vars": ["warn"],
+  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/quotes": [0],
+  "@typescript-eslint/semi": ["off"],
+  "@typescript-eslint/space-before-blocks": ["off"],
+  "@typescript-eslint/space-before-function-paren": ["off"],
+  "@typescript-eslint/space-infix-ops": ["off"],
+  "@typescript-eslint/type-annotation-spacing": ["off"],
+  "array-bracket-newline": ["off"],
+  "array-bracket-spacing": ["off"],
+  "array-element-newline": ["off"],
+  "arrow-body-style": ["off"],
+  "arrow-parens": ["off"],
+  "arrow-spacing": ["off"],
+  "babel/object-curly-spacing": ["off"],
+  "babel/quotes": [0],
+  "babel/semi": ["off"],
+  "block-spacing": ["off"],
+  "brace-style": ["off"],
+  "comma-dangle": ["off"],
+  "comma-spacing": ["off"],
+  "comma-style": ["off"],
+  "computed-property-spacing": ["off"],
+  "constructor-super": ["error"],
+  "curly": [0],
+  "dot-location": ["off"],
+  "eol-last": ["off"],
+  "flowtype/boolean-style": ["off"],
+  "flowtype/delimiter-dangle": ["off"],
+  "flowtype/generic-spacing": ["off"],
+  "flowtype/object-type-curly-spacing": ["off"],
+  "flowtype/object-type-delimiter": ["off"],
+  "flowtype/quotes": ["off"],
+  "flowtype/semi": ["off"],
+  "flowtype/space-after-type-colon": ["off"],
+  "flowtype/space-before-generic-bracket": ["off"],
+  "flowtype/space-before-type-colon": ["off"],
+  "flowtype/union-intersection-spacing": ["off"],
+  "for-direction": ["error"],
+  "func-call-spacing": ["off"],
+  "function-call-argument-newline": ["off"],
+  "function-paren-newline": ["off"],
+  "generator-star": ["off"],
+  "generator-star-spacing": ["off"],
+  "getter-return": ["error"],
+  "implicit-arrow-linebreak": ["off"],
+  "indent": ["off"],
+  "indent-legacy": ["off"],
+  "jsx-quotes": ["off"],
+  "key-spacing": ["off"],
+  "keyword-spacing": ["off"],
+  "linebreak-style": ["off"],
+  "lines-around-comment": [0],
+  "local-rules/matching-translation-keys": [
+    "error",
+    {
+      "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
+      "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
+    }
+  ],
+  "max-len": [0],
+  "max-statements-per-line": ["off"],
+  "multiline-ternary": ["off"],
+  "new-parens": ["off"],
+  "newline-per-chained-call": ["off"],
+  "no-arrow-condition": ["off"],
+  "no-async-promise-executor": ["error"],
+  "no-case-declarations": ["error"],
+  "no-class-assign": ["error"],
+  "no-comma-dangle": ["off"],
+  "no-compare-neg-zero": ["error"],
+  "no-cond-assign": ["error"],
+  "no-confusing-arrow": [0],
+  "no-console": ["off"],
+  "no-const-assign": ["error"],
+  "no-constant-condition": ["error"],
+  "no-control-regex": ["error"],
+  "no-debugger": ["error"],
+  "no-delete-var": ["error"],
+  "no-dupe-args": ["error"],
+  "no-dupe-class-members": ["error"],
+  "no-dupe-else-if": ["error"],
+  "no-dupe-keys": ["error"],
+  "no-duplicate-case": ["error"],
+  "no-empty": ["error"],
+  "no-empty-character-class": ["error"],
+  "no-empty-pattern": ["error"],
+  "no-ex-assign": ["error"],
+  "no-extra-boolean-cast": ["error"],
+  "no-extra-parens": ["off"],
+  "no-extra-semi": ["off"],
+  "no-fallthrough": ["error"],
+  "no-floating-decimal": ["off"],
+  "no-func-assign": ["error"],
+  "no-global-assign": ["error"],
+  "no-import-assign": ["error"],
+  "no-inner-declarations": ["error"],
+  "no-invalid-regexp": ["error"],
+  "no-irregular-whitespace": ["error"],
+  "no-loss-of-precision": ["error"],
+  "no-misleading-character-class": ["error"],
+  "no-mixed-operators": [0],
+  "no-mixed-spaces-and-tabs": ["off"],
+  "no-multi-spaces": ["off"],
+  "no-multiple-empty-lines": ["off"],
+  "no-new-native-nonconstructor": ["off"],
+  "no-new-symbol": ["error"],
+  "no-nonoctal-decimal-escape": ["error"],
+  "no-obj-calls": ["error"],
+  "no-octal": ["error"],
+  "no-prototype-builtins": ["error"],
+  "no-redeclare": ["error"],
+  "no-regex-spaces": ["error"],
+  "no-reserved-keys": ["off"],
+  "no-self-assign": ["error"],
+  "no-setter-return": ["error"],
+  "no-shadow-restricted-names": ["error"],
+  "no-space-before-semi": ["off"],
+  "no-spaced-func": ["off"],
+  "no-sparse-arrays": ["error"],
+  "no-tabs": [0],
+  "no-this-before-super": ["error"],
+  "no-trailing-spaces": ["off"],
+  "no-undef": ["off"],
+  "no-unexpected-multiline": [0],
+  "no-unreachable": ["error"],
+  "no-unsafe-finally": ["error"],
+  "no-unsafe-negation": ["error"],
+  "no-unsafe-optional-chaining": ["error"],
+  "no-unused-labels": ["error"],
+  "no-unused-vars": ["error"],
+  "no-useless-backreference": ["error"],
+  "no-useless-catch": ["error"],
+  "no-useless-escape": ["error"],
+  "no-var": ["error"],
+  "no-whitespace-before-property": ["off"],
+  "no-with": ["error"],
+  "no-wrap-func": ["off"],
+  "nonblock-statement-body-position": ["off"],
+  "object-curly-newline": ["off"],
+  "object-curly-spacing": ["off"],
+  "object-property-newline": ["off"],
+  "one-var-declaration-per-line": ["off"],
+  "operator-linebreak": ["off"],
+  "padded-blocks": ["off"],
+  "prefer-arrow-callback": ["off"],
+  "prefer-const": ["error"],
+  "prefer-rest-params": ["error"],
+  "prefer-spread": ["error"],
+  "prettier/prettier": ["error"],
+  "quote-props": ["off"],
+  "quotes": [0],
+  "react/jsx-child-element-spacing": ["off"],
+  "react/jsx-closing-bracket-location": ["off"],
+  "react/jsx-closing-tag-location": ["off"],
+  "react/jsx-curly-newline": ["off"],
+  "react/jsx-curly-spacing": ["off"],
+  "react/jsx-equals-spacing": ["off"],
+  "react/jsx-first-prop-new-line": ["off"],
+  "react/jsx-indent": ["off"],
+  "react/jsx-indent-props": ["off"],
+  "react/jsx-max-props-per-line": ["off"],
+  "react/jsx-newline": ["off"],
+  "react/jsx-one-expression-per-line": ["off"],
+  "react/jsx-props-no-multi-spaces": ["off"],
+  "react/jsx-space-before-closing": ["off"],
+  "react/jsx-tag-spacing": ["off"],
+  "react/jsx-wrap-multilines": ["off"],
+  "require-yield": ["error"],
+  "rest-spread-spacing": ["off"],
+  "semi": ["off"],
+  "semi-spacing": ["off"],
+  "semi-style": ["off"],
+  "space-after-function-name": ["off"],
+  "space-after-keywords": ["off"],
+  "space-before-blocks": ["off"],
+  "space-before-function-paren": ["off"],
+  "space-before-function-parentheses": ["off"],
+  "space-before-keywords": ["off"],
+  "space-in-brackets": ["off"],
+  "space-in-parens": ["off"],
+  "space-infix-ops": ["off"],
+  "space-return-throw-case": ["off"],
+  "space-unary-ops": ["off"],
+  "space-unary-word-ops": ["off"],
+  "standard/array-bracket-even-spacing": ["off"],
+  "standard/computed-property-even-spacing": ["off"],
+  "standard/object-curly-even-spacing": ["off"],
+  "switch-colon-spacing": ["off"],
+  "template-curly-spacing": ["off"],
+  "template-tag-spacing": ["off"],
+  "unicorn/empty-brace-spaces": ["off"],
+  "unicorn/no-nested-ternary": ["off"],
+  "unicorn/number-literal-case": ["off"],
+  "unicorn/template-indent": [0],
+  "use-isnan": ["error"],
+  "valid-typeof": ["error"],
+  "vue-scoped-css/enforce-style-type": ["warn"],
+  "vue-scoped-css/no-deprecated-deep-combinator": ["warn"],
+  "vue-scoped-css/no-parent-of-v-global": ["warn"],
+  "vue-scoped-css/no-parsing-error": ["warn"],
+  "vue-scoped-css/no-unused-keyframes": ["warn"],
+  "vue-scoped-css/no-unused-selector": ["warn"],
+  "vue-scoped-css/require-v-deep-argument": ["warn"],
+  "vue-scoped-css/require-v-global-argument": ["warn"],
+  "vue-scoped-css/require-v-slotted-argument": ["warn"],
+  "vue/array-bracket-newline": ["off"],
+  "vue/array-bracket-spacing": ["off"],
+  "vue/array-element-newline": ["off"],
+  "vue/arrow-spacing": ["off"],
+  "vue/attribute-hyphenation": ["warn"],
+  "vue/attributes-order": ["warn"],
+  "vue/block-spacing": ["off"],
+  "vue/block-tag-newline": ["off"],
+  "vue/brace-style": ["off"],
+  "vue/comma-dangle": ["off"],
+  "vue/comma-spacing": ["off"],
+  "vue/comma-style": ["off"],
+  "vue/comment-directive": ["error"],
+  "vue/component-definition-name-casing": ["warn"],
+  "vue/component-tags-order": ["warn"],
+  "vue/dot-location": ["off"],
+  "vue/first-attribute-linebreak": ["warn"],
+  "vue/func-call-spacing": ["off"],
+  "vue/html-closing-bracket-newline": ["off"],
+  "vue/html-closing-bracket-spacing": ["off"],
+  "vue/html-end-tags": ["off"],
+  "vue/html-indent": ["off"],
+  "vue/html-quotes": ["off"],
+  "vue/html-self-closing": [0],
+  "vue/jsx-uses-vars": ["error"],
+  "vue/key-spacing": ["off"],
+  "vue/keyword-spacing": ["off"],
+  "vue/max-attributes-per-line": ["off"],
+  "vue/max-len": [0],
+  "vue/multi-word-component-names": ["off"],
+  "vue/multiline-html-element-content-newline": ["off"],
+  "vue/multiline-ternary": ["off"],
+  "vue/mustache-interpolation-spacing": ["off"],
+  "vue/no-arrow-functions-in-watch": ["error"],
+  "vue/no-async-in-computed-properties": ["error"],
+  "vue/no-child-content": ["error"],
+  "vue/no-computed-properties-in-data": ["error"],
+  "vue/no-deprecated-data-object-declaration": ["error"],
+  "vue/no-deprecated-destroyed-lifecycle": ["error"],
+  "vue/no-deprecated-dollar-listeners-api": ["error"],
+  "vue/no-deprecated-dollar-scopedslots-api": ["error"],
+  "vue/no-deprecated-events-api": ["error"],
+  "vue/no-deprecated-filter": ["error"],
+  "vue/no-deprecated-functional-template": ["error"],
+  "vue/no-deprecated-html-element-is": ["error"],
+  "vue/no-deprecated-inline-template": ["error"],
+  "vue/no-deprecated-props-default-this": ["error"],
+  "vue/no-deprecated-router-link-tag-prop": ["error"],
+  "vue/no-deprecated-scope-attribute": ["error"],
+  "vue/no-deprecated-slot-attribute": ["error"],
+  "vue/no-deprecated-slot-scope-attribute": ["error"],
+  "vue/no-deprecated-v-bind-sync": ["error"],
+  "vue/no-deprecated-v-is": ["error"],
+  "vue/no-deprecated-v-on-native-modifier": ["error"],
+  "vue/no-deprecated-v-on-number-modifiers": ["error"],
+  "vue/no-deprecated-vue-config-keycodes": ["error"],
+  "vue/no-dupe-keys": ["error"],
+  "vue/no-dupe-v-else-if": ["error"],
+  "vue/no-duplicate-attributes": ["error"],
+  "vue/no-export-in-script-setup": ["error"],
+  "vue/no-expose-after-await": ["error"],
+  "vue/no-extra-parens": ["off"],
+  "vue/no-lifecycle-after-await": ["error"],
+  "vue/no-lone-template": ["warn"],
+  "vue/no-multi-spaces": ["off"],
+  "vue/no-multiple-slot-args": ["warn"],
+  "vue/no-mutating-props": ["error"],
+  "vue/no-parsing-error": ["error"],
+  "vue/no-ref-as-operand": ["error"],
+  "vue/no-reserved-component-names": ["error"],
+  "vue/no-reserved-keys": ["error"],
+  "vue/no-reserved-props": ["error"],
+  "vue/no-shared-component-data": ["error"],
+  "vue/no-side-effects-in-computed-properties": ["error"],
+  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
+  "vue/no-template-key": ["error"],
+  "vue/no-template-shadow": ["warn"],
+  "vue/no-textarea-mustache": ["error"],
+  "vue/no-unused-components": ["error"],
+  "vue/no-unused-vars": ["error"],
+  "vue/no-use-computed-property-like-method": ["error"],
+  "vue/no-use-v-if-with-v-for": ["error"],
+  "vue/no-useless-template-attributes": ["error"],
+  "vue/no-v-for-template-key-on-child": ["error"],
+  "vue/no-v-html": ["warn"],
+  "vue/no-v-text-v-html-on-component": ["error"],
+  "vue/no-watch-after-await": ["error"],
+  "vue/object-curly-newline": ["off"],
+  "vue/object-curly-spacing": ["off"],
+  "vue/object-property-newline": ["off"],
+  "vue/one-component-per-file": ["warn"],
+  "vue/operator-linebreak": ["off"],
+  "vue/order-in-components": ["warn"],
+  "vue/prefer-import-from-vue": ["error"],
+  "vue/prop-name-casing": ["warn"],
+  "vue/quote-props": ["off"],
+  "vue/require-component-is": ["error"],
+  "vue/require-default-prop": ["warn"],
+  "vue/require-explicit-emits": ["warn"],
+  "vue/require-prop-type-constructor": ["error"],
+  "vue/require-prop-types": ["warn"],
+  "vue/require-render-return": ["error"],
+  "vue/require-slots-as-functions": ["error"],
+  "vue/require-toggle-inside-transition": ["error"],
+  "vue/require-v-for-key": ["error"],
+  "vue/require-valid-default-prop": ["error"],
+  "vue/return-in-computed-property": ["error"],
+  "vue/return-in-emits-validator": ["error"],
+  "vue/script-indent": ["off"],
+  "vue/singleline-html-element-content-newline": ["off"],
+  "vue/space-in-parens": ["off"],
+  "vue/space-infix-ops": ["off"],
+  "vue/space-unary-ops": ["off"],
+  "vue/template-curly-spacing": ["off"],
+  "vue/this-in-template": ["warn"],
+  "vue/use-v-on-exact": ["error"],
+  "vue/v-bind-style": ["warn"],
+  "vue/v-on-event-hyphenation": [
+    "warn",
+    "always",
+    {
+      "autofix": true
+    }
+  ],
+  "vue/v-on-style": ["warn"],
+  "vue/v-slot-style": ["warn"],
+  "vue/valid-attribute-name": ["error"],
+  "vue/valid-define-emits": ["error"],
+  "vue/valid-define-props": ["error"],
+  "vue/valid-next-tick": ["error"],
+  "vue/valid-template-root": ["error"],
+  "vue/valid-v-bind": ["error"],
+  "vue/valid-v-cloak": ["error"],
+  "vue/valid-v-else": ["error"],
+  "vue/valid-v-else-if": ["error"],
+  "vue/valid-v-for": ["error"],
+  "vue/valid-v-html": ["error"],
+  "vue/valid-v-if": ["error"],
+  "vue/valid-v-is": ["error"],
+  "vue/valid-v-memo": ["error"],
+  "vue/valid-v-model": ["error"],
+  "vue/valid-v-on": ["error"],
+  "vue/valid-v-once": ["error"],
+  "vue/valid-v-pre": ["error"],
+  "vue/valid-v-show": ["error"],
+  "vue/valid-v-slot": ["error"],
+  "vue/valid-v-text": ["error"],
+  "wrap-iife": ["off"],
+  "wrap-regex": ["off"],
+  "yield-star-spacing": ["off"]
+}
diff --git a/print/eslint-config-vue.json b/print/eslint-config-vue.json
new file mode 100644
index 0000000000..b9e7671d29
--- /dev/null
+++ b/print/eslint-config-vue.json
@@ -0,0 +1,372 @@
+{
+  "@babel/object-curly-spacing": ["off"],
+  "@babel/semi": ["off"],
+  "@typescript-eslint/block-spacing": ["off"],
+  "@typescript-eslint/brace-style": ["off"],
+  "@typescript-eslint/comma-dangle": ["off"],
+  "@typescript-eslint/comma-spacing": ["off"],
+  "@typescript-eslint/func-call-spacing": ["off"],
+  "@typescript-eslint/indent": ["off"],
+  "@typescript-eslint/key-spacing": ["off"],
+  "@typescript-eslint/keyword-spacing": ["off"],
+  "@typescript-eslint/lines-around-comment": [0],
+  "@typescript-eslint/member-delimiter-style": ["off"],
+  "@typescript-eslint/no-extra-parens": ["off"],
+  "@typescript-eslint/no-extra-semi": ["off"],
+  "@typescript-eslint/no-unused-vars": ["warn"],
+  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/quotes": [0],
+  "@typescript-eslint/semi": ["off"],
+  "@typescript-eslint/space-before-blocks": ["off"],
+  "@typescript-eslint/space-before-function-paren": ["off"],
+  "@typescript-eslint/space-infix-ops": ["off"],
+  "@typescript-eslint/type-annotation-spacing": ["off"],
+  "array-bracket-newline": ["off"],
+  "array-bracket-spacing": ["off"],
+  "array-element-newline": ["off"],
+  "arrow-body-style": ["off"],
+  "arrow-parens": ["off"],
+  "arrow-spacing": ["off"],
+  "babel/object-curly-spacing": ["off"],
+  "babel/quotes": [0],
+  "babel/semi": ["off"],
+  "block-spacing": ["off"],
+  "brace-style": ["off"],
+  "comma-dangle": ["off"],
+  "comma-spacing": ["off"],
+  "comma-style": ["off"],
+  "computed-property-spacing": ["off"],
+  "constructor-super": ["error"],
+  "curly": [0],
+  "dot-location": ["off"],
+  "eol-last": ["off"],
+  "flowtype/boolean-style": ["off"],
+  "flowtype/delimiter-dangle": ["off"],
+  "flowtype/generic-spacing": ["off"],
+  "flowtype/object-type-curly-spacing": ["off"],
+  "flowtype/object-type-delimiter": ["off"],
+  "flowtype/quotes": ["off"],
+  "flowtype/semi": ["off"],
+  "flowtype/space-after-type-colon": ["off"],
+  "flowtype/space-before-generic-bracket": ["off"],
+  "flowtype/space-before-type-colon": ["off"],
+  "flowtype/union-intersection-spacing": ["off"],
+  "for-direction": ["error"],
+  "func-call-spacing": ["off"],
+  "function-call-argument-newline": ["off"],
+  "function-paren-newline": ["off"],
+  "generator-star": ["off"],
+  "generator-star-spacing": ["off"],
+  "getter-return": ["error"],
+  "implicit-arrow-linebreak": ["off"],
+  "indent": ["off"],
+  "indent-legacy": ["off"],
+  "jsx-quotes": ["off"],
+  "key-spacing": ["off"],
+  "keyword-spacing": ["off"],
+  "linebreak-style": ["off"],
+  "lines-around-comment": [0],
+  "local-rules/matching-translation-keys": [
+    "error",
+    {
+      "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
+      "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
+    }
+  ],
+  "max-len": [0],
+  "max-statements-per-line": ["off"],
+  "multiline-ternary": ["off"],
+  "new-parens": ["off"],
+  "newline-per-chained-call": ["off"],
+  "no-arrow-condition": ["off"],
+  "no-async-promise-executor": ["error"],
+  "no-case-declarations": ["error"],
+  "no-class-assign": ["error"],
+  "no-comma-dangle": ["off"],
+  "no-compare-neg-zero": ["error"],
+  "no-cond-assign": ["error"],
+  "no-confusing-arrow": [0],
+  "no-console": ["off"],
+  "no-const-assign": ["error"],
+  "no-constant-condition": ["error"],
+  "no-control-regex": ["error"],
+  "no-debugger": ["error"],
+  "no-delete-var": ["error"],
+  "no-dupe-args": ["error"],
+  "no-dupe-class-members": ["error"],
+  "no-dupe-else-if": ["error"],
+  "no-dupe-keys": ["error"],
+  "no-duplicate-case": ["error"],
+  "no-empty": ["error"],
+  "no-empty-character-class": ["error"],
+  "no-empty-pattern": ["error"],
+  "no-ex-assign": ["error"],
+  "no-extra-boolean-cast": ["error"],
+  "no-extra-parens": ["off"],
+  "no-extra-semi": ["off"],
+  "no-fallthrough": ["error"],
+  "no-floating-decimal": ["off"],
+  "no-func-assign": ["error"],
+  "no-global-assign": ["error"],
+  "no-import-assign": ["error"],
+  "no-inner-declarations": ["error"],
+  "no-invalid-regexp": ["error"],
+  "no-irregular-whitespace": ["error"],
+  "no-loss-of-precision": ["error"],
+  "no-misleading-character-class": ["error"],
+  "no-mixed-operators": [0],
+  "no-mixed-spaces-and-tabs": ["off"],
+  "no-multi-spaces": ["off"],
+  "no-multiple-empty-lines": ["off"],
+  "no-new-symbol": ["error"],
+  "no-nonoctal-decimal-escape": ["error"],
+  "no-obj-calls": ["error"],
+  "no-octal": ["error"],
+  "no-prototype-builtins": ["error"],
+  "no-redeclare": ["error"],
+  "no-regex-spaces": ["error"],
+  "no-reserved-keys": ["off"],
+  "no-self-assign": ["error"],
+  "no-setter-return": ["error"],
+  "no-shadow-restricted-names": ["error"],
+  "no-space-before-semi": ["off"],
+  "no-spaced-func": ["off"],
+  "no-sparse-arrays": ["error"],
+  "no-tabs": [0],
+  "no-this-before-super": ["error"],
+  "no-trailing-spaces": ["off"],
+  "no-undef": ["off"],
+  "no-unexpected-multiline": [0],
+  "no-unreachable": ["error"],
+  "no-unsafe-finally": ["error"],
+  "no-unsafe-negation": ["error"],
+  "no-unsafe-optional-chaining": ["error"],
+  "no-unused-labels": ["error"],
+  "no-unused-vars": ["error"],
+  "no-useless-backreference": ["error"],
+  "no-useless-catch": ["error"],
+  "no-useless-escape": ["error"],
+  "no-var": ["error"],
+  "no-whitespace-before-property": ["off"],
+  "no-with": ["error"],
+  "no-wrap-func": ["off"],
+  "nonblock-statement-body-position": ["off"],
+  "object-curly-newline": ["off"],
+  "object-curly-spacing": ["off"],
+  "object-property-newline": ["off"],
+  "one-var-declaration-per-line": ["off"],
+  "operator-linebreak": ["off"],
+  "padded-blocks": ["off"],
+  "prefer-arrow-callback": ["off"],
+  "prefer-const": ["error"],
+  "prefer-rest-params": ["error"],
+  "prefer-spread": ["error"],
+  "prettier/prettier": ["error"],
+  "quote-props": ["off"],
+  "quotes": [0],
+  "react/jsx-child-element-spacing": ["off"],
+  "react/jsx-closing-bracket-location": ["off"],
+  "react/jsx-closing-tag-location": ["off"],
+  "react/jsx-curly-newline": ["off"],
+  "react/jsx-curly-spacing": ["off"],
+  "react/jsx-equals-spacing": ["off"],
+  "react/jsx-first-prop-new-line": ["off"],
+  "react/jsx-indent": ["off"],
+  "react/jsx-indent-props": ["off"],
+  "react/jsx-max-props-per-line": ["off"],
+  "react/jsx-newline": ["off"],
+  "react/jsx-one-expression-per-line": ["off"],
+  "react/jsx-props-no-multi-spaces": ["off"],
+  "react/jsx-space-before-closing": ["off"],
+  "react/jsx-tag-spacing": ["off"],
+  "react/jsx-wrap-multilines": ["off"],
+  "require-yield": ["error"],
+  "rest-spread-spacing": ["off"],
+  "semi": ["off"],
+  "semi-spacing": ["off"],
+  "semi-style": ["off"],
+  "space-after-function-name": ["off"],
+  "space-after-keywords": ["off"],
+  "space-before-blocks": ["off"],
+  "space-before-function-paren": ["off"],
+  "space-before-function-parentheses": ["off"],
+  "space-before-keywords": ["off"],
+  "space-in-brackets": ["off"],
+  "space-in-parens": ["off"],
+  "space-infix-ops": ["off"],
+  "space-return-throw-case": ["off"],
+  "space-unary-ops": ["off"],
+  "space-unary-word-ops": ["off"],
+  "standard/array-bracket-even-spacing": ["off"],
+  "standard/computed-property-even-spacing": ["off"],
+  "standard/object-curly-even-spacing": ["off"],
+  "switch-colon-spacing": ["off"],
+  "template-curly-spacing": ["off"],
+  "template-tag-spacing": ["off"],
+  "unicorn/empty-brace-spaces": ["off"],
+  "unicorn/no-nested-ternary": ["off"],
+  "unicorn/number-literal-case": ["off"],
+  "unicorn/template-indent": [0],
+  "use-isnan": ["error"],
+  "valid-typeof": ["error"],
+  "vue-scoped-css/enforce-style-type": ["warn"],
+  "vue-scoped-css/no-deprecated-deep-combinator": ["warn"],
+  "vue-scoped-css/no-parent-of-v-global": ["warn"],
+  "vue-scoped-css/no-parsing-error": ["warn"],
+  "vue-scoped-css/no-unused-keyframes": ["warn"],
+  "vue-scoped-css/no-unused-selector": ["warn"],
+  "vue-scoped-css/require-v-deep-argument": ["warn"],
+  "vue-scoped-css/require-v-global-argument": ["warn"],
+  "vue-scoped-css/require-v-slotted-argument": ["warn"],
+  "vue/array-bracket-newline": ["off"],
+  "vue/array-bracket-spacing": ["off"],
+  "vue/array-element-newline": ["off"],
+  "vue/arrow-spacing": ["off"],
+  "vue/attribute-hyphenation": ["warn"],
+  "vue/attributes-order": ["warn"],
+  "vue/block-spacing": ["off"],
+  "vue/block-tag-newline": ["off"],
+  "vue/brace-style": ["off"],
+  "vue/comma-dangle": ["off"],
+  "vue/comma-spacing": ["off"],
+  "vue/comma-style": ["off"],
+  "vue/comment-directive": ["error"],
+  "vue/component-definition-name-casing": ["warn"],
+  "vue/component-tags-order": ["warn"],
+  "vue/dot-location": ["off"],
+  "vue/first-attribute-linebreak": ["warn"],
+  "vue/func-call-spacing": ["off"],
+  "vue/html-closing-bracket-newline": ["off"],
+  "vue/html-closing-bracket-spacing": ["off"],
+  "vue/html-end-tags": ["off"],
+  "vue/html-indent": ["off"],
+  "vue/html-quotes": ["off"],
+  "vue/html-self-closing": [0],
+  "vue/jsx-uses-vars": ["error"],
+  "vue/key-spacing": ["off"],
+  "vue/keyword-spacing": ["off"],
+  "vue/max-attributes-per-line": ["off"],
+  "vue/max-len": [0],
+  "vue/multi-word-component-names": ["off"],
+  "vue/multiline-html-element-content-newline": ["off"],
+  "vue/multiline-ternary": ["off"],
+  "vue/mustache-interpolation-spacing": ["off"],
+  "vue/no-arrow-functions-in-watch": ["error"],
+  "vue/no-async-in-computed-properties": ["error"],
+  "vue/no-child-content": ["error"],
+  "vue/no-computed-properties-in-data": ["error"],
+  "vue/no-deprecated-data-object-declaration": ["error"],
+  "vue/no-deprecated-destroyed-lifecycle": ["error"],
+  "vue/no-deprecated-dollar-listeners-api": ["error"],
+  "vue/no-deprecated-dollar-scopedslots-api": ["error"],
+  "vue/no-deprecated-events-api": ["error"],
+  "vue/no-deprecated-filter": ["error"],
+  "vue/no-deprecated-functional-template": ["error"],
+  "vue/no-deprecated-html-element-is": ["error"],
+  "vue/no-deprecated-inline-template": ["error"],
+  "vue/no-deprecated-props-default-this": ["error"],
+  "vue/no-deprecated-router-link-tag-prop": ["error"],
+  "vue/no-deprecated-scope-attribute": ["error"],
+  "vue/no-deprecated-slot-attribute": ["error"],
+  "vue/no-deprecated-slot-scope-attribute": ["error"],
+  "vue/no-deprecated-v-bind-sync": ["error"],
+  "vue/no-deprecated-v-is": ["error"],
+  "vue/no-deprecated-v-on-native-modifier": ["error"],
+  "vue/no-deprecated-v-on-number-modifiers": ["error"],
+  "vue/no-deprecated-vue-config-keycodes": ["error"],
+  "vue/no-dupe-keys": ["error"],
+  "vue/no-dupe-v-else-if": ["error"],
+  "vue/no-duplicate-attributes": ["error"],
+  "vue/no-export-in-script-setup": ["error"],
+  "vue/no-expose-after-await": ["error"],
+  "vue/no-extra-parens": ["off"],
+  "vue/no-lifecycle-after-await": ["error"],
+  "vue/no-lone-template": ["warn"],
+  "vue/no-multi-spaces": ["off"],
+  "vue/no-multiple-slot-args": ["warn"],
+  "vue/no-multiple-template-root": ["error"],
+  "vue/no-mutating-props": ["error"],
+  "vue/no-parsing-error": ["error"],
+  "vue/no-ref-as-operand": ["error"],
+  "vue/no-reserved-component-names": ["error"],
+  "vue/no-reserved-keys": ["error"],
+  "vue/no-reserved-props": ["error"],
+  "vue/no-shared-component-data": ["error"],
+  "vue/no-side-effects-in-computed-properties": ["error"],
+  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
+  "vue/no-template-key": ["error"],
+  "vue/no-template-shadow": ["warn"],
+  "vue/no-textarea-mustache": ["error"],
+  "vue/no-unused-components": ["error"],
+  "vue/no-unused-vars": ["error"],
+  "vue/no-use-computed-property-like-method": ["error"],
+  "vue/no-use-v-if-with-v-for": ["error"],
+  "vue/no-useless-template-attributes": ["error"],
+  "vue/no-v-for-template-key-on-child": ["error"],
+  "vue/no-v-html": ["warn"],
+  "vue/no-v-text-v-html-on-component": ["error"],
+  "vue/no-watch-after-await": ["error"],
+  "vue/object-curly-newline": ["off"],
+  "vue/object-curly-spacing": ["off"],
+  "vue/object-property-newline": ["off"],
+  "vue/one-component-per-file": ["warn"],
+  "vue/operator-linebreak": ["off"],
+  "vue/order-in-components": ["warn"],
+  "vue/prefer-import-from-vue": ["error"],
+  "vue/prop-name-casing": ["warn"],
+  "vue/quote-props": ["off"],
+  "vue/require-component-is": ["error"],
+  "vue/require-default-prop": ["warn"],
+  "vue/require-explicit-emits": ["warn"],
+  "vue/require-prop-type-constructor": ["error"],
+  "vue/require-prop-types": ["warn"],
+  "vue/require-render-return": ["error"],
+  "vue/require-slots-as-functions": ["error"],
+  "vue/require-toggle-inside-transition": ["error"],
+  "vue/require-v-for-key": ["error"],
+  "vue/require-valid-default-prop": ["error"],
+  "vue/return-in-computed-property": ["error"],
+  "vue/return-in-emits-validator": ["error"],
+  "vue/script-indent": ["off"],
+  "vue/singleline-html-element-content-newline": ["off"],
+  "vue/space-in-parens": ["off"],
+  "vue/space-infix-ops": ["off"],
+  "vue/space-unary-ops": ["off"],
+  "vue/template-curly-spacing": ["off"],
+  "vue/this-in-template": ["warn"],
+  "vue/use-v-on-exact": ["error"],
+  "vue/v-bind-style": ["warn"],
+  "vue/v-on-event-hyphenation": [
+    "warn",
+    "always",
+    {
+      "autofix": true
+    }
+  ],
+  "vue/v-on-style": ["warn"],
+  "vue/v-slot-style": ["warn"],
+  "vue/valid-attribute-name": ["error"],
+  "vue/valid-define-emits": ["error"],
+  "vue/valid-define-props": ["error"],
+  "vue/valid-next-tick": ["error"],
+  "vue/valid-template-root": ["error"],
+  "vue/valid-v-bind": ["error"],
+  "vue/valid-v-cloak": ["error"],
+  "vue/valid-v-else": ["error"],
+  "vue/valid-v-else-if": ["error"],
+  "vue/valid-v-for": ["error"],
+  "vue/valid-v-html": ["error"],
+  "vue/valid-v-if": ["error"],
+  "vue/valid-v-is": ["error"],
+  "vue/valid-v-memo": ["error"],
+  "vue/valid-v-model": ["error"],
+  "vue/valid-v-on": ["error"],
+  "vue/valid-v-once": ["error"],
+  "vue/valid-v-pre": ["error"],
+  "vue/valid-v-show": ["error"],
+  "vue/valid-v-slot": ["error"],
+  "vue/valid-v-text": ["error"],
+  "wrap-iife": ["off"],
+  "wrap-regex": ["off"],
+  "yield-star-spacing": ["off"]
+}

From 38c8be3b8fd479873c8f6dc2e9d64d65be611958 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Tue, 13 Aug 2024 22:47:59 +0200
Subject: [PATCH 097/273] print: move eslint config to .eslintrc.json

The config migrator needs the configuration to
be in a separate file.
https://eslint.org/blog/2024/05/eslint-configuration-migrator/
---
 print/.eslintrc.json | 30 ++++++++++++++++++++++++++++++
 print/package.json   | 34 ----------------------------------
 2 files changed, 30 insertions(+), 34 deletions(-)
 create mode 100644 print/.eslintrc.json

diff --git a/print/.eslintrc.json b/print/.eslintrc.json
new file mode 100644
index 0000000000..01dbd2518d
--- /dev/null
+++ b/print/.eslintrc.json
@@ -0,0 +1,30 @@
+{
+  "root": true,
+  "env": {
+    "browser": true,
+    "node": true
+  },
+  "ignorePatterns": ["common/**/*"],
+  "extends": [
+    "plugin:vue/vue3-recommended",
+    "plugin:vue-scoped-css/vue3-recommended",
+    "@nuxt/eslint-config",
+    "eslint:recommended",
+    "plugin:prettier/recommended"
+  ],
+  "rules": {
+    "no-undef": "off",
+    "no-console": "off",
+    "prettier/prettier": "error",
+    "prefer-const": "error",
+    "vue/multi-word-component-names": "off",
+    "local-rules/matching-translation-keys": [
+      "error",
+      {
+        "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
+        "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
+      }
+    ]
+  },
+  "plugins": ["eslint-plugin-local-rules"]
+}
diff --git a/print/package.json b/print/package.json
index f59ab8ea44..cffbbcedea 100644
--- a/print/package.json
+++ b/print/package.json
@@ -55,39 +55,5 @@
     "vitest": "2.0.5",
     "vite-svg-loader": "5.1.0",
     "vue": "3.4.38"
-  },
-  "eslintConfig": {
-    "root": true,
-    "env": {
-      "browser": true,
-      "node": true
-    },
-    "ignorePatterns": [
-      "common/**/*"
-    ],
-    "extends": [
-      "plugin:vue/vue3-recommended",
-      "plugin:vue-scoped-css/vue3-recommended",
-      "@nuxt/eslint-config",
-      "eslint:recommended",
-      "plugin:prettier/recommended"
-    ],
-    "rules": {
-      "no-undef": "off",
-      "no-console": "off",
-      "prettier/prettier": "error",
-      "prefer-const": "error",
-      "vue/multi-word-component-names": "off",
-      "local-rules/matching-translation-keys": [
-        "error",
-        {
-          "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
-          "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
-        }
-      ]
-    },
-    "plugins": [
-      "eslint-plugin-local-rules"
-    ]
   }
 }

From 05c40fe59641b27553fead8ff83f6b73cadb3c9c Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Tue, 13 Aug 2024 22:58:28 +0200
Subject: [PATCH 098/273] print: migrate to flat config

Using npx @eslint/migrate-config .eslintrc.json
Then add the additional packages needed
(@eslint/compat, globals, @eslint/eslintrc, @eslint/js)
Add paths from the .gitignore file to the ignored patterns.
Also lint .ts files with eslint (this seems not to be the default).
Remove the options from the call to eslint which are not
supported anymore in the package.json.
Ignore common, .nuxt and .output explicitly, because it did not work with
includeIgnoreFile.

Issue: #5282
---
 print/.eslintrc.json              |  30 --
 print/components/PicassoChunk.vue |   4 +-
 print/components/config/Cover.vue |   4 +-
 print/eslint-config-js.json       | 680 ++++++++++++++---------------
 print/eslint-config-ts.json       | 690 ++++++++++++++---------------
 print/eslint-config-vue.json      | 691 +++++++++++++++---------------
 print/eslint.config.mjs           |  64 +++
 print/package-lock.json           | 105 +++--
 print/package.json                |   8 +-
 9 files changed, 1158 insertions(+), 1118 deletions(-)
 delete mode 100644 print/.eslintrc.json
 create mode 100644 print/eslint.config.mjs

diff --git a/print/.eslintrc.json b/print/.eslintrc.json
deleted file mode 100644
index 01dbd2518d..0000000000
--- a/print/.eslintrc.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "root": true,
-  "env": {
-    "browser": true,
-    "node": true
-  },
-  "ignorePatterns": ["common/**/*"],
-  "extends": [
-    "plugin:vue/vue3-recommended",
-    "plugin:vue-scoped-css/vue3-recommended",
-    "@nuxt/eslint-config",
-    "eslint:recommended",
-    "plugin:prettier/recommended"
-  ],
-  "rules": {
-    "no-undef": "off",
-    "no-console": "off",
-    "prettier/prettier": "error",
-    "prefer-const": "error",
-    "vue/multi-word-component-names": "off",
-    "local-rules/matching-translation-keys": [
-      "error",
-      {
-        "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
-        "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
-      }
-    ]
-  },
-  "plugins": ["eslint-plugin-local-rules"]
-}
diff --git a/print/components/PicassoChunk.vue b/print/components/PicassoChunk.vue
index aafda8080f..5a40106d3a 100644
--- a/print/components/PicassoChunk.vue
+++ b/print/components/PicassoChunk.vue
@@ -9,7 +9,9 @@
           {{ $t('print.picasso.title') }}
           {{ period.description }}
         </h1>
-        <p class="tw-text-md tw-text-end">{{ camp.organizer }}</p>
+        <p class="tw-text-md tw-text-end">
+          {{ camp.organizer }}
+        </p>
       </div>
 
       <div class="tw-flex-auto fullwidth">
diff --git a/print/components/config/Cover.vue b/print/components/config/Cover.vue
index b06e46e0ac..da4555a75e 100644
--- a/print/components/config/Cover.vue
+++ b/print/components/config/Cover.vue
@@ -1,6 +1,8 @@
 <template>
   <div class="tw-break-after-page tw-text-center">
-    <div class="tw-font-medium tw-mt-20 tw-text-xl">{{ camp.name }}</div>
+    <div class="tw-font-medium tw-mt-20 tw-text-xl">
+      {{ camp.name }}
+    </div>
 
     <div :id="`content_${index}_cover`" class="tw-my-12 tw-text-6xl tw-font-semibold">
       {{ camp.title }}
diff --git a/print/eslint-config-js.json b/print/eslint-config-js.json
index 6642589d87..8fe2133928 100644
--- a/print/eslint-config-js.json
+++ b/print/eslint-config-js.json
@@ -1,367 +1,369 @@
 {
-  "@babel/object-curly-spacing": ["off"],
-  "@babel/semi": ["off"],
-  "@typescript-eslint/block-spacing": ["off"],
-  "@typescript-eslint/brace-style": ["off"],
-  "@typescript-eslint/comma-dangle": ["off"],
-  "@typescript-eslint/comma-spacing": ["off"],
-  "@typescript-eslint/func-call-spacing": ["off"],
-  "@typescript-eslint/indent": ["off"],
-  "@typescript-eslint/key-spacing": ["off"],
-  "@typescript-eslint/keyword-spacing": ["off"],
+  "@babel/object-curly-spacing": [0],
+  "@babel/semi": [0],
+  "@typescript-eslint/block-spacing": [0],
+  "@typescript-eslint/brace-style": [0],
+  "@typescript-eslint/comma-dangle": [0],
+  "@typescript-eslint/comma-spacing": [0],
+  "@typescript-eslint/func-call-spacing": [0],
+  "@typescript-eslint/indent": [0],
+  "@typescript-eslint/key-spacing": [0],
+  "@typescript-eslint/keyword-spacing": [0],
   "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": ["off"],
-  "@typescript-eslint/no-extra-parens": ["off"],
-  "@typescript-eslint/no-extra-semi": ["off"],
-  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/member-delimiter-style": [0],
+  "@typescript-eslint/no-extra-parens": [0],
+  "@typescript-eslint/no-extra-semi": [0],
+  "@typescript-eslint/object-curly-spacing": [0],
   "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": ["off"],
-  "@typescript-eslint/space-before-blocks": ["off"],
-  "@typescript-eslint/space-before-function-paren": ["off"],
-  "@typescript-eslint/space-infix-ops": ["off"],
-  "@typescript-eslint/type-annotation-spacing": ["off"],
-  "array-bracket-newline": ["off"],
-  "array-bracket-spacing": ["off"],
-  "array-element-newline": ["off"],
-  "arrow-body-style": ["off"],
-  "arrow-parens": ["off"],
-  "arrow-spacing": ["off"],
-  "babel/object-curly-spacing": ["off"],
+  "@typescript-eslint/semi": [0],
+  "@typescript-eslint/space-before-blocks": [0],
+  "@typescript-eslint/space-before-function-paren": [0],
+  "@typescript-eslint/space-infix-ops": [0],
+  "@typescript-eslint/type-annotation-spacing": [0],
+  "array-bracket-newline": [0],
+  "array-bracket-spacing": [0],
+  "array-element-newline": [0],
+  "arrow-body-style": [0],
+  "arrow-parens": [0],
+  "arrow-spacing": [0],
+  "babel/object-curly-spacing": [0],
   "babel/quotes": [0],
-  "babel/semi": ["off"],
-  "block-spacing": ["off"],
-  "brace-style": ["off"],
-  "comma-dangle": ["off"],
-  "comma-spacing": ["off"],
-  "comma-style": ["off"],
-  "computed-property-spacing": ["off"],
-  "constructor-super": ["error"],
+  "babel/semi": [0],
+  "block-spacing": [0],
+  "brace-style": [0],
+  "comma-dangle": [0],
+  "comma-spacing": [0],
+  "comma-style": [0],
+  "computed-property-spacing": [0],
+  "constructor-super": [2],
   "curly": [0],
-  "dot-location": ["off"],
-  "eol-last": ["off"],
-  "flowtype/boolean-style": ["off"],
-  "flowtype/delimiter-dangle": ["off"],
-  "flowtype/generic-spacing": ["off"],
-  "flowtype/object-type-curly-spacing": ["off"],
-  "flowtype/object-type-delimiter": ["off"],
-  "flowtype/quotes": ["off"],
-  "flowtype/semi": ["off"],
-  "flowtype/space-after-type-colon": ["off"],
-  "flowtype/space-before-generic-bracket": ["off"],
-  "flowtype/space-before-type-colon": ["off"],
-  "flowtype/union-intersection-spacing": ["off"],
-  "for-direction": ["error"],
-  "func-call-spacing": ["off"],
-  "function-call-argument-newline": ["off"],
-  "function-paren-newline": ["off"],
-  "generator-star": ["off"],
-  "generator-star-spacing": ["off"],
-  "getter-return": ["error"],
-  "implicit-arrow-linebreak": ["off"],
-  "indent": ["off"],
-  "indent-legacy": ["off"],
-  "jsx-quotes": ["off"],
-  "key-spacing": ["off"],
-  "keyword-spacing": ["off"],
-  "linebreak-style": ["off"],
+  "dot-location": [0],
+  "eol-last": [0],
+  "flowtype/boolean-style": [0],
+  "flowtype/delimiter-dangle": [0],
+  "flowtype/generic-spacing": [0],
+  "flowtype/object-type-curly-spacing": [0],
+  "flowtype/object-type-delimiter": [0],
+  "flowtype/quotes": [0],
+  "flowtype/semi": [0],
+  "flowtype/space-after-type-colon": [0],
+  "flowtype/space-before-generic-bracket": [0],
+  "flowtype/space-before-type-colon": [0],
+  "flowtype/union-intersection-spacing": [0],
+  "for-direction": [2],
+  "func-call-spacing": [0],
+  "function-call-argument-newline": [0],
+  "function-paren-newline": [0],
+  "generator-star": [0],
+  "generator-star-spacing": [0],
+  "getter-return": [2],
+  "implicit-arrow-linebreak": [0],
+  "indent": [0],
+  "indent-legacy": [0],
+  "jsx-quotes": [0],
+  "key-spacing": [0],
+  "keyword-spacing": [0],
+  "linebreak-style": [0],
   "lines-around-comment": [0],
   "local-rules/matching-translation-keys": [
-    "error",
+    2,
     {
       "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
       "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
     }
   ],
   "max-len": [0],
-  "max-statements-per-line": ["off"],
-  "multiline-ternary": ["off"],
-  "new-parens": ["off"],
-  "newline-per-chained-call": ["off"],
-  "no-arrow-condition": ["off"],
-  "no-async-promise-executor": ["error"],
-  "no-case-declarations": ["error"],
-  "no-class-assign": ["error"],
-  "no-comma-dangle": ["off"],
-  "no-compare-neg-zero": ["error"],
-  "no-cond-assign": ["error"],
+  "max-statements-per-line": [0],
+  "multiline-ternary": [0],
+  "new-parens": [0],
+  "newline-per-chained-call": [0],
+  "no-arrow-condition": [0],
+  "no-async-promise-executor": [2],
+  "no-case-declarations": [2],
+  "no-class-assign": [2],
+  "no-comma-dangle": [0],
+  "no-compare-neg-zero": [2],
+  "no-cond-assign": [2],
   "no-confusing-arrow": [0],
-  "no-console": ["off"],
-  "no-const-assign": ["error"],
-  "no-constant-condition": ["error"],
-  "no-control-regex": ["error"],
-  "no-debugger": ["error"],
-  "no-delete-var": ["error"],
-  "no-dupe-args": ["error"],
-  "no-dupe-class-members": ["error"],
-  "no-dupe-else-if": ["error"],
-  "no-dupe-keys": ["error"],
-  "no-duplicate-case": ["error"],
-  "no-empty": ["error"],
-  "no-empty-character-class": ["error"],
-  "no-empty-pattern": ["error"],
-  "no-ex-assign": ["error"],
-  "no-extra-boolean-cast": ["error"],
-  "no-extra-parens": ["off"],
-  "no-extra-semi": ["off"],
-  "no-fallthrough": ["error"],
-  "no-floating-decimal": ["off"],
-  "no-func-assign": ["error"],
-  "no-global-assign": ["error"],
-  "no-import-assign": ["error"],
-  "no-inner-declarations": ["error"],
-  "no-invalid-regexp": ["error"],
-  "no-irregular-whitespace": ["error"],
-  "no-loss-of-precision": ["error"],
-  "no-misleading-character-class": ["error"],
+  "no-console": [0],
+  "no-const-assign": [2],
+  "no-constant-binary-expression": [2],
+  "no-constant-condition": [2],
+  "no-control-regex": [2],
+  "no-debugger": [2],
+  "no-delete-var": [2],
+  "no-dupe-args": [2],
+  "no-dupe-class-members": [2],
+  "no-dupe-else-if": [2],
+  "no-dupe-keys": [2],
+  "no-duplicate-case": [2],
+  "no-empty": [2],
+  "no-empty-character-class": [2],
+  "no-empty-pattern": [2],
+  "no-empty-static-block": [2],
+  "no-ex-assign": [2],
+  "no-extra-boolean-cast": [2],
+  "no-extra-parens": [0],
+  "no-extra-semi": [0],
+  "no-fallthrough": [2],
+  "no-floating-decimal": [0],
+  "no-func-assign": [2],
+  "no-global-assign": [2],
+  "no-import-assign": [2],
+  "no-invalid-regexp": [2],
+  "no-irregular-whitespace": [2],
+  "no-loss-of-precision": [2],
+  "no-misleading-character-class": [2],
   "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": ["off"],
-  "no-multi-spaces": ["off"],
-  "no-multiple-empty-lines": ["off"],
-  "no-new-symbol": ["error"],
-  "no-nonoctal-decimal-escape": ["error"],
-  "no-obj-calls": ["error"],
-  "no-octal": ["error"],
-  "no-prototype-builtins": ["error"],
-  "no-redeclare": ["error"],
-  "no-regex-spaces": ["error"],
-  "no-reserved-keys": ["off"],
-  "no-self-assign": ["error"],
-  "no-setter-return": ["error"],
-  "no-shadow-restricted-names": ["error"],
-  "no-space-before-semi": ["off"],
-  "no-spaced-func": ["off"],
-  "no-sparse-arrays": ["error"],
+  "no-mixed-spaces-and-tabs": [0],
+  "no-multi-spaces": [0],
+  "no-multiple-empty-lines": [0],
+  "no-new-native-nonconstructor": [2],
+  "no-nonoctal-decimal-escape": [2],
+  "no-obj-calls": [2],
+  "no-octal": [2],
+  "no-prototype-builtins": [2],
+  "no-redeclare": [2],
+  "no-regex-spaces": [2],
+  "no-reserved-keys": [0],
+  "no-self-assign": [2],
+  "no-setter-return": [2],
+  "no-shadow-restricted-names": [2],
+  "no-space-before-semi": [0],
+  "no-spaced-func": [0],
+  "no-sparse-arrays": [2],
   "no-tabs": [0],
-  "no-this-before-super": ["error"],
-  "no-trailing-spaces": ["off"],
-  "no-undef": ["off"],
+  "no-this-before-super": [2],
+  "no-trailing-spaces": [0],
+  "no-undef": [0],
   "no-unexpected-multiline": [0],
-  "no-unreachable": ["error"],
-  "no-unsafe-finally": ["error"],
-  "no-unsafe-negation": ["error"],
-  "no-unsafe-optional-chaining": ["error"],
-  "no-unused-labels": ["error"],
-  "no-unused-vars": ["error"],
-  "no-useless-backreference": ["error"],
-  "no-useless-catch": ["error"],
-  "no-useless-escape": ["error"],
-  "no-whitespace-before-property": ["off"],
-  "no-with": ["error"],
-  "no-wrap-func": ["off"],
-  "nonblock-statement-body-position": ["off"],
-  "object-curly-newline": ["off"],
-  "object-curly-spacing": ["off"],
-  "object-property-newline": ["off"],
-  "one-var-declaration-per-line": ["off"],
-  "operator-linebreak": ["off"],
-  "padded-blocks": ["off"],
-  "prefer-arrow-callback": ["off"],
-  "prefer-const": ["error"],
-  "prettier/prettier": ["error"],
-  "quote-props": ["off"],
+  "no-unreachable": [2],
+  "no-unsafe-finally": [2],
+  "no-unsafe-negation": [2],
+  "no-unsafe-optional-chaining": [2],
+  "no-unused-labels": [2],
+  "no-unused-private-class-members": [2],
+  "no-unused-vars": [2],
+  "no-useless-backreference": [2],
+  "no-useless-catch": [2],
+  "no-useless-escape": [2],
+  "no-whitespace-before-property": [0],
+  "no-with": [2],
+  "no-wrap-func": [0],
+  "nonblock-statement-body-position": [0],
+  "object-curly-newline": [0],
+  "object-curly-spacing": [0],
+  "object-property-newline": [0],
+  "one-var-declaration-per-line": [0],
+  "operator-linebreak": [0],
+  "padded-blocks": [0],
+  "prefer-arrow-callback": [0],
+  "prefer-const": [2],
+  "prettier/prettier": [2],
+  "quote-props": [0],
   "quotes": [0],
-  "react/jsx-child-element-spacing": ["off"],
-  "react/jsx-closing-bracket-location": ["off"],
-  "react/jsx-closing-tag-location": ["off"],
-  "react/jsx-curly-newline": ["off"],
-  "react/jsx-curly-spacing": ["off"],
-  "react/jsx-equals-spacing": ["off"],
-  "react/jsx-first-prop-new-line": ["off"],
-  "react/jsx-indent": ["off"],
-  "react/jsx-indent-props": ["off"],
-  "react/jsx-max-props-per-line": ["off"],
-  "react/jsx-newline": ["off"],
-  "react/jsx-one-expression-per-line": ["off"],
-  "react/jsx-props-no-multi-spaces": ["off"],
-  "react/jsx-space-before-closing": ["off"],
-  "react/jsx-tag-spacing": ["off"],
-  "react/jsx-wrap-multilines": ["off"],
-  "require-yield": ["error"],
-  "rest-spread-spacing": ["off"],
-  "semi": ["off"],
-  "semi-spacing": ["off"],
-  "semi-style": ["off"],
-  "space-after-function-name": ["off"],
-  "space-after-keywords": ["off"],
-  "space-before-blocks": ["off"],
-  "space-before-function-paren": ["off"],
-  "space-before-function-parentheses": ["off"],
-  "space-before-keywords": ["off"],
-  "space-in-brackets": ["off"],
-  "space-in-parens": ["off"],
-  "space-infix-ops": ["off"],
-  "space-return-throw-case": ["off"],
-  "space-unary-ops": ["off"],
-  "space-unary-word-ops": ["off"],
-  "standard/array-bracket-even-spacing": ["off"],
-  "standard/computed-property-even-spacing": ["off"],
-  "standard/object-curly-even-spacing": ["off"],
-  "switch-colon-spacing": ["off"],
-  "template-curly-spacing": ["off"],
-  "template-tag-spacing": ["off"],
-  "unicorn/empty-brace-spaces": ["off"],
-  "unicorn/no-nested-ternary": ["off"],
-  "unicorn/number-literal-case": ["off"],
+  "react/jsx-child-element-spacing": [0],
+  "react/jsx-closing-bracket-location": [0],
+  "react/jsx-closing-tag-location": [0],
+  "react/jsx-curly-newline": [0],
+  "react/jsx-curly-spacing": [0],
+  "react/jsx-equals-spacing": [0],
+  "react/jsx-first-prop-new-line": [0],
+  "react/jsx-indent": [0],
+  "react/jsx-indent-props": [0],
+  "react/jsx-max-props-per-line": [0],
+  "react/jsx-newline": [0],
+  "react/jsx-one-expression-per-line": [0],
+  "react/jsx-props-no-multi-spaces": [0],
+  "react/jsx-space-before-closing": [0],
+  "react/jsx-tag-spacing": [0],
+  "react/jsx-wrap-multilines": [0],
+  "require-yield": [2],
+  "rest-spread-spacing": [0],
+  "semi": [0],
+  "semi-spacing": [0],
+  "semi-style": [0],
+  "space-after-function-name": [0],
+  "space-after-keywords": [0],
+  "space-before-blocks": [0],
+  "space-before-function-paren": [0],
+  "space-before-function-parentheses": [0],
+  "space-before-keywords": [0],
+  "space-in-brackets": [0],
+  "space-in-parens": [0],
+  "space-infix-ops": [0],
+  "space-return-throw-case": [0],
+  "space-unary-ops": [0],
+  "space-unary-word-ops": [0],
+  "standard/array-bracket-even-spacing": [0],
+  "standard/computed-property-even-spacing": [0],
+  "standard/object-curly-even-spacing": [0],
+  "switch-colon-spacing": [0],
+  "template-curly-spacing": [0],
+  "template-tag-spacing": [0],
+  "unicorn/empty-brace-spaces": [0],
+  "unicorn/no-nested-ternary": [0],
+  "unicorn/number-literal-case": [0],
   "unicorn/template-indent": [0],
-  "use-isnan": ["error"],
-  "valid-typeof": ["error"],
-  "vue-scoped-css/enforce-style-type": ["warn"],
-  "vue-scoped-css/no-deprecated-deep-combinator": ["warn"],
-  "vue-scoped-css/no-parent-of-v-global": ["warn"],
-  "vue-scoped-css/no-parsing-error": ["warn"],
-  "vue-scoped-css/no-unused-keyframes": ["warn"],
-  "vue-scoped-css/no-unused-selector": ["warn"],
-  "vue-scoped-css/require-v-deep-argument": ["warn"],
-  "vue-scoped-css/require-v-global-argument": ["warn"],
-  "vue-scoped-css/require-v-slotted-argument": ["warn"],
-  "vue/array-bracket-newline": ["off"],
-  "vue/array-bracket-spacing": ["off"],
-  "vue/array-element-newline": ["off"],
-  "vue/arrow-spacing": ["off"],
-  "vue/attribute-hyphenation": ["warn"],
-  "vue/attributes-order": ["warn"],
-  "vue/block-spacing": ["off"],
-  "vue/block-tag-newline": ["off"],
-  "vue/brace-style": ["off"],
-  "vue/comma-dangle": ["off"],
-  "vue/comma-spacing": ["off"],
-  "vue/comma-style": ["off"],
-  "vue/comment-directive": ["error"],
-  "vue/component-definition-name-casing": ["warn"],
-  "vue/component-tags-order": ["warn"],
-  "vue/dot-location": ["off"],
-  "vue/first-attribute-linebreak": ["warn"],
-  "vue/func-call-spacing": ["off"],
-  "vue/html-closing-bracket-newline": ["off"],
-  "vue/html-closing-bracket-spacing": ["off"],
-  "vue/html-end-tags": ["off"],
-  "vue/html-indent": ["off"],
-  "vue/html-quotes": ["off"],
+  "use-isnan": [2],
+  "valid-typeof": [2],
+  "vue-scoped-css/enforce-style-type": [1],
+  "vue-scoped-css/no-deprecated-deep-combinator": [1],
+  "vue-scoped-css/no-parent-of-v-global": [1],
+  "vue-scoped-css/no-parsing-error": [1],
+  "vue-scoped-css/no-unused-keyframes": [1],
+  "vue-scoped-css/no-unused-selector": [1],
+  "vue-scoped-css/require-v-deep-argument": [1],
+  "vue-scoped-css/require-v-global-argument": [1],
+  "vue-scoped-css/require-v-slotted-argument": [1],
+  "vue/array-bracket-newline": [0],
+  "vue/array-bracket-spacing": [0],
+  "vue/array-element-newline": [0],
+  "vue/arrow-spacing": [0],
+  "vue/attribute-hyphenation": [1],
+  "vue/attributes-order": [1],
+  "vue/block-spacing": [0],
+  "vue/block-tag-newline": [0],
+  "vue/brace-style": [0],
+  "vue/comma-dangle": [0],
+  "vue/comma-spacing": [0],
+  "vue/comma-style": [0],
+  "vue/comment-directive": [2],
+  "vue/component-definition-name-casing": [1],
+  "vue/component-tags-order": [1],
+  "vue/dot-location": [0],
+  "vue/first-attribute-linebreak": [1],
+  "vue/func-call-spacing": [0],
+  "vue/html-closing-bracket-newline": [0],
+  "vue/html-closing-bracket-spacing": [0],
+  "vue/html-end-tags": [0],
+  "vue/html-indent": [0],
+  "vue/html-quotes": [0],
   "vue/html-self-closing": [0],
-  "vue/jsx-uses-vars": ["error"],
-  "vue/key-spacing": ["off"],
-  "vue/keyword-spacing": ["off"],
-  "vue/max-attributes-per-line": ["off"],
+  "vue/jsx-uses-vars": [2],
+  "vue/key-spacing": [0],
+  "vue/keyword-spacing": [0],
+  "vue/max-attributes-per-line": [0],
   "vue/max-len": [0],
-  "vue/multi-word-component-names": ["off"],
-  "vue/multiline-html-element-content-newline": ["off"],
-  "vue/multiline-ternary": ["off"],
-  "vue/mustache-interpolation-spacing": ["off"],
-  "vue/no-arrow-functions-in-watch": ["error"],
-  "vue/no-async-in-computed-properties": ["error"],
-  "vue/no-child-content": ["error"],
-  "vue/no-computed-properties-in-data": ["error"],
-  "vue/no-deprecated-data-object-declaration": ["error"],
-  "vue/no-deprecated-destroyed-lifecycle": ["error"],
-  "vue/no-deprecated-dollar-listeners-api": ["error"],
-  "vue/no-deprecated-dollar-scopedslots-api": ["error"],
-  "vue/no-deprecated-events-api": ["error"],
-  "vue/no-deprecated-filter": ["error"],
-  "vue/no-deprecated-functional-template": ["error"],
-  "vue/no-deprecated-html-element-is": ["error"],
-  "vue/no-deprecated-inline-template": ["error"],
-  "vue/no-deprecated-props-default-this": ["error"],
-  "vue/no-deprecated-router-link-tag-prop": ["error"],
-  "vue/no-deprecated-scope-attribute": ["error"],
-  "vue/no-deprecated-slot-attribute": ["error"],
-  "vue/no-deprecated-slot-scope-attribute": ["error"],
-  "vue/no-deprecated-v-bind-sync": ["error"],
-  "vue/no-deprecated-v-is": ["error"],
-  "vue/no-deprecated-v-on-native-modifier": ["error"],
-  "vue/no-deprecated-v-on-number-modifiers": ["error"],
-  "vue/no-deprecated-vue-config-keycodes": ["error"],
-  "vue/no-dupe-keys": ["error"],
-  "vue/no-dupe-v-else-if": ["error"],
-  "vue/no-duplicate-attributes": ["error"],
-  "vue/no-export-in-script-setup": ["error"],
-  "vue/no-expose-after-await": ["error"],
-  "vue/no-extra-parens": ["off"],
-  "vue/no-lifecycle-after-await": ["error"],
-  "vue/no-lone-template": ["warn"],
-  "vue/no-multi-spaces": ["off"],
-  "vue/no-multiple-slot-args": ["warn"],
-  "vue/no-mutating-props": ["error"],
-  "vue/no-parsing-error": ["error"],
-  "vue/no-ref-as-operand": ["error"],
-  "vue/no-reserved-component-names": ["error"],
-  "vue/no-reserved-keys": ["error"],
-  "vue/no-reserved-props": ["error"],
-  "vue/no-shared-component-data": ["error"],
-  "vue/no-side-effects-in-computed-properties": ["error"],
-  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
-  "vue/no-template-key": ["error"],
-  "vue/no-template-shadow": ["warn"],
-  "vue/no-textarea-mustache": ["error"],
-  "vue/no-unused-components": ["error"],
-  "vue/no-unused-vars": ["error"],
-  "vue/no-use-computed-property-like-method": ["error"],
-  "vue/no-use-v-if-with-v-for": ["error"],
-  "vue/no-useless-template-attributes": ["error"],
-  "vue/no-v-for-template-key-on-child": ["error"],
-  "vue/no-v-html": ["warn"],
-  "vue/no-v-text-v-html-on-component": ["error"],
-  "vue/no-watch-after-await": ["error"],
-  "vue/object-curly-newline": ["off"],
-  "vue/object-curly-spacing": ["off"],
-  "vue/object-property-newline": ["off"],
-  "vue/one-component-per-file": ["warn"],
-  "vue/operator-linebreak": ["off"],
-  "vue/order-in-components": ["warn"],
-  "vue/prefer-import-from-vue": ["error"],
-  "vue/prop-name-casing": ["warn"],
-  "vue/quote-props": ["off"],
-  "vue/require-component-is": ["error"],
-  "vue/require-default-prop": ["warn"],
-  "vue/require-explicit-emits": ["warn"],
-  "vue/require-prop-type-constructor": ["error"],
-  "vue/require-prop-types": ["warn"],
-  "vue/require-render-return": ["error"],
-  "vue/require-slots-as-functions": ["error"],
-  "vue/require-toggle-inside-transition": ["error"],
-  "vue/require-v-for-key": ["error"],
-  "vue/require-valid-default-prop": ["error"],
-  "vue/return-in-computed-property": ["error"],
-  "vue/return-in-emits-validator": ["error"],
-  "vue/script-indent": ["off"],
-  "vue/singleline-html-element-content-newline": ["off"],
-  "vue/space-in-parens": ["off"],
-  "vue/space-infix-ops": ["off"],
-  "vue/space-unary-ops": ["off"],
-  "vue/template-curly-spacing": ["off"],
-  "vue/this-in-template": ["warn"],
-  "vue/use-v-on-exact": ["error"],
-  "vue/v-bind-style": ["warn"],
+  "vue/multi-word-component-names": [0],
+  "vue/multiline-html-element-content-newline": [0],
+  "vue/multiline-ternary": [0],
+  "vue/mustache-interpolation-spacing": [0],
+  "vue/no-arrow-functions-in-watch": [2],
+  "vue/no-async-in-computed-properties": [2],
+  "vue/no-child-content": [2],
+  "vue/no-computed-properties-in-data": [2],
+  "vue/no-deprecated-data-object-declaration": [2],
+  "vue/no-deprecated-destroyed-lifecycle": [2],
+  "vue/no-deprecated-dollar-listeners-api": [2],
+  "vue/no-deprecated-dollar-scopedslots-api": [2],
+  "vue/no-deprecated-events-api": [2],
+  "vue/no-deprecated-filter": [2],
+  "vue/no-deprecated-functional-template": [2],
+  "vue/no-deprecated-html-element-is": [2],
+  "vue/no-deprecated-inline-template": [2],
+  "vue/no-deprecated-props-default-this": [2],
+  "vue/no-deprecated-router-link-tag-prop": [2],
+  "vue/no-deprecated-scope-attribute": [2],
+  "vue/no-deprecated-slot-attribute": [2],
+  "vue/no-deprecated-slot-scope-attribute": [2],
+  "vue/no-deprecated-v-bind-sync": [2],
+  "vue/no-deprecated-v-is": [2],
+  "vue/no-deprecated-v-on-native-modifier": [2],
+  "vue/no-deprecated-v-on-number-modifiers": [2],
+  "vue/no-deprecated-vue-config-keycodes": [2],
+  "vue/no-dupe-keys": [2],
+  "vue/no-dupe-v-else-if": [2],
+  "vue/no-duplicate-attributes": [2],
+  "vue/no-export-in-script-setup": [2],
+  "vue/no-expose-after-await": [2],
+  "vue/no-extra-parens": [0],
+  "vue/no-lifecycle-after-await": [2],
+  "vue/no-lone-template": [1],
+  "vue/no-multi-spaces": [0],
+  "vue/no-multiple-slot-args": [1],
+  "vue/no-mutating-props": [2],
+  "vue/no-parsing-error": [2],
+  "vue/no-ref-as-operand": [2],
+  "vue/no-reserved-component-names": [2],
+  "vue/no-reserved-keys": [2],
+  "vue/no-reserved-props": [2],
+  "vue/no-shared-component-data": [2],
+  "vue/no-side-effects-in-computed-properties": [2],
+  "vue/no-spaces-around-equal-signs-in-attribute": [0],
+  "vue/no-template-key": [2],
+  "vue/no-template-shadow": [1],
+  "vue/no-textarea-mustache": [2],
+  "vue/no-unused-components": [2],
+  "vue/no-unused-vars": [2],
+  "vue/no-use-computed-property-like-method": [2],
+  "vue/no-use-v-if-with-v-for": [2],
+  "vue/no-useless-template-attributes": [2],
+  "vue/no-v-for-template-key-on-child": [2],
+  "vue/no-v-html": [1],
+  "vue/no-v-text-v-html-on-component": [2],
+  "vue/no-watch-after-await": [2],
+  "vue/object-curly-newline": [0],
+  "vue/object-curly-spacing": [0],
+  "vue/object-property-newline": [0],
+  "vue/one-component-per-file": [1],
+  "vue/operator-linebreak": [0],
+  "vue/order-in-components": [1],
+  "vue/prefer-import-from-vue": [2],
+  "vue/prop-name-casing": [1],
+  "vue/quote-props": [0],
+  "vue/require-component-is": [2],
+  "vue/require-default-prop": [1],
+  "vue/require-explicit-emits": [1],
+  "vue/require-prop-type-constructor": [2],
+  "vue/require-prop-types": [1],
+  "vue/require-render-return": [2],
+  "vue/require-slots-as-functions": [2],
+  "vue/require-toggle-inside-transition": [2],
+  "vue/require-v-for-key": [2],
+  "vue/require-valid-default-prop": [2],
+  "vue/return-in-computed-property": [2],
+  "vue/return-in-emits-validator": [2],
+  "vue/script-indent": [0],
+  "vue/singleline-html-element-content-newline": [0],
+  "vue/space-in-parens": [0],
+  "vue/space-infix-ops": [0],
+  "vue/space-unary-ops": [0],
+  "vue/template-curly-spacing": [0],
+  "vue/this-in-template": [1],
+  "vue/use-v-on-exact": [2],
+  "vue/v-bind-style": [1],
   "vue/v-on-event-hyphenation": [
-    "warn",
+    1,
     "always",
     {
       "autofix": true
     }
   ],
-  "vue/v-on-style": ["warn"],
-  "vue/v-slot-style": ["warn"],
-  "vue/valid-attribute-name": ["error"],
-  "vue/valid-define-emits": ["error"],
-  "vue/valid-define-props": ["error"],
-  "vue/valid-next-tick": ["error"],
-  "vue/valid-template-root": ["error"],
-  "vue/valid-v-bind": ["error"],
-  "vue/valid-v-cloak": ["error"],
-  "vue/valid-v-else": ["error"],
-  "vue/valid-v-else-if": ["error"],
-  "vue/valid-v-for": ["error"],
-  "vue/valid-v-html": ["error"],
-  "vue/valid-v-if": ["error"],
-  "vue/valid-v-is": ["error"],
-  "vue/valid-v-memo": ["error"],
-  "vue/valid-v-model": ["error"],
-  "vue/valid-v-on": ["error"],
-  "vue/valid-v-once": ["error"],
-  "vue/valid-v-pre": ["error"],
-  "vue/valid-v-show": ["error"],
-  "vue/valid-v-slot": ["error"],
-  "vue/valid-v-text": ["error"],
-  "wrap-iife": ["off"],
-  "wrap-regex": ["off"],
-  "yield-star-spacing": ["off"]
+  "vue/v-on-style": [1],
+  "vue/v-slot-style": [1],
+  "vue/valid-attribute-name": [2],
+  "vue/valid-define-emits": [2],
+  "vue/valid-define-props": [2],
+  "vue/valid-next-tick": [2],
+  "vue/valid-template-root": [2],
+  "vue/valid-v-bind": [2],
+  "vue/valid-v-cloak": [2],
+  "vue/valid-v-else": [2],
+  "vue/valid-v-else-if": [2],
+  "vue/valid-v-for": [2],
+  "vue/valid-v-html": [2],
+  "vue/valid-v-if": [2],
+  "vue/valid-v-is": [2],
+  "vue/valid-v-memo": [2],
+  "vue/valid-v-model": [2],
+  "vue/valid-v-on": [2],
+  "vue/valid-v-once": [2],
+  "vue/valid-v-pre": [2],
+  "vue/valid-v-show": [2],
+  "vue/valid-v-slot": [2],
+  "vue/valid-v-text": [2],
+  "wrap-iife": [0],
+  "wrap-regex": [0],
+  "yield-star-spacing": [0]
 }
diff --git a/print/eslint-config-ts.json b/print/eslint-config-ts.json
index e7b5a7dc86..6398b6b5d6 100644
--- a/print/eslint-config-ts.json
+++ b/print/eslint-config-ts.json
@@ -1,372 +1,374 @@
 {
-  "@babel/object-curly-spacing": ["off"],
-  "@babel/semi": ["off"],
-  "@typescript-eslint/block-spacing": ["off"],
-  "@typescript-eslint/brace-style": ["off"],
-  "@typescript-eslint/comma-dangle": ["off"],
-  "@typescript-eslint/comma-spacing": ["off"],
-  "@typescript-eslint/func-call-spacing": ["off"],
-  "@typescript-eslint/indent": ["off"],
-  "@typescript-eslint/key-spacing": ["off"],
-  "@typescript-eslint/keyword-spacing": ["off"],
+  "@babel/object-curly-spacing": [0],
+  "@babel/semi": [0],
+  "@typescript-eslint/block-spacing": [0],
+  "@typescript-eslint/brace-style": [0],
+  "@typescript-eslint/comma-dangle": [0],
+  "@typescript-eslint/comma-spacing": [0],
+  "@typescript-eslint/func-call-spacing": [0],
+  "@typescript-eslint/indent": [0],
+  "@typescript-eslint/key-spacing": [0],
+  "@typescript-eslint/keyword-spacing": [0],
   "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": ["off"],
-  "@typescript-eslint/no-extra-parens": ["off"],
-  "@typescript-eslint/no-extra-semi": ["off"],
-  "@typescript-eslint/no-unused-vars": ["warn"],
-  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/member-delimiter-style": [0],
+  "@typescript-eslint/no-extra-parens": [0],
+  "@typescript-eslint/no-extra-semi": [0],
+  "@typescript-eslint/no-unused-vars": [1],
+  "@typescript-eslint/object-curly-spacing": [0],
   "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": ["off"],
-  "@typescript-eslint/space-before-blocks": ["off"],
-  "@typescript-eslint/space-before-function-paren": ["off"],
-  "@typescript-eslint/space-infix-ops": ["off"],
-  "@typescript-eslint/type-annotation-spacing": ["off"],
-  "array-bracket-newline": ["off"],
-  "array-bracket-spacing": ["off"],
-  "array-element-newline": ["off"],
-  "arrow-body-style": ["off"],
-  "arrow-parens": ["off"],
-  "arrow-spacing": ["off"],
-  "babel/object-curly-spacing": ["off"],
+  "@typescript-eslint/semi": [0],
+  "@typescript-eslint/space-before-blocks": [0],
+  "@typescript-eslint/space-before-function-paren": [0],
+  "@typescript-eslint/space-infix-ops": [0],
+  "@typescript-eslint/type-annotation-spacing": [0],
+  "array-bracket-newline": [0],
+  "array-bracket-spacing": [0],
+  "array-element-newline": [0],
+  "arrow-body-style": [0],
+  "arrow-parens": [0],
+  "arrow-spacing": [0],
+  "babel/object-curly-spacing": [0],
   "babel/quotes": [0],
-  "babel/semi": ["off"],
-  "block-spacing": ["off"],
-  "brace-style": ["off"],
-  "comma-dangle": ["off"],
-  "comma-spacing": ["off"],
-  "comma-style": ["off"],
-  "computed-property-spacing": ["off"],
-  "constructor-super": ["error"],
+  "babel/semi": [0],
+  "block-spacing": [0],
+  "brace-style": [0],
+  "comma-dangle": [0],
+  "comma-spacing": [0],
+  "comma-style": [0],
+  "computed-property-spacing": [0],
+  "constructor-super": [2],
   "curly": [0],
-  "dot-location": ["off"],
-  "eol-last": ["off"],
-  "flowtype/boolean-style": ["off"],
-  "flowtype/delimiter-dangle": ["off"],
-  "flowtype/generic-spacing": ["off"],
-  "flowtype/object-type-curly-spacing": ["off"],
-  "flowtype/object-type-delimiter": ["off"],
-  "flowtype/quotes": ["off"],
-  "flowtype/semi": ["off"],
-  "flowtype/space-after-type-colon": ["off"],
-  "flowtype/space-before-generic-bracket": ["off"],
-  "flowtype/space-before-type-colon": ["off"],
-  "flowtype/union-intersection-spacing": ["off"],
-  "for-direction": ["error"],
-  "func-call-spacing": ["off"],
-  "function-call-argument-newline": ["off"],
-  "function-paren-newline": ["off"],
-  "generator-star": ["off"],
-  "generator-star-spacing": ["off"],
-  "getter-return": ["error"],
-  "implicit-arrow-linebreak": ["off"],
-  "indent": ["off"],
-  "indent-legacy": ["off"],
-  "jsx-quotes": ["off"],
-  "key-spacing": ["off"],
-  "keyword-spacing": ["off"],
-  "linebreak-style": ["off"],
+  "dot-location": [0],
+  "eol-last": [0],
+  "flowtype/boolean-style": [0],
+  "flowtype/delimiter-dangle": [0],
+  "flowtype/generic-spacing": [0],
+  "flowtype/object-type-curly-spacing": [0],
+  "flowtype/object-type-delimiter": [0],
+  "flowtype/quotes": [0],
+  "flowtype/semi": [0],
+  "flowtype/space-after-type-colon": [0],
+  "flowtype/space-before-generic-bracket": [0],
+  "flowtype/space-before-type-colon": [0],
+  "flowtype/union-intersection-spacing": [0],
+  "for-direction": [2],
+  "func-call-spacing": [0],
+  "function-call-argument-newline": [0],
+  "function-paren-newline": [0],
+  "generator-star": [0],
+  "generator-star-spacing": [0],
+  "getter-return": [2],
+  "implicit-arrow-linebreak": [0],
+  "indent": [0],
+  "indent-legacy": [0],
+  "jsx-quotes": [0],
+  "key-spacing": [0],
+  "keyword-spacing": [0],
+  "linebreak-style": [0],
   "lines-around-comment": [0],
   "local-rules/matching-translation-keys": [
-    "error",
+    2,
     {
       "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
       "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
     }
   ],
   "max-len": [0],
-  "max-statements-per-line": ["off"],
-  "multiline-ternary": ["off"],
-  "new-parens": ["off"],
-  "newline-per-chained-call": ["off"],
-  "no-arrow-condition": ["off"],
-  "no-async-promise-executor": ["error"],
-  "no-case-declarations": ["error"],
-  "no-class-assign": ["error"],
-  "no-comma-dangle": ["off"],
-  "no-compare-neg-zero": ["error"],
-  "no-cond-assign": ["error"],
+  "max-statements-per-line": [0],
+  "multiline-ternary": [0],
+  "new-parens": [0],
+  "newline-per-chained-call": [0],
+  "no-arrow-condition": [0],
+  "no-async-promise-executor": [2],
+  "no-case-declarations": [2],
+  "no-class-assign": [2],
+  "no-comma-dangle": [0],
+  "no-compare-neg-zero": [2],
+  "no-cond-assign": [2],
   "no-confusing-arrow": [0],
-  "no-console": ["off"],
-  "no-const-assign": ["error"],
-  "no-constant-condition": ["error"],
-  "no-control-regex": ["error"],
-  "no-debugger": ["error"],
-  "no-delete-var": ["error"],
-  "no-dupe-args": ["error"],
-  "no-dupe-class-members": ["error"],
-  "no-dupe-else-if": ["error"],
-  "no-dupe-keys": ["error"],
-  "no-duplicate-case": ["error"],
-  "no-empty": ["error"],
-  "no-empty-character-class": ["error"],
-  "no-empty-pattern": ["error"],
-  "no-ex-assign": ["error"],
-  "no-extra-boolean-cast": ["error"],
-  "no-extra-parens": ["off"],
-  "no-extra-semi": ["off"],
-  "no-fallthrough": ["error"],
-  "no-floating-decimal": ["off"],
-  "no-func-assign": ["error"],
-  "no-global-assign": ["error"],
-  "no-import-assign": ["error"],
-  "no-inner-declarations": ["error"],
-  "no-invalid-regexp": ["error"],
-  "no-irregular-whitespace": ["error"],
-  "no-loss-of-precision": ["error"],
-  "no-misleading-character-class": ["error"],
+  "no-console": [0],
+  "no-const-assign": [2],
+  "no-constant-binary-expression": [2],
+  "no-constant-condition": [2],
+  "no-control-regex": [2],
+  "no-debugger": [2],
+  "no-delete-var": [2],
+  "no-dupe-args": [2],
+  "no-dupe-class-members": [2],
+  "no-dupe-else-if": [2],
+  "no-dupe-keys": [2],
+  "no-duplicate-case": [2],
+  "no-empty": [2],
+  "no-empty-character-class": [2],
+  "no-empty-pattern": [2],
+  "no-empty-static-block": [2],
+  "no-ex-assign": [2],
+  "no-extra-boolean-cast": [2],
+  "no-extra-parens": [0],
+  "no-extra-semi": [0],
+  "no-fallthrough": [2],
+  "no-floating-decimal": [0],
+  "no-func-assign": [2],
+  "no-global-assign": [2],
+  "no-import-assign": [2],
+  "no-invalid-regexp": [2],
+  "no-irregular-whitespace": [2],
+  "no-loss-of-precision": [2],
+  "no-misleading-character-class": [2],
   "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": ["off"],
-  "no-multi-spaces": ["off"],
-  "no-multiple-empty-lines": ["off"],
-  "no-new-native-nonconstructor": ["off"],
-  "no-new-symbol": ["error"],
-  "no-nonoctal-decimal-escape": ["error"],
-  "no-obj-calls": ["error"],
-  "no-octal": ["error"],
-  "no-prototype-builtins": ["error"],
-  "no-redeclare": ["error"],
-  "no-regex-spaces": ["error"],
-  "no-reserved-keys": ["off"],
-  "no-self-assign": ["error"],
-  "no-setter-return": ["error"],
-  "no-shadow-restricted-names": ["error"],
-  "no-space-before-semi": ["off"],
-  "no-spaced-func": ["off"],
-  "no-sparse-arrays": ["error"],
+  "no-mixed-spaces-and-tabs": [0],
+  "no-multi-spaces": [0],
+  "no-multiple-empty-lines": [0],
+  "no-new-native-nonconstructor": [2],
+  "no-new-symbol": [0],
+  "no-nonoctal-decimal-escape": [2],
+  "no-obj-calls": [2],
+  "no-octal": [2],
+  "no-prototype-builtins": [2],
+  "no-redeclare": [2],
+  "no-regex-spaces": [2],
+  "no-reserved-keys": [0],
+  "no-self-assign": [2],
+  "no-setter-return": [2],
+  "no-shadow-restricted-names": [2],
+  "no-space-before-semi": [0],
+  "no-spaced-func": [0],
+  "no-sparse-arrays": [2],
   "no-tabs": [0],
-  "no-this-before-super": ["error"],
-  "no-trailing-spaces": ["off"],
-  "no-undef": ["off"],
+  "no-this-before-super": [2],
+  "no-trailing-spaces": [0],
+  "no-undef": [0],
   "no-unexpected-multiline": [0],
-  "no-unreachable": ["error"],
-  "no-unsafe-finally": ["error"],
-  "no-unsafe-negation": ["error"],
-  "no-unsafe-optional-chaining": ["error"],
-  "no-unused-labels": ["error"],
-  "no-unused-vars": ["error"],
-  "no-useless-backreference": ["error"],
-  "no-useless-catch": ["error"],
-  "no-useless-escape": ["error"],
-  "no-var": ["error"],
-  "no-whitespace-before-property": ["off"],
-  "no-with": ["error"],
-  "no-wrap-func": ["off"],
-  "nonblock-statement-body-position": ["off"],
-  "object-curly-newline": ["off"],
-  "object-curly-spacing": ["off"],
-  "object-property-newline": ["off"],
-  "one-var-declaration-per-line": ["off"],
-  "operator-linebreak": ["off"],
-  "padded-blocks": ["off"],
-  "prefer-arrow-callback": ["off"],
-  "prefer-const": ["error"],
-  "prefer-rest-params": ["error"],
-  "prefer-spread": ["error"],
-  "prettier/prettier": ["error"],
-  "quote-props": ["off"],
+  "no-unreachable": [2],
+  "no-unsafe-finally": [2],
+  "no-unsafe-negation": [2],
+  "no-unsafe-optional-chaining": [2],
+  "no-unused-labels": [2],
+  "no-unused-private-class-members": [2],
+  "no-unused-vars": [2],
+  "no-useless-backreference": [2],
+  "no-useless-catch": [2],
+  "no-useless-escape": [2],
+  "no-var": [2],
+  "no-whitespace-before-property": [0],
+  "no-with": [2],
+  "no-wrap-func": [0],
+  "nonblock-statement-body-position": [0],
+  "object-curly-newline": [0],
+  "object-curly-spacing": [0],
+  "object-property-newline": [0],
+  "one-var-declaration-per-line": [0],
+  "operator-linebreak": [0],
+  "padded-blocks": [0],
+  "prefer-arrow-callback": [0],
+  "prefer-const": [2],
+  "prefer-rest-params": [2],
+  "prefer-spread": [2],
+  "prettier/prettier": [2],
+  "quote-props": [0],
   "quotes": [0],
-  "react/jsx-child-element-spacing": ["off"],
-  "react/jsx-closing-bracket-location": ["off"],
-  "react/jsx-closing-tag-location": ["off"],
-  "react/jsx-curly-newline": ["off"],
-  "react/jsx-curly-spacing": ["off"],
-  "react/jsx-equals-spacing": ["off"],
-  "react/jsx-first-prop-new-line": ["off"],
-  "react/jsx-indent": ["off"],
-  "react/jsx-indent-props": ["off"],
-  "react/jsx-max-props-per-line": ["off"],
-  "react/jsx-newline": ["off"],
-  "react/jsx-one-expression-per-line": ["off"],
-  "react/jsx-props-no-multi-spaces": ["off"],
-  "react/jsx-space-before-closing": ["off"],
-  "react/jsx-tag-spacing": ["off"],
-  "react/jsx-wrap-multilines": ["off"],
-  "require-yield": ["error"],
-  "rest-spread-spacing": ["off"],
-  "semi": ["off"],
-  "semi-spacing": ["off"],
-  "semi-style": ["off"],
-  "space-after-function-name": ["off"],
-  "space-after-keywords": ["off"],
-  "space-before-blocks": ["off"],
-  "space-before-function-paren": ["off"],
-  "space-before-function-parentheses": ["off"],
-  "space-before-keywords": ["off"],
-  "space-in-brackets": ["off"],
-  "space-in-parens": ["off"],
-  "space-infix-ops": ["off"],
-  "space-return-throw-case": ["off"],
-  "space-unary-ops": ["off"],
-  "space-unary-word-ops": ["off"],
-  "standard/array-bracket-even-spacing": ["off"],
-  "standard/computed-property-even-spacing": ["off"],
-  "standard/object-curly-even-spacing": ["off"],
-  "switch-colon-spacing": ["off"],
-  "template-curly-spacing": ["off"],
-  "template-tag-spacing": ["off"],
-  "unicorn/empty-brace-spaces": ["off"],
-  "unicorn/no-nested-ternary": ["off"],
-  "unicorn/number-literal-case": ["off"],
+  "react/jsx-child-element-spacing": [0],
+  "react/jsx-closing-bracket-location": [0],
+  "react/jsx-closing-tag-location": [0],
+  "react/jsx-curly-newline": [0],
+  "react/jsx-curly-spacing": [0],
+  "react/jsx-equals-spacing": [0],
+  "react/jsx-first-prop-new-line": [0],
+  "react/jsx-indent": [0],
+  "react/jsx-indent-props": [0],
+  "react/jsx-max-props-per-line": [0],
+  "react/jsx-newline": [0],
+  "react/jsx-one-expression-per-line": [0],
+  "react/jsx-props-no-multi-spaces": [0],
+  "react/jsx-space-before-closing": [0],
+  "react/jsx-tag-spacing": [0],
+  "react/jsx-wrap-multilines": [0],
+  "require-yield": [2],
+  "rest-spread-spacing": [0],
+  "semi": [0],
+  "semi-spacing": [0],
+  "semi-style": [0],
+  "space-after-function-name": [0],
+  "space-after-keywords": [0],
+  "space-before-blocks": [0],
+  "space-before-function-paren": [0],
+  "space-before-function-parentheses": [0],
+  "space-before-keywords": [0],
+  "space-in-brackets": [0],
+  "space-in-parens": [0],
+  "space-infix-ops": [0],
+  "space-return-throw-case": [0],
+  "space-unary-ops": [0],
+  "space-unary-word-ops": [0],
+  "standard/array-bracket-even-spacing": [0],
+  "standard/computed-property-even-spacing": [0],
+  "standard/object-curly-even-spacing": [0],
+  "switch-colon-spacing": [0],
+  "template-curly-spacing": [0],
+  "template-tag-spacing": [0],
+  "unicorn/empty-brace-spaces": [0],
+  "unicorn/no-nested-ternary": [0],
+  "unicorn/number-literal-case": [0],
   "unicorn/template-indent": [0],
-  "use-isnan": ["error"],
-  "valid-typeof": ["error"],
-  "vue-scoped-css/enforce-style-type": ["warn"],
-  "vue-scoped-css/no-deprecated-deep-combinator": ["warn"],
-  "vue-scoped-css/no-parent-of-v-global": ["warn"],
-  "vue-scoped-css/no-parsing-error": ["warn"],
-  "vue-scoped-css/no-unused-keyframes": ["warn"],
-  "vue-scoped-css/no-unused-selector": ["warn"],
-  "vue-scoped-css/require-v-deep-argument": ["warn"],
-  "vue-scoped-css/require-v-global-argument": ["warn"],
-  "vue-scoped-css/require-v-slotted-argument": ["warn"],
-  "vue/array-bracket-newline": ["off"],
-  "vue/array-bracket-spacing": ["off"],
-  "vue/array-element-newline": ["off"],
-  "vue/arrow-spacing": ["off"],
-  "vue/attribute-hyphenation": ["warn"],
-  "vue/attributes-order": ["warn"],
-  "vue/block-spacing": ["off"],
-  "vue/block-tag-newline": ["off"],
-  "vue/brace-style": ["off"],
-  "vue/comma-dangle": ["off"],
-  "vue/comma-spacing": ["off"],
-  "vue/comma-style": ["off"],
-  "vue/comment-directive": ["error"],
-  "vue/component-definition-name-casing": ["warn"],
-  "vue/component-tags-order": ["warn"],
-  "vue/dot-location": ["off"],
-  "vue/first-attribute-linebreak": ["warn"],
-  "vue/func-call-spacing": ["off"],
-  "vue/html-closing-bracket-newline": ["off"],
-  "vue/html-closing-bracket-spacing": ["off"],
-  "vue/html-end-tags": ["off"],
-  "vue/html-indent": ["off"],
-  "vue/html-quotes": ["off"],
+  "use-isnan": [2],
+  "valid-typeof": [2],
+  "vue-scoped-css/enforce-style-type": [1],
+  "vue-scoped-css/no-deprecated-deep-combinator": [1],
+  "vue-scoped-css/no-parent-of-v-global": [1],
+  "vue-scoped-css/no-parsing-error": [1],
+  "vue-scoped-css/no-unused-keyframes": [1],
+  "vue-scoped-css/no-unused-selector": [1],
+  "vue-scoped-css/require-v-deep-argument": [1],
+  "vue-scoped-css/require-v-global-argument": [1],
+  "vue-scoped-css/require-v-slotted-argument": [1],
+  "vue/array-bracket-newline": [0],
+  "vue/array-bracket-spacing": [0],
+  "vue/array-element-newline": [0],
+  "vue/arrow-spacing": [0],
+  "vue/attribute-hyphenation": [1],
+  "vue/attributes-order": [1],
+  "vue/block-spacing": [0],
+  "vue/block-tag-newline": [0],
+  "vue/brace-style": [0],
+  "vue/comma-dangle": [0],
+  "vue/comma-spacing": [0],
+  "vue/comma-style": [0],
+  "vue/comment-directive": [2],
+  "vue/component-definition-name-casing": [1],
+  "vue/component-tags-order": [1],
+  "vue/dot-location": [0],
+  "vue/first-attribute-linebreak": [1],
+  "vue/func-call-spacing": [0],
+  "vue/html-closing-bracket-newline": [0],
+  "vue/html-closing-bracket-spacing": [0],
+  "vue/html-end-tags": [0],
+  "vue/html-indent": [0],
+  "vue/html-quotes": [0],
   "vue/html-self-closing": [0],
-  "vue/jsx-uses-vars": ["error"],
-  "vue/key-spacing": ["off"],
-  "vue/keyword-spacing": ["off"],
-  "vue/max-attributes-per-line": ["off"],
+  "vue/jsx-uses-vars": [2],
+  "vue/key-spacing": [0],
+  "vue/keyword-spacing": [0],
+  "vue/max-attributes-per-line": [0],
   "vue/max-len": [0],
-  "vue/multi-word-component-names": ["off"],
-  "vue/multiline-html-element-content-newline": ["off"],
-  "vue/multiline-ternary": ["off"],
-  "vue/mustache-interpolation-spacing": ["off"],
-  "vue/no-arrow-functions-in-watch": ["error"],
-  "vue/no-async-in-computed-properties": ["error"],
-  "vue/no-child-content": ["error"],
-  "vue/no-computed-properties-in-data": ["error"],
-  "vue/no-deprecated-data-object-declaration": ["error"],
-  "vue/no-deprecated-destroyed-lifecycle": ["error"],
-  "vue/no-deprecated-dollar-listeners-api": ["error"],
-  "vue/no-deprecated-dollar-scopedslots-api": ["error"],
-  "vue/no-deprecated-events-api": ["error"],
-  "vue/no-deprecated-filter": ["error"],
-  "vue/no-deprecated-functional-template": ["error"],
-  "vue/no-deprecated-html-element-is": ["error"],
-  "vue/no-deprecated-inline-template": ["error"],
-  "vue/no-deprecated-props-default-this": ["error"],
-  "vue/no-deprecated-router-link-tag-prop": ["error"],
-  "vue/no-deprecated-scope-attribute": ["error"],
-  "vue/no-deprecated-slot-attribute": ["error"],
-  "vue/no-deprecated-slot-scope-attribute": ["error"],
-  "vue/no-deprecated-v-bind-sync": ["error"],
-  "vue/no-deprecated-v-is": ["error"],
-  "vue/no-deprecated-v-on-native-modifier": ["error"],
-  "vue/no-deprecated-v-on-number-modifiers": ["error"],
-  "vue/no-deprecated-vue-config-keycodes": ["error"],
-  "vue/no-dupe-keys": ["error"],
-  "vue/no-dupe-v-else-if": ["error"],
-  "vue/no-duplicate-attributes": ["error"],
-  "vue/no-export-in-script-setup": ["error"],
-  "vue/no-expose-after-await": ["error"],
-  "vue/no-extra-parens": ["off"],
-  "vue/no-lifecycle-after-await": ["error"],
-  "vue/no-lone-template": ["warn"],
-  "vue/no-multi-spaces": ["off"],
-  "vue/no-multiple-slot-args": ["warn"],
-  "vue/no-mutating-props": ["error"],
-  "vue/no-parsing-error": ["error"],
-  "vue/no-ref-as-operand": ["error"],
-  "vue/no-reserved-component-names": ["error"],
-  "vue/no-reserved-keys": ["error"],
-  "vue/no-reserved-props": ["error"],
-  "vue/no-shared-component-data": ["error"],
-  "vue/no-side-effects-in-computed-properties": ["error"],
-  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
-  "vue/no-template-key": ["error"],
-  "vue/no-template-shadow": ["warn"],
-  "vue/no-textarea-mustache": ["error"],
-  "vue/no-unused-components": ["error"],
-  "vue/no-unused-vars": ["error"],
-  "vue/no-use-computed-property-like-method": ["error"],
-  "vue/no-use-v-if-with-v-for": ["error"],
-  "vue/no-useless-template-attributes": ["error"],
-  "vue/no-v-for-template-key-on-child": ["error"],
-  "vue/no-v-html": ["warn"],
-  "vue/no-v-text-v-html-on-component": ["error"],
-  "vue/no-watch-after-await": ["error"],
-  "vue/object-curly-newline": ["off"],
-  "vue/object-curly-spacing": ["off"],
-  "vue/object-property-newline": ["off"],
-  "vue/one-component-per-file": ["warn"],
-  "vue/operator-linebreak": ["off"],
-  "vue/order-in-components": ["warn"],
-  "vue/prefer-import-from-vue": ["error"],
-  "vue/prop-name-casing": ["warn"],
-  "vue/quote-props": ["off"],
-  "vue/require-component-is": ["error"],
-  "vue/require-default-prop": ["warn"],
-  "vue/require-explicit-emits": ["warn"],
-  "vue/require-prop-type-constructor": ["error"],
-  "vue/require-prop-types": ["warn"],
-  "vue/require-render-return": ["error"],
-  "vue/require-slots-as-functions": ["error"],
-  "vue/require-toggle-inside-transition": ["error"],
-  "vue/require-v-for-key": ["error"],
-  "vue/require-valid-default-prop": ["error"],
-  "vue/return-in-computed-property": ["error"],
-  "vue/return-in-emits-validator": ["error"],
-  "vue/script-indent": ["off"],
-  "vue/singleline-html-element-content-newline": ["off"],
-  "vue/space-in-parens": ["off"],
-  "vue/space-infix-ops": ["off"],
-  "vue/space-unary-ops": ["off"],
-  "vue/template-curly-spacing": ["off"],
-  "vue/this-in-template": ["warn"],
-  "vue/use-v-on-exact": ["error"],
-  "vue/v-bind-style": ["warn"],
+  "vue/multi-word-component-names": [0],
+  "vue/multiline-html-element-content-newline": [0],
+  "vue/multiline-ternary": [0],
+  "vue/mustache-interpolation-spacing": [0],
+  "vue/no-arrow-functions-in-watch": [2],
+  "vue/no-async-in-computed-properties": [2],
+  "vue/no-child-content": [2],
+  "vue/no-computed-properties-in-data": [2],
+  "vue/no-deprecated-data-object-declaration": [2],
+  "vue/no-deprecated-destroyed-lifecycle": [2],
+  "vue/no-deprecated-dollar-listeners-api": [2],
+  "vue/no-deprecated-dollar-scopedslots-api": [2],
+  "vue/no-deprecated-events-api": [2],
+  "vue/no-deprecated-filter": [2],
+  "vue/no-deprecated-functional-template": [2],
+  "vue/no-deprecated-html-element-is": [2],
+  "vue/no-deprecated-inline-template": [2],
+  "vue/no-deprecated-props-default-this": [2],
+  "vue/no-deprecated-router-link-tag-prop": [2],
+  "vue/no-deprecated-scope-attribute": [2],
+  "vue/no-deprecated-slot-attribute": [2],
+  "vue/no-deprecated-slot-scope-attribute": [2],
+  "vue/no-deprecated-v-bind-sync": [2],
+  "vue/no-deprecated-v-is": [2],
+  "vue/no-deprecated-v-on-native-modifier": [2],
+  "vue/no-deprecated-v-on-number-modifiers": [2],
+  "vue/no-deprecated-vue-config-keycodes": [2],
+  "vue/no-dupe-keys": [2],
+  "vue/no-dupe-v-else-if": [2],
+  "vue/no-duplicate-attributes": [2],
+  "vue/no-export-in-script-setup": [2],
+  "vue/no-expose-after-await": [2],
+  "vue/no-extra-parens": [0],
+  "vue/no-lifecycle-after-await": [2],
+  "vue/no-lone-template": [1],
+  "vue/no-multi-spaces": [0],
+  "vue/no-multiple-slot-args": [1],
+  "vue/no-mutating-props": [2],
+  "vue/no-parsing-error": [2],
+  "vue/no-ref-as-operand": [2],
+  "vue/no-reserved-component-names": [2],
+  "vue/no-reserved-keys": [2],
+  "vue/no-reserved-props": [2],
+  "vue/no-shared-component-data": [2],
+  "vue/no-side-effects-in-computed-properties": [2],
+  "vue/no-spaces-around-equal-signs-in-attribute": [0],
+  "vue/no-template-key": [2],
+  "vue/no-template-shadow": [1],
+  "vue/no-textarea-mustache": [2],
+  "vue/no-unused-components": [2],
+  "vue/no-unused-vars": [2],
+  "vue/no-use-computed-property-like-method": [2],
+  "vue/no-use-v-if-with-v-for": [2],
+  "vue/no-useless-template-attributes": [2],
+  "vue/no-v-for-template-key-on-child": [2],
+  "vue/no-v-html": [1],
+  "vue/no-v-text-v-html-on-component": [2],
+  "vue/no-watch-after-await": [2],
+  "vue/object-curly-newline": [0],
+  "vue/object-curly-spacing": [0],
+  "vue/object-property-newline": [0],
+  "vue/one-component-per-file": [1],
+  "vue/operator-linebreak": [0],
+  "vue/order-in-components": [1],
+  "vue/prefer-import-from-vue": [2],
+  "vue/prop-name-casing": [1],
+  "vue/quote-props": [0],
+  "vue/require-component-is": [2],
+  "vue/require-default-prop": [1],
+  "vue/require-explicit-emits": [1],
+  "vue/require-prop-type-constructor": [2],
+  "vue/require-prop-types": [1],
+  "vue/require-render-return": [2],
+  "vue/require-slots-as-functions": [2],
+  "vue/require-toggle-inside-transition": [2],
+  "vue/require-v-for-key": [2],
+  "vue/require-valid-default-prop": [2],
+  "vue/return-in-computed-property": [2],
+  "vue/return-in-emits-validator": [2],
+  "vue/script-indent": [0],
+  "vue/singleline-html-element-content-newline": [0],
+  "vue/space-in-parens": [0],
+  "vue/space-infix-ops": [0],
+  "vue/space-unary-ops": [0],
+  "vue/template-curly-spacing": [0],
+  "vue/this-in-template": [1],
+  "vue/use-v-on-exact": [2],
+  "vue/v-bind-style": [1],
   "vue/v-on-event-hyphenation": [
-    "warn",
+    1,
     "always",
     {
       "autofix": true
     }
   ],
-  "vue/v-on-style": ["warn"],
-  "vue/v-slot-style": ["warn"],
-  "vue/valid-attribute-name": ["error"],
-  "vue/valid-define-emits": ["error"],
-  "vue/valid-define-props": ["error"],
-  "vue/valid-next-tick": ["error"],
-  "vue/valid-template-root": ["error"],
-  "vue/valid-v-bind": ["error"],
-  "vue/valid-v-cloak": ["error"],
-  "vue/valid-v-else": ["error"],
-  "vue/valid-v-else-if": ["error"],
-  "vue/valid-v-for": ["error"],
-  "vue/valid-v-html": ["error"],
-  "vue/valid-v-if": ["error"],
-  "vue/valid-v-is": ["error"],
-  "vue/valid-v-memo": ["error"],
-  "vue/valid-v-model": ["error"],
-  "vue/valid-v-on": ["error"],
-  "vue/valid-v-once": ["error"],
-  "vue/valid-v-pre": ["error"],
-  "vue/valid-v-show": ["error"],
-  "vue/valid-v-slot": ["error"],
-  "vue/valid-v-text": ["error"],
-  "wrap-iife": ["off"],
-  "wrap-regex": ["off"],
-  "yield-star-spacing": ["off"]
+  "vue/v-on-style": [1],
+  "vue/v-slot-style": [1],
+  "vue/valid-attribute-name": [2],
+  "vue/valid-define-emits": [2],
+  "vue/valid-define-props": [2],
+  "vue/valid-next-tick": [2],
+  "vue/valid-template-root": [2],
+  "vue/valid-v-bind": [2],
+  "vue/valid-v-cloak": [2],
+  "vue/valid-v-else": [2],
+  "vue/valid-v-else-if": [2],
+  "vue/valid-v-for": [2],
+  "vue/valid-v-html": [2],
+  "vue/valid-v-if": [2],
+  "vue/valid-v-is": [2],
+  "vue/valid-v-memo": [2],
+  "vue/valid-v-model": [2],
+  "vue/valid-v-on": [2],
+  "vue/valid-v-once": [2],
+  "vue/valid-v-pre": [2],
+  "vue/valid-v-show": [2],
+  "vue/valid-v-slot": [2],
+  "vue/valid-v-text": [2],
+  "wrap-iife": [0],
+  "wrap-regex": [0],
+  "yield-star-spacing": [0]
 }
diff --git a/print/eslint-config-vue.json b/print/eslint-config-vue.json
index b9e7671d29..3147aae9fc 100644
--- a/print/eslint-config-vue.json
+++ b/print/eslint-config-vue.json
@@ -1,372 +1,375 @@
 {
-  "@babel/object-curly-spacing": ["off"],
-  "@babel/semi": ["off"],
-  "@typescript-eslint/block-spacing": ["off"],
-  "@typescript-eslint/brace-style": ["off"],
-  "@typescript-eslint/comma-dangle": ["off"],
-  "@typescript-eslint/comma-spacing": ["off"],
-  "@typescript-eslint/func-call-spacing": ["off"],
-  "@typescript-eslint/indent": ["off"],
-  "@typescript-eslint/key-spacing": ["off"],
-  "@typescript-eslint/keyword-spacing": ["off"],
+  "@babel/object-curly-spacing": [0],
+  "@babel/semi": [0],
+  "@typescript-eslint/block-spacing": [0],
+  "@typescript-eslint/brace-style": [0],
+  "@typescript-eslint/comma-dangle": [0],
+  "@typescript-eslint/comma-spacing": [0],
+  "@typescript-eslint/func-call-spacing": [0],
+  "@typescript-eslint/indent": [0],
+  "@typescript-eslint/key-spacing": [0],
+  "@typescript-eslint/keyword-spacing": [0],
   "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": ["off"],
-  "@typescript-eslint/no-extra-parens": ["off"],
-  "@typescript-eslint/no-extra-semi": ["off"],
-  "@typescript-eslint/no-unused-vars": ["warn"],
-  "@typescript-eslint/object-curly-spacing": ["off"],
+  "@typescript-eslint/member-delimiter-style": [0],
+  "@typescript-eslint/no-extra-parens": [0],
+  "@typescript-eslint/no-extra-semi": [0],
+  "@typescript-eslint/no-unused-vars": [1],
+  "@typescript-eslint/object-curly-spacing": [0],
   "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": ["off"],
-  "@typescript-eslint/space-before-blocks": ["off"],
-  "@typescript-eslint/space-before-function-paren": ["off"],
-  "@typescript-eslint/space-infix-ops": ["off"],
-  "@typescript-eslint/type-annotation-spacing": ["off"],
-  "array-bracket-newline": ["off"],
-  "array-bracket-spacing": ["off"],
-  "array-element-newline": ["off"],
-  "arrow-body-style": ["off"],
-  "arrow-parens": ["off"],
-  "arrow-spacing": ["off"],
-  "babel/object-curly-spacing": ["off"],
+  "@typescript-eslint/semi": [0],
+  "@typescript-eslint/space-before-blocks": [0],
+  "@typescript-eslint/space-before-function-paren": [0],
+  "@typescript-eslint/space-infix-ops": [0],
+  "@typescript-eslint/type-annotation-spacing": [0],
+  "array-bracket-newline": [0],
+  "array-bracket-spacing": [0],
+  "array-element-newline": [0],
+  "arrow-body-style": [0],
+  "arrow-parens": [0],
+  "arrow-spacing": [0],
+  "babel/object-curly-spacing": [0],
   "babel/quotes": [0],
-  "babel/semi": ["off"],
-  "block-spacing": ["off"],
-  "brace-style": ["off"],
-  "comma-dangle": ["off"],
-  "comma-spacing": ["off"],
-  "comma-style": ["off"],
-  "computed-property-spacing": ["off"],
-  "constructor-super": ["error"],
+  "babel/semi": [0],
+  "block-spacing": [0],
+  "brace-style": [0],
+  "comma-dangle": [0],
+  "comma-spacing": [0],
+  "comma-style": [0],
+  "computed-property-spacing": [0],
+  "constructor-super": [2],
   "curly": [0],
-  "dot-location": ["off"],
-  "eol-last": ["off"],
-  "flowtype/boolean-style": ["off"],
-  "flowtype/delimiter-dangle": ["off"],
-  "flowtype/generic-spacing": ["off"],
-  "flowtype/object-type-curly-spacing": ["off"],
-  "flowtype/object-type-delimiter": ["off"],
-  "flowtype/quotes": ["off"],
-  "flowtype/semi": ["off"],
-  "flowtype/space-after-type-colon": ["off"],
-  "flowtype/space-before-generic-bracket": ["off"],
-  "flowtype/space-before-type-colon": ["off"],
-  "flowtype/union-intersection-spacing": ["off"],
-  "for-direction": ["error"],
-  "func-call-spacing": ["off"],
-  "function-call-argument-newline": ["off"],
-  "function-paren-newline": ["off"],
-  "generator-star": ["off"],
-  "generator-star-spacing": ["off"],
-  "getter-return": ["error"],
-  "implicit-arrow-linebreak": ["off"],
-  "indent": ["off"],
-  "indent-legacy": ["off"],
-  "jsx-quotes": ["off"],
-  "key-spacing": ["off"],
-  "keyword-spacing": ["off"],
-  "linebreak-style": ["off"],
+  "dot-location": [0],
+  "eol-last": [0],
+  "flowtype/boolean-style": [0],
+  "flowtype/delimiter-dangle": [0],
+  "flowtype/generic-spacing": [0],
+  "flowtype/object-type-curly-spacing": [0],
+  "flowtype/object-type-delimiter": [0],
+  "flowtype/quotes": [0],
+  "flowtype/semi": [0],
+  "flowtype/space-after-type-colon": [0],
+  "flowtype/space-before-generic-bracket": [0],
+  "flowtype/space-before-type-colon": [0],
+  "flowtype/union-intersection-spacing": [0],
+  "for-direction": [2],
+  "func-call-spacing": [0],
+  "function-call-argument-newline": [0],
+  "function-paren-newline": [0],
+  "generator-star": [0],
+  "generator-star-spacing": [0],
+  "getter-return": [2],
+  "implicit-arrow-linebreak": [0],
+  "indent": [0],
+  "indent-legacy": [0],
+  "jsx-quotes": [0],
+  "key-spacing": [0],
+  "keyword-spacing": [0],
+  "linebreak-style": [0],
   "lines-around-comment": [0],
   "local-rules/matching-translation-keys": [
-    "error",
+    2,
     {
       "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
       "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
     }
   ],
   "max-len": [0],
-  "max-statements-per-line": ["off"],
-  "multiline-ternary": ["off"],
-  "new-parens": ["off"],
-  "newline-per-chained-call": ["off"],
-  "no-arrow-condition": ["off"],
-  "no-async-promise-executor": ["error"],
-  "no-case-declarations": ["error"],
-  "no-class-assign": ["error"],
-  "no-comma-dangle": ["off"],
-  "no-compare-neg-zero": ["error"],
-  "no-cond-assign": ["error"],
+  "max-statements-per-line": [0],
+  "multiline-ternary": [0],
+  "new-parens": [0],
+  "newline-per-chained-call": [0],
+  "no-arrow-condition": [0],
+  "no-async-promise-executor": [2],
+  "no-case-declarations": [2],
+  "no-class-assign": [2],
+  "no-comma-dangle": [0],
+  "no-compare-neg-zero": [2],
+  "no-cond-assign": [2],
   "no-confusing-arrow": [0],
-  "no-console": ["off"],
-  "no-const-assign": ["error"],
-  "no-constant-condition": ["error"],
-  "no-control-regex": ["error"],
-  "no-debugger": ["error"],
-  "no-delete-var": ["error"],
-  "no-dupe-args": ["error"],
-  "no-dupe-class-members": ["error"],
-  "no-dupe-else-if": ["error"],
-  "no-dupe-keys": ["error"],
-  "no-duplicate-case": ["error"],
-  "no-empty": ["error"],
-  "no-empty-character-class": ["error"],
-  "no-empty-pattern": ["error"],
-  "no-ex-assign": ["error"],
-  "no-extra-boolean-cast": ["error"],
-  "no-extra-parens": ["off"],
-  "no-extra-semi": ["off"],
-  "no-fallthrough": ["error"],
-  "no-floating-decimal": ["off"],
-  "no-func-assign": ["error"],
-  "no-global-assign": ["error"],
-  "no-import-assign": ["error"],
-  "no-inner-declarations": ["error"],
-  "no-invalid-regexp": ["error"],
-  "no-irregular-whitespace": ["error"],
-  "no-loss-of-precision": ["error"],
-  "no-misleading-character-class": ["error"],
+  "no-console": [0],
+  "no-const-assign": [2],
+  "no-constant-binary-expression": [2],
+  "no-constant-condition": [2],
+  "no-control-regex": [2],
+  "no-debugger": [2],
+  "no-delete-var": [2],
+  "no-dupe-args": [2],
+  "no-dupe-class-members": [2],
+  "no-dupe-else-if": [2],
+  "no-dupe-keys": [2],
+  "no-duplicate-case": [2],
+  "no-empty": [2],
+  "no-empty-character-class": [2],
+  "no-empty-pattern": [2],
+  "no-empty-static-block": [2],
+  "no-ex-assign": [2],
+  "no-extra-boolean-cast": [2],
+  "no-extra-parens": [0],
+  "no-extra-semi": [0],
+  "no-fallthrough": [2],
+  "no-floating-decimal": [0],
+  "no-func-assign": [2],
+  "no-global-assign": [2],
+  "no-import-assign": [2],
+  "no-invalid-regexp": [2],
+  "no-irregular-whitespace": [2],
+  "no-loss-of-precision": [2],
+  "no-misleading-character-class": [2],
   "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": ["off"],
-  "no-multi-spaces": ["off"],
-  "no-multiple-empty-lines": ["off"],
-  "no-new-symbol": ["error"],
-  "no-nonoctal-decimal-escape": ["error"],
-  "no-obj-calls": ["error"],
-  "no-octal": ["error"],
-  "no-prototype-builtins": ["error"],
-  "no-redeclare": ["error"],
-  "no-regex-spaces": ["error"],
-  "no-reserved-keys": ["off"],
-  "no-self-assign": ["error"],
-  "no-setter-return": ["error"],
-  "no-shadow-restricted-names": ["error"],
-  "no-space-before-semi": ["off"],
-  "no-spaced-func": ["off"],
-  "no-sparse-arrays": ["error"],
+  "no-mixed-spaces-and-tabs": [0],
+  "no-multi-spaces": [0],
+  "no-multiple-empty-lines": [0],
+  "no-new-native-nonconstructor": [2],
+  "no-new-symbol": [0],
+  "no-nonoctal-decimal-escape": [2],
+  "no-obj-calls": [2],
+  "no-octal": [2],
+  "no-prototype-builtins": [2],
+  "no-redeclare": [2],
+  "no-regex-spaces": [2],
+  "no-reserved-keys": [0],
+  "no-self-assign": [2],
+  "no-setter-return": [2],
+  "no-shadow-restricted-names": [2],
+  "no-space-before-semi": [0],
+  "no-spaced-func": [0],
+  "no-sparse-arrays": [2],
   "no-tabs": [0],
-  "no-this-before-super": ["error"],
-  "no-trailing-spaces": ["off"],
-  "no-undef": ["off"],
+  "no-this-before-super": [2],
+  "no-trailing-spaces": [0],
+  "no-undef": [0],
   "no-unexpected-multiline": [0],
-  "no-unreachable": ["error"],
-  "no-unsafe-finally": ["error"],
-  "no-unsafe-negation": ["error"],
-  "no-unsafe-optional-chaining": ["error"],
-  "no-unused-labels": ["error"],
-  "no-unused-vars": ["error"],
-  "no-useless-backreference": ["error"],
-  "no-useless-catch": ["error"],
-  "no-useless-escape": ["error"],
-  "no-var": ["error"],
-  "no-whitespace-before-property": ["off"],
-  "no-with": ["error"],
-  "no-wrap-func": ["off"],
-  "nonblock-statement-body-position": ["off"],
-  "object-curly-newline": ["off"],
-  "object-curly-spacing": ["off"],
-  "object-property-newline": ["off"],
-  "one-var-declaration-per-line": ["off"],
-  "operator-linebreak": ["off"],
-  "padded-blocks": ["off"],
-  "prefer-arrow-callback": ["off"],
-  "prefer-const": ["error"],
-  "prefer-rest-params": ["error"],
-  "prefer-spread": ["error"],
-  "prettier/prettier": ["error"],
-  "quote-props": ["off"],
+  "no-unreachable": [2],
+  "no-unsafe-finally": [2],
+  "no-unsafe-negation": [2],
+  "no-unsafe-optional-chaining": [2],
+  "no-unused-labels": [2],
+  "no-unused-private-class-members": [2],
+  "no-unused-vars": [2],
+  "no-useless-backreference": [2],
+  "no-useless-catch": [2],
+  "no-useless-escape": [2],
+  "no-var": [2],
+  "no-whitespace-before-property": [0],
+  "no-with": [2],
+  "no-wrap-func": [0],
+  "nonblock-statement-body-position": [0],
+  "object-curly-newline": [0],
+  "object-curly-spacing": [0],
+  "object-property-newline": [0],
+  "one-var-declaration-per-line": [0],
+  "operator-linebreak": [0],
+  "padded-blocks": [0],
+  "prefer-arrow-callback": [0],
+  "prefer-const": [2],
+  "prefer-rest-params": [2],
+  "prefer-spread": [2],
+  "prettier/prettier": [2],
+  "quote-props": [0],
   "quotes": [0],
-  "react/jsx-child-element-spacing": ["off"],
-  "react/jsx-closing-bracket-location": ["off"],
-  "react/jsx-closing-tag-location": ["off"],
-  "react/jsx-curly-newline": ["off"],
-  "react/jsx-curly-spacing": ["off"],
-  "react/jsx-equals-spacing": ["off"],
-  "react/jsx-first-prop-new-line": ["off"],
-  "react/jsx-indent": ["off"],
-  "react/jsx-indent-props": ["off"],
-  "react/jsx-max-props-per-line": ["off"],
-  "react/jsx-newline": ["off"],
-  "react/jsx-one-expression-per-line": ["off"],
-  "react/jsx-props-no-multi-spaces": ["off"],
-  "react/jsx-space-before-closing": ["off"],
-  "react/jsx-tag-spacing": ["off"],
-  "react/jsx-wrap-multilines": ["off"],
-  "require-yield": ["error"],
-  "rest-spread-spacing": ["off"],
-  "semi": ["off"],
-  "semi-spacing": ["off"],
-  "semi-style": ["off"],
-  "space-after-function-name": ["off"],
-  "space-after-keywords": ["off"],
-  "space-before-blocks": ["off"],
-  "space-before-function-paren": ["off"],
-  "space-before-function-parentheses": ["off"],
-  "space-before-keywords": ["off"],
-  "space-in-brackets": ["off"],
-  "space-in-parens": ["off"],
-  "space-infix-ops": ["off"],
-  "space-return-throw-case": ["off"],
-  "space-unary-ops": ["off"],
-  "space-unary-word-ops": ["off"],
-  "standard/array-bracket-even-spacing": ["off"],
-  "standard/computed-property-even-spacing": ["off"],
-  "standard/object-curly-even-spacing": ["off"],
-  "switch-colon-spacing": ["off"],
-  "template-curly-spacing": ["off"],
-  "template-tag-spacing": ["off"],
-  "unicorn/empty-brace-spaces": ["off"],
-  "unicorn/no-nested-ternary": ["off"],
-  "unicorn/number-literal-case": ["off"],
+  "react/jsx-child-element-spacing": [0],
+  "react/jsx-closing-bracket-location": [0],
+  "react/jsx-closing-tag-location": [0],
+  "react/jsx-curly-newline": [0],
+  "react/jsx-curly-spacing": [0],
+  "react/jsx-equals-spacing": [0],
+  "react/jsx-first-prop-new-line": [0],
+  "react/jsx-indent": [0],
+  "react/jsx-indent-props": [0],
+  "react/jsx-max-props-per-line": [0],
+  "react/jsx-newline": [0],
+  "react/jsx-one-expression-per-line": [0],
+  "react/jsx-props-no-multi-spaces": [0],
+  "react/jsx-space-before-closing": [0],
+  "react/jsx-tag-spacing": [0],
+  "react/jsx-wrap-multilines": [0],
+  "require-yield": [2],
+  "rest-spread-spacing": [0],
+  "semi": [0],
+  "semi-spacing": [0],
+  "semi-style": [0],
+  "space-after-function-name": [0],
+  "space-after-keywords": [0],
+  "space-before-blocks": [0],
+  "space-before-function-paren": [0],
+  "space-before-function-parentheses": [0],
+  "space-before-keywords": [0],
+  "space-in-brackets": [0],
+  "space-in-parens": [0],
+  "space-infix-ops": [0],
+  "space-return-throw-case": [0],
+  "space-unary-ops": [0],
+  "space-unary-word-ops": [0],
+  "standard/array-bracket-even-spacing": [0],
+  "standard/computed-property-even-spacing": [0],
+  "standard/object-curly-even-spacing": [0],
+  "switch-colon-spacing": [0],
+  "template-curly-spacing": [0],
+  "template-tag-spacing": [0],
+  "unicorn/empty-brace-spaces": [0],
+  "unicorn/no-nested-ternary": [0],
+  "unicorn/number-literal-case": [0],
   "unicorn/template-indent": [0],
-  "use-isnan": ["error"],
-  "valid-typeof": ["error"],
-  "vue-scoped-css/enforce-style-type": ["warn"],
-  "vue-scoped-css/no-deprecated-deep-combinator": ["warn"],
-  "vue-scoped-css/no-parent-of-v-global": ["warn"],
-  "vue-scoped-css/no-parsing-error": ["warn"],
-  "vue-scoped-css/no-unused-keyframes": ["warn"],
-  "vue-scoped-css/no-unused-selector": ["warn"],
-  "vue-scoped-css/require-v-deep-argument": ["warn"],
-  "vue-scoped-css/require-v-global-argument": ["warn"],
-  "vue-scoped-css/require-v-slotted-argument": ["warn"],
-  "vue/array-bracket-newline": ["off"],
-  "vue/array-bracket-spacing": ["off"],
-  "vue/array-element-newline": ["off"],
-  "vue/arrow-spacing": ["off"],
-  "vue/attribute-hyphenation": ["warn"],
-  "vue/attributes-order": ["warn"],
-  "vue/block-spacing": ["off"],
-  "vue/block-tag-newline": ["off"],
-  "vue/brace-style": ["off"],
-  "vue/comma-dangle": ["off"],
-  "vue/comma-spacing": ["off"],
-  "vue/comma-style": ["off"],
-  "vue/comment-directive": ["error"],
-  "vue/component-definition-name-casing": ["warn"],
-  "vue/component-tags-order": ["warn"],
-  "vue/dot-location": ["off"],
-  "vue/first-attribute-linebreak": ["warn"],
-  "vue/func-call-spacing": ["off"],
-  "vue/html-closing-bracket-newline": ["off"],
-  "vue/html-closing-bracket-spacing": ["off"],
-  "vue/html-end-tags": ["off"],
-  "vue/html-indent": ["off"],
-  "vue/html-quotes": ["off"],
+  "use-isnan": [2],
+  "valid-typeof": [2],
+  "vue-scoped-css/enforce-style-type": [1],
+  "vue-scoped-css/no-deprecated-deep-combinator": [1],
+  "vue-scoped-css/no-parent-of-v-global": [1],
+  "vue-scoped-css/no-parsing-error": [1],
+  "vue-scoped-css/no-unused-keyframes": [1],
+  "vue-scoped-css/no-unused-selector": [1],
+  "vue-scoped-css/require-v-deep-argument": [1],
+  "vue-scoped-css/require-v-global-argument": [1],
+  "vue-scoped-css/require-v-slotted-argument": [1],
+  "vue/array-bracket-newline": [0],
+  "vue/array-bracket-spacing": [0],
+  "vue/array-element-newline": [0],
+  "vue/arrow-spacing": [0],
+  "vue/attribute-hyphenation": [1],
+  "vue/attributes-order": [1],
+  "vue/block-spacing": [0],
+  "vue/block-tag-newline": [0],
+  "vue/brace-style": [0],
+  "vue/comma-dangle": [0],
+  "vue/comma-spacing": [0],
+  "vue/comma-style": [0],
+  "vue/comment-directive": [2],
+  "vue/component-definition-name-casing": [1],
+  "vue/component-tags-order": [1],
+  "vue/dot-location": [0],
+  "vue/first-attribute-linebreak": [1],
+  "vue/func-call-spacing": [0],
+  "vue/html-closing-bracket-newline": [0],
+  "vue/html-closing-bracket-spacing": [0],
+  "vue/html-end-tags": [0],
+  "vue/html-indent": [0],
+  "vue/html-quotes": [0],
   "vue/html-self-closing": [0],
-  "vue/jsx-uses-vars": ["error"],
-  "vue/key-spacing": ["off"],
-  "vue/keyword-spacing": ["off"],
-  "vue/max-attributes-per-line": ["off"],
+  "vue/jsx-uses-vars": [2],
+  "vue/key-spacing": [0],
+  "vue/keyword-spacing": [0],
+  "vue/max-attributes-per-line": [0],
   "vue/max-len": [0],
-  "vue/multi-word-component-names": ["off"],
-  "vue/multiline-html-element-content-newline": ["off"],
-  "vue/multiline-ternary": ["off"],
-  "vue/mustache-interpolation-spacing": ["off"],
-  "vue/no-arrow-functions-in-watch": ["error"],
-  "vue/no-async-in-computed-properties": ["error"],
-  "vue/no-child-content": ["error"],
-  "vue/no-computed-properties-in-data": ["error"],
-  "vue/no-deprecated-data-object-declaration": ["error"],
-  "vue/no-deprecated-destroyed-lifecycle": ["error"],
-  "vue/no-deprecated-dollar-listeners-api": ["error"],
-  "vue/no-deprecated-dollar-scopedslots-api": ["error"],
-  "vue/no-deprecated-events-api": ["error"],
-  "vue/no-deprecated-filter": ["error"],
-  "vue/no-deprecated-functional-template": ["error"],
-  "vue/no-deprecated-html-element-is": ["error"],
-  "vue/no-deprecated-inline-template": ["error"],
-  "vue/no-deprecated-props-default-this": ["error"],
-  "vue/no-deprecated-router-link-tag-prop": ["error"],
-  "vue/no-deprecated-scope-attribute": ["error"],
-  "vue/no-deprecated-slot-attribute": ["error"],
-  "vue/no-deprecated-slot-scope-attribute": ["error"],
-  "vue/no-deprecated-v-bind-sync": ["error"],
-  "vue/no-deprecated-v-is": ["error"],
-  "vue/no-deprecated-v-on-native-modifier": ["error"],
-  "vue/no-deprecated-v-on-number-modifiers": ["error"],
-  "vue/no-deprecated-vue-config-keycodes": ["error"],
-  "vue/no-dupe-keys": ["error"],
-  "vue/no-dupe-v-else-if": ["error"],
-  "vue/no-duplicate-attributes": ["error"],
-  "vue/no-export-in-script-setup": ["error"],
-  "vue/no-expose-after-await": ["error"],
-  "vue/no-extra-parens": ["off"],
-  "vue/no-lifecycle-after-await": ["error"],
-  "vue/no-lone-template": ["warn"],
-  "vue/no-multi-spaces": ["off"],
-  "vue/no-multiple-slot-args": ["warn"],
-  "vue/no-multiple-template-root": ["error"],
-  "vue/no-mutating-props": ["error"],
-  "vue/no-parsing-error": ["error"],
-  "vue/no-ref-as-operand": ["error"],
-  "vue/no-reserved-component-names": ["error"],
-  "vue/no-reserved-keys": ["error"],
-  "vue/no-reserved-props": ["error"],
-  "vue/no-shared-component-data": ["error"],
-  "vue/no-side-effects-in-computed-properties": ["error"],
-  "vue/no-spaces-around-equal-signs-in-attribute": ["off"],
-  "vue/no-template-key": ["error"],
-  "vue/no-template-shadow": ["warn"],
-  "vue/no-textarea-mustache": ["error"],
-  "vue/no-unused-components": ["error"],
-  "vue/no-unused-vars": ["error"],
-  "vue/no-use-computed-property-like-method": ["error"],
-  "vue/no-use-v-if-with-v-for": ["error"],
-  "vue/no-useless-template-attributes": ["error"],
-  "vue/no-v-for-template-key-on-child": ["error"],
-  "vue/no-v-html": ["warn"],
-  "vue/no-v-text-v-html-on-component": ["error"],
-  "vue/no-watch-after-await": ["error"],
-  "vue/object-curly-newline": ["off"],
-  "vue/object-curly-spacing": ["off"],
-  "vue/object-property-newline": ["off"],
-  "vue/one-component-per-file": ["warn"],
-  "vue/operator-linebreak": ["off"],
-  "vue/order-in-components": ["warn"],
-  "vue/prefer-import-from-vue": ["error"],
-  "vue/prop-name-casing": ["warn"],
-  "vue/quote-props": ["off"],
-  "vue/require-component-is": ["error"],
-  "vue/require-default-prop": ["warn"],
-  "vue/require-explicit-emits": ["warn"],
-  "vue/require-prop-type-constructor": ["error"],
-  "vue/require-prop-types": ["warn"],
-  "vue/require-render-return": ["error"],
-  "vue/require-slots-as-functions": ["error"],
-  "vue/require-toggle-inside-transition": ["error"],
-  "vue/require-v-for-key": ["error"],
-  "vue/require-valid-default-prop": ["error"],
-  "vue/return-in-computed-property": ["error"],
-  "vue/return-in-emits-validator": ["error"],
-  "vue/script-indent": ["off"],
-  "vue/singleline-html-element-content-newline": ["off"],
-  "vue/space-in-parens": ["off"],
-  "vue/space-infix-ops": ["off"],
-  "vue/space-unary-ops": ["off"],
-  "vue/template-curly-spacing": ["off"],
-  "vue/this-in-template": ["warn"],
-  "vue/use-v-on-exact": ["error"],
-  "vue/v-bind-style": ["warn"],
+  "vue/multi-word-component-names": [0],
+  "vue/multiline-html-element-content-newline": [0],
+  "vue/multiline-ternary": [0],
+  "vue/mustache-interpolation-spacing": [0],
+  "vue/no-arrow-functions-in-watch": [2],
+  "vue/no-async-in-computed-properties": [2],
+  "vue/no-child-content": [2],
+  "vue/no-computed-properties-in-data": [2],
+  "vue/no-deprecated-data-object-declaration": [2],
+  "vue/no-deprecated-destroyed-lifecycle": [2],
+  "vue/no-deprecated-dollar-listeners-api": [2],
+  "vue/no-deprecated-dollar-scopedslots-api": [2],
+  "vue/no-deprecated-events-api": [2],
+  "vue/no-deprecated-filter": [2],
+  "vue/no-deprecated-functional-template": [2],
+  "vue/no-deprecated-html-element-is": [2],
+  "vue/no-deprecated-inline-template": [2],
+  "vue/no-deprecated-props-default-this": [2],
+  "vue/no-deprecated-router-link-tag-prop": [2],
+  "vue/no-deprecated-scope-attribute": [2],
+  "vue/no-deprecated-slot-attribute": [2],
+  "vue/no-deprecated-slot-scope-attribute": [2],
+  "vue/no-deprecated-v-bind-sync": [2],
+  "vue/no-deprecated-v-is": [2],
+  "vue/no-deprecated-v-on-native-modifier": [2],
+  "vue/no-deprecated-v-on-number-modifiers": [2],
+  "vue/no-deprecated-vue-config-keycodes": [2],
+  "vue/no-dupe-keys": [2],
+  "vue/no-dupe-v-else-if": [2],
+  "vue/no-duplicate-attributes": [2],
+  "vue/no-export-in-script-setup": [2],
+  "vue/no-expose-after-await": [2],
+  "vue/no-extra-parens": [0],
+  "vue/no-lifecycle-after-await": [2],
+  "vue/no-lone-template": [1],
+  "vue/no-multi-spaces": [0],
+  "vue/no-multiple-slot-args": [1],
+  "vue/no-multiple-template-root": [2],
+  "vue/no-mutating-props": [2],
+  "vue/no-parsing-error": [2],
+  "vue/no-ref-as-operand": [2],
+  "vue/no-reserved-component-names": [2],
+  "vue/no-reserved-keys": [2],
+  "vue/no-reserved-props": [2],
+  "vue/no-shared-component-data": [2],
+  "vue/no-side-effects-in-computed-properties": [2],
+  "vue/no-spaces-around-equal-signs-in-attribute": [0],
+  "vue/no-template-key": [2],
+  "vue/no-template-shadow": [1],
+  "vue/no-textarea-mustache": [2],
+  "vue/no-unused-components": [2],
+  "vue/no-unused-vars": [2],
+  "vue/no-use-computed-property-like-method": [2],
+  "vue/no-use-v-if-with-v-for": [2],
+  "vue/no-useless-template-attributes": [2],
+  "vue/no-v-for-template-key-on-child": [2],
+  "vue/no-v-html": [1],
+  "vue/no-v-text-v-html-on-component": [2],
+  "vue/no-watch-after-await": [2],
+  "vue/object-curly-newline": [0],
+  "vue/object-curly-spacing": [0],
+  "vue/object-property-newline": [0],
+  "vue/one-component-per-file": [1],
+  "vue/operator-linebreak": [0],
+  "vue/order-in-components": [1],
+  "vue/prefer-import-from-vue": [2],
+  "vue/prop-name-casing": [1],
+  "vue/quote-props": [0],
+  "vue/require-component-is": [2],
+  "vue/require-default-prop": [1],
+  "vue/require-explicit-emits": [1],
+  "vue/require-prop-type-constructor": [2],
+  "vue/require-prop-types": [1],
+  "vue/require-render-return": [2],
+  "vue/require-slots-as-functions": [2],
+  "vue/require-toggle-inside-transition": [2],
+  "vue/require-v-for-key": [2],
+  "vue/require-valid-default-prop": [2],
+  "vue/return-in-computed-property": [2],
+  "vue/return-in-emits-validator": [2],
+  "vue/script-indent": [0],
+  "vue/singleline-html-element-content-newline": [0],
+  "vue/space-in-parens": [0],
+  "vue/space-infix-ops": [0],
+  "vue/space-unary-ops": [0],
+  "vue/template-curly-spacing": [0],
+  "vue/this-in-template": [1],
+  "vue/use-v-on-exact": [2],
+  "vue/v-bind-style": [1],
   "vue/v-on-event-hyphenation": [
-    "warn",
+    1,
     "always",
     {
       "autofix": true
     }
   ],
-  "vue/v-on-style": ["warn"],
-  "vue/v-slot-style": ["warn"],
-  "vue/valid-attribute-name": ["error"],
-  "vue/valid-define-emits": ["error"],
-  "vue/valid-define-props": ["error"],
-  "vue/valid-next-tick": ["error"],
-  "vue/valid-template-root": ["error"],
-  "vue/valid-v-bind": ["error"],
-  "vue/valid-v-cloak": ["error"],
-  "vue/valid-v-else": ["error"],
-  "vue/valid-v-else-if": ["error"],
-  "vue/valid-v-for": ["error"],
-  "vue/valid-v-html": ["error"],
-  "vue/valid-v-if": ["error"],
-  "vue/valid-v-is": ["error"],
-  "vue/valid-v-memo": ["error"],
-  "vue/valid-v-model": ["error"],
-  "vue/valid-v-on": ["error"],
-  "vue/valid-v-once": ["error"],
-  "vue/valid-v-pre": ["error"],
-  "vue/valid-v-show": ["error"],
-  "vue/valid-v-slot": ["error"],
-  "vue/valid-v-text": ["error"],
-  "wrap-iife": ["off"],
-  "wrap-regex": ["off"],
-  "yield-star-spacing": ["off"]
+  "vue/v-on-style": [1],
+  "vue/v-slot-style": [1],
+  "vue/valid-attribute-name": [2],
+  "vue/valid-define-emits": [2],
+  "vue/valid-define-props": [2],
+  "vue/valid-next-tick": [2],
+  "vue/valid-template-root": [2],
+  "vue/valid-v-bind": [2],
+  "vue/valid-v-cloak": [2],
+  "vue/valid-v-else": [2],
+  "vue/valid-v-else-if": [2],
+  "vue/valid-v-for": [2],
+  "vue/valid-v-html": [2],
+  "vue/valid-v-if": [2],
+  "vue/valid-v-is": [2],
+  "vue/valid-v-memo": [2],
+  "vue/valid-v-model": [2],
+  "vue/valid-v-on": [2],
+  "vue/valid-v-once": [2],
+  "vue/valid-v-pre": [2],
+  "vue/valid-v-show": [2],
+  "vue/valid-v-slot": [2],
+  "vue/valid-v-text": [2],
+  "wrap-iife": [0],
+  "wrap-regex": [0],
+  "yield-star-spacing": [0]
 }
diff --git a/print/eslint.config.mjs b/print/eslint.config.mjs
new file mode 100644
index 0000000000..c79e5341c8
--- /dev/null
+++ b/print/eslint.config.mjs
@@ -0,0 +1,64 @@
+import { includeIgnoreFile } from '@eslint/compat'
+import localRules from 'eslint-plugin-local-rules'
+import globals from 'globals'
+import path from 'node:path'
+import { fileURLToPath } from 'node:url'
+import js from '@eslint/js'
+import { FlatCompat } from '@eslint/eslintrc'
+
+const __filename = fileURLToPath(import.meta.url)
+const __dirname = path.dirname(__filename)
+const compat = new FlatCompat({
+  baseDirectory: __dirname,
+  recommendedConfig: js.configs.recommended,
+  allConfig: js.configs.all,
+})
+const gitignorePath = path.resolve(__dirname, '.gitignore')
+
+export default [
+  {
+    files: ['**/*.ts'],
+  },
+  ...compat.extends(
+    'plugin:vue/vue3-recommended',
+    'plugin:vue-scoped-css/vue3-recommended',
+    '@nuxt/eslint-config',
+    'eslint:recommended',
+    'plugin:prettier/recommended'
+  ),
+  {
+    ignores: ['common/**/*', '.nuxt/', '.output/', 'coverage/'],
+  },
+
+  includeIgnoreFile(gitignorePath),
+
+  {
+    plugins: {
+      'local-rules': localRules,
+    },
+
+    languageOptions: {
+      globals: {
+        ...globals.browser,
+        ...globals.node,
+      },
+    },
+
+    rules: {
+      'no-undef': 'off',
+      'no-console': 'off',
+      'prettier/prettier': 'error',
+      'prefer-const': 'error',
+      'vue/multi-word-component-names': 'off',
+
+      'local-rules/matching-translation-keys': [
+        'error',
+        {
+          ignoreKeysRegex:
+            '^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+',
+          translationKeyPropRegex: '[a-zA-Z0-9]-i18n-key$',
+        },
+      ],
+    },
+  },
+]
diff --git a/print/package-lock.json b/print/package-lock.json
index d386b191b9..53adc26361 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -21,6 +21,9 @@
         "vuex": "4.1.0"
       },
       "devDependencies": {
+        "@eslint/compat": "1.1.1",
+        "@eslint/eslintrc": "3.1.0",
+        "@eslint/js": "9.9.0",
         "@nuxt/eslint-config": "0.5.1",
         "@nuxtjs/eslint-module": "4.1.0",
         "@nuxtjs/i18n": "8.5.0",
@@ -40,6 +43,7 @@
         "eslint-plugin-prettier": "5.2.1",
         "eslint-plugin-vue": "9.27.0",
         "eslint-plugin-vue-scoped-css": "2.8.1",
+        "globals": "15.9.0",
         "nuxt": "3.12.4",
         "prettier": "3.3.3",
         "sass": "1.69.4",
@@ -1196,17 +1200,27 @@
         "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
+    "node_modules/@eslint/compat": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.1.1.tgz",
+      "integrity": "sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
     "node_modules/@eslint/eslintrc": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
-      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+      "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "ajv": "^6.12.4",
         "debug": "^4.3.2",
-        "espree": "^9.6.0",
-        "globals": "^13.19.0",
+        "espree": "^10.0.1",
+        "globals": "^14.0.0",
         "ignore": "^5.2.0",
         "import-fresh": "^3.2.1",
         "js-yaml": "^4.1.0",
@@ -1214,7 +1228,7 @@
         "strip-json-comments": "^3.1.1"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
@@ -1231,48 +1245,14 @@
         "concat-map": "0.0.1"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@eslint/eslintrc/node_modules/espree": {
-      "version": "9.6.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
-      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "acorn": "^8.9.0",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^3.4.1"
-      },
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
     "node_modules/@eslint/eslintrc/node_modules/globals": {
-      "version": "13.24.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "type-fest": "^0.20.2"
-      },
       "engines": {
-        "node": ">=8"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -1291,19 +1271,6 @@
         "node": "*"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/type-fest": {
-      "version": "0.20.2",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
-      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
-      "dev": true,
-      "license": "(MIT OR CC0-1.0)",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/@eslint/js": {
       "version": "9.9.0",
       "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.0.tgz",
@@ -8448,6 +8415,30 @@
         "@types/json-schema": "*"
       }
     },
+    "node_modules/eslint/node_modules/@eslint/eslintrc": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.6.0",
+        "globals": "^13.19.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/eslint/node_modules/@eslint/js": {
       "version": "8.57.0",
       "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
diff --git a/print/package.json b/print/package.json
index cffbbcedea..f73daf2822 100644
--- a/print/package.json
+++ b/print/package.json
@@ -7,10 +7,10 @@
     "build": "nuxt build",
     "start": "nuxt start",
     "lint": "npm run lint:eslint && npm run lint:prettier",
-    "lint:eslint": "eslint --fix --ext .ts,.js,.vue --ignore-path .gitignore .",
+    "lint:eslint": "eslint --fix .",
     "lint:prettier": "prettier --write --ignore-path .gitignore **/*.{css,scss,json,md}",
     "lint:check": "npm run lint:check:eslint && npm run lint:check:prettier",
-    "lint:check:eslint": "eslint --ext .ts,.js,.vue --ignore-path .gitignore .",
+    "lint:check:eslint": "eslint .",
     "lint:check:prettier": "prettier --check --ignore-path .gitignore **/*.{css,scss,json,md}",
     "test": "vitest run --coverage"
   },
@@ -30,6 +30,9 @@
     "vuex": "4.1.0"
   },
   "devDependencies": {
+    "@eslint/compat": "1.1.1",
+    "@eslint/eslintrc": "3.1.0",
+    "@eslint/js": "9.9.0",
     "@nuxt/eslint-config": "0.5.1",
     "@nuxtjs/eslint-module": "4.1.0",
     "@nuxtjs/i18n": "8.5.0",
@@ -49,6 +52,7 @@
     "eslint-plugin-prettier": "5.2.1",
     "eslint-plugin-vue": "9.27.0",
     "eslint-plugin-vue-scoped-css": "2.8.1",
+    "globals": "15.9.0",
     "nuxt": "3.12.4",
     "prettier": "3.3.3",
     "sass": "1.69.4",

From bec1919d8871ce893efca49396fa58850804c2ea Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Tue, 13 Aug 2024 22:59:00 +0200
Subject: [PATCH 099/273] print: delete eslint-config-(vue,js,ts).json again

Was only needed for the migration
---
 print/eslint-config-js.json  | 369 ----------------------------------
 print/eslint-config-ts.json  | 374 ----------------------------------
 print/eslint-config-vue.json | 375 -----------------------------------
 3 files changed, 1118 deletions(-)
 delete mode 100644 print/eslint-config-js.json
 delete mode 100644 print/eslint-config-ts.json
 delete mode 100644 print/eslint-config-vue.json

diff --git a/print/eslint-config-js.json b/print/eslint-config-js.json
deleted file mode 100644
index 8fe2133928..0000000000
--- a/print/eslint-config-js.json
+++ /dev/null
@@ -1,369 +0,0 @@
-{
-  "@babel/object-curly-spacing": [0],
-  "@babel/semi": [0],
-  "@typescript-eslint/block-spacing": [0],
-  "@typescript-eslint/brace-style": [0],
-  "@typescript-eslint/comma-dangle": [0],
-  "@typescript-eslint/comma-spacing": [0],
-  "@typescript-eslint/func-call-spacing": [0],
-  "@typescript-eslint/indent": [0],
-  "@typescript-eslint/key-spacing": [0],
-  "@typescript-eslint/keyword-spacing": [0],
-  "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": [0],
-  "@typescript-eslint/no-extra-parens": [0],
-  "@typescript-eslint/no-extra-semi": [0],
-  "@typescript-eslint/object-curly-spacing": [0],
-  "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": [0],
-  "@typescript-eslint/space-before-blocks": [0],
-  "@typescript-eslint/space-before-function-paren": [0],
-  "@typescript-eslint/space-infix-ops": [0],
-  "@typescript-eslint/type-annotation-spacing": [0],
-  "array-bracket-newline": [0],
-  "array-bracket-spacing": [0],
-  "array-element-newline": [0],
-  "arrow-body-style": [0],
-  "arrow-parens": [0],
-  "arrow-spacing": [0],
-  "babel/object-curly-spacing": [0],
-  "babel/quotes": [0],
-  "babel/semi": [0],
-  "block-spacing": [0],
-  "brace-style": [0],
-  "comma-dangle": [0],
-  "comma-spacing": [0],
-  "comma-style": [0],
-  "computed-property-spacing": [0],
-  "constructor-super": [2],
-  "curly": [0],
-  "dot-location": [0],
-  "eol-last": [0],
-  "flowtype/boolean-style": [0],
-  "flowtype/delimiter-dangle": [0],
-  "flowtype/generic-spacing": [0],
-  "flowtype/object-type-curly-spacing": [0],
-  "flowtype/object-type-delimiter": [0],
-  "flowtype/quotes": [0],
-  "flowtype/semi": [0],
-  "flowtype/space-after-type-colon": [0],
-  "flowtype/space-before-generic-bracket": [0],
-  "flowtype/space-before-type-colon": [0],
-  "flowtype/union-intersection-spacing": [0],
-  "for-direction": [2],
-  "func-call-spacing": [0],
-  "function-call-argument-newline": [0],
-  "function-paren-newline": [0],
-  "generator-star": [0],
-  "generator-star-spacing": [0],
-  "getter-return": [2],
-  "implicit-arrow-linebreak": [0],
-  "indent": [0],
-  "indent-legacy": [0],
-  "jsx-quotes": [0],
-  "key-spacing": [0],
-  "keyword-spacing": [0],
-  "linebreak-style": [0],
-  "lines-around-comment": [0],
-  "local-rules/matching-translation-keys": [
-    2,
-    {
-      "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
-      "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
-    }
-  ],
-  "max-len": [0],
-  "max-statements-per-line": [0],
-  "multiline-ternary": [0],
-  "new-parens": [0],
-  "newline-per-chained-call": [0],
-  "no-arrow-condition": [0],
-  "no-async-promise-executor": [2],
-  "no-case-declarations": [2],
-  "no-class-assign": [2],
-  "no-comma-dangle": [0],
-  "no-compare-neg-zero": [2],
-  "no-cond-assign": [2],
-  "no-confusing-arrow": [0],
-  "no-console": [0],
-  "no-const-assign": [2],
-  "no-constant-binary-expression": [2],
-  "no-constant-condition": [2],
-  "no-control-regex": [2],
-  "no-debugger": [2],
-  "no-delete-var": [2],
-  "no-dupe-args": [2],
-  "no-dupe-class-members": [2],
-  "no-dupe-else-if": [2],
-  "no-dupe-keys": [2],
-  "no-duplicate-case": [2],
-  "no-empty": [2],
-  "no-empty-character-class": [2],
-  "no-empty-pattern": [2],
-  "no-empty-static-block": [2],
-  "no-ex-assign": [2],
-  "no-extra-boolean-cast": [2],
-  "no-extra-parens": [0],
-  "no-extra-semi": [0],
-  "no-fallthrough": [2],
-  "no-floating-decimal": [0],
-  "no-func-assign": [2],
-  "no-global-assign": [2],
-  "no-import-assign": [2],
-  "no-invalid-regexp": [2],
-  "no-irregular-whitespace": [2],
-  "no-loss-of-precision": [2],
-  "no-misleading-character-class": [2],
-  "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": [0],
-  "no-multi-spaces": [0],
-  "no-multiple-empty-lines": [0],
-  "no-new-native-nonconstructor": [2],
-  "no-nonoctal-decimal-escape": [2],
-  "no-obj-calls": [2],
-  "no-octal": [2],
-  "no-prototype-builtins": [2],
-  "no-redeclare": [2],
-  "no-regex-spaces": [2],
-  "no-reserved-keys": [0],
-  "no-self-assign": [2],
-  "no-setter-return": [2],
-  "no-shadow-restricted-names": [2],
-  "no-space-before-semi": [0],
-  "no-spaced-func": [0],
-  "no-sparse-arrays": [2],
-  "no-tabs": [0],
-  "no-this-before-super": [2],
-  "no-trailing-spaces": [0],
-  "no-undef": [0],
-  "no-unexpected-multiline": [0],
-  "no-unreachable": [2],
-  "no-unsafe-finally": [2],
-  "no-unsafe-negation": [2],
-  "no-unsafe-optional-chaining": [2],
-  "no-unused-labels": [2],
-  "no-unused-private-class-members": [2],
-  "no-unused-vars": [2],
-  "no-useless-backreference": [2],
-  "no-useless-catch": [2],
-  "no-useless-escape": [2],
-  "no-whitespace-before-property": [0],
-  "no-with": [2],
-  "no-wrap-func": [0],
-  "nonblock-statement-body-position": [0],
-  "object-curly-newline": [0],
-  "object-curly-spacing": [0],
-  "object-property-newline": [0],
-  "one-var-declaration-per-line": [0],
-  "operator-linebreak": [0],
-  "padded-blocks": [0],
-  "prefer-arrow-callback": [0],
-  "prefer-const": [2],
-  "prettier/prettier": [2],
-  "quote-props": [0],
-  "quotes": [0],
-  "react/jsx-child-element-spacing": [0],
-  "react/jsx-closing-bracket-location": [0],
-  "react/jsx-closing-tag-location": [0],
-  "react/jsx-curly-newline": [0],
-  "react/jsx-curly-spacing": [0],
-  "react/jsx-equals-spacing": [0],
-  "react/jsx-first-prop-new-line": [0],
-  "react/jsx-indent": [0],
-  "react/jsx-indent-props": [0],
-  "react/jsx-max-props-per-line": [0],
-  "react/jsx-newline": [0],
-  "react/jsx-one-expression-per-line": [0],
-  "react/jsx-props-no-multi-spaces": [0],
-  "react/jsx-space-before-closing": [0],
-  "react/jsx-tag-spacing": [0],
-  "react/jsx-wrap-multilines": [0],
-  "require-yield": [2],
-  "rest-spread-spacing": [0],
-  "semi": [0],
-  "semi-spacing": [0],
-  "semi-style": [0],
-  "space-after-function-name": [0],
-  "space-after-keywords": [0],
-  "space-before-blocks": [0],
-  "space-before-function-paren": [0],
-  "space-before-function-parentheses": [0],
-  "space-before-keywords": [0],
-  "space-in-brackets": [0],
-  "space-in-parens": [0],
-  "space-infix-ops": [0],
-  "space-return-throw-case": [0],
-  "space-unary-ops": [0],
-  "space-unary-word-ops": [0],
-  "standard/array-bracket-even-spacing": [0],
-  "standard/computed-property-even-spacing": [0],
-  "standard/object-curly-even-spacing": [0],
-  "switch-colon-spacing": [0],
-  "template-curly-spacing": [0],
-  "template-tag-spacing": [0],
-  "unicorn/empty-brace-spaces": [0],
-  "unicorn/no-nested-ternary": [0],
-  "unicorn/number-literal-case": [0],
-  "unicorn/template-indent": [0],
-  "use-isnan": [2],
-  "valid-typeof": [2],
-  "vue-scoped-css/enforce-style-type": [1],
-  "vue-scoped-css/no-deprecated-deep-combinator": [1],
-  "vue-scoped-css/no-parent-of-v-global": [1],
-  "vue-scoped-css/no-parsing-error": [1],
-  "vue-scoped-css/no-unused-keyframes": [1],
-  "vue-scoped-css/no-unused-selector": [1],
-  "vue-scoped-css/require-v-deep-argument": [1],
-  "vue-scoped-css/require-v-global-argument": [1],
-  "vue-scoped-css/require-v-slotted-argument": [1],
-  "vue/array-bracket-newline": [0],
-  "vue/array-bracket-spacing": [0],
-  "vue/array-element-newline": [0],
-  "vue/arrow-spacing": [0],
-  "vue/attribute-hyphenation": [1],
-  "vue/attributes-order": [1],
-  "vue/block-spacing": [0],
-  "vue/block-tag-newline": [0],
-  "vue/brace-style": [0],
-  "vue/comma-dangle": [0],
-  "vue/comma-spacing": [0],
-  "vue/comma-style": [0],
-  "vue/comment-directive": [2],
-  "vue/component-definition-name-casing": [1],
-  "vue/component-tags-order": [1],
-  "vue/dot-location": [0],
-  "vue/first-attribute-linebreak": [1],
-  "vue/func-call-spacing": [0],
-  "vue/html-closing-bracket-newline": [0],
-  "vue/html-closing-bracket-spacing": [0],
-  "vue/html-end-tags": [0],
-  "vue/html-indent": [0],
-  "vue/html-quotes": [0],
-  "vue/html-self-closing": [0],
-  "vue/jsx-uses-vars": [2],
-  "vue/key-spacing": [0],
-  "vue/keyword-spacing": [0],
-  "vue/max-attributes-per-line": [0],
-  "vue/max-len": [0],
-  "vue/multi-word-component-names": [0],
-  "vue/multiline-html-element-content-newline": [0],
-  "vue/multiline-ternary": [0],
-  "vue/mustache-interpolation-spacing": [0],
-  "vue/no-arrow-functions-in-watch": [2],
-  "vue/no-async-in-computed-properties": [2],
-  "vue/no-child-content": [2],
-  "vue/no-computed-properties-in-data": [2],
-  "vue/no-deprecated-data-object-declaration": [2],
-  "vue/no-deprecated-destroyed-lifecycle": [2],
-  "vue/no-deprecated-dollar-listeners-api": [2],
-  "vue/no-deprecated-dollar-scopedslots-api": [2],
-  "vue/no-deprecated-events-api": [2],
-  "vue/no-deprecated-filter": [2],
-  "vue/no-deprecated-functional-template": [2],
-  "vue/no-deprecated-html-element-is": [2],
-  "vue/no-deprecated-inline-template": [2],
-  "vue/no-deprecated-props-default-this": [2],
-  "vue/no-deprecated-router-link-tag-prop": [2],
-  "vue/no-deprecated-scope-attribute": [2],
-  "vue/no-deprecated-slot-attribute": [2],
-  "vue/no-deprecated-slot-scope-attribute": [2],
-  "vue/no-deprecated-v-bind-sync": [2],
-  "vue/no-deprecated-v-is": [2],
-  "vue/no-deprecated-v-on-native-modifier": [2],
-  "vue/no-deprecated-v-on-number-modifiers": [2],
-  "vue/no-deprecated-vue-config-keycodes": [2],
-  "vue/no-dupe-keys": [2],
-  "vue/no-dupe-v-else-if": [2],
-  "vue/no-duplicate-attributes": [2],
-  "vue/no-export-in-script-setup": [2],
-  "vue/no-expose-after-await": [2],
-  "vue/no-extra-parens": [0],
-  "vue/no-lifecycle-after-await": [2],
-  "vue/no-lone-template": [1],
-  "vue/no-multi-spaces": [0],
-  "vue/no-multiple-slot-args": [1],
-  "vue/no-mutating-props": [2],
-  "vue/no-parsing-error": [2],
-  "vue/no-ref-as-operand": [2],
-  "vue/no-reserved-component-names": [2],
-  "vue/no-reserved-keys": [2],
-  "vue/no-reserved-props": [2],
-  "vue/no-shared-component-data": [2],
-  "vue/no-side-effects-in-computed-properties": [2],
-  "vue/no-spaces-around-equal-signs-in-attribute": [0],
-  "vue/no-template-key": [2],
-  "vue/no-template-shadow": [1],
-  "vue/no-textarea-mustache": [2],
-  "vue/no-unused-components": [2],
-  "vue/no-unused-vars": [2],
-  "vue/no-use-computed-property-like-method": [2],
-  "vue/no-use-v-if-with-v-for": [2],
-  "vue/no-useless-template-attributes": [2],
-  "vue/no-v-for-template-key-on-child": [2],
-  "vue/no-v-html": [1],
-  "vue/no-v-text-v-html-on-component": [2],
-  "vue/no-watch-after-await": [2],
-  "vue/object-curly-newline": [0],
-  "vue/object-curly-spacing": [0],
-  "vue/object-property-newline": [0],
-  "vue/one-component-per-file": [1],
-  "vue/operator-linebreak": [0],
-  "vue/order-in-components": [1],
-  "vue/prefer-import-from-vue": [2],
-  "vue/prop-name-casing": [1],
-  "vue/quote-props": [0],
-  "vue/require-component-is": [2],
-  "vue/require-default-prop": [1],
-  "vue/require-explicit-emits": [1],
-  "vue/require-prop-type-constructor": [2],
-  "vue/require-prop-types": [1],
-  "vue/require-render-return": [2],
-  "vue/require-slots-as-functions": [2],
-  "vue/require-toggle-inside-transition": [2],
-  "vue/require-v-for-key": [2],
-  "vue/require-valid-default-prop": [2],
-  "vue/return-in-computed-property": [2],
-  "vue/return-in-emits-validator": [2],
-  "vue/script-indent": [0],
-  "vue/singleline-html-element-content-newline": [0],
-  "vue/space-in-parens": [0],
-  "vue/space-infix-ops": [0],
-  "vue/space-unary-ops": [0],
-  "vue/template-curly-spacing": [0],
-  "vue/this-in-template": [1],
-  "vue/use-v-on-exact": [2],
-  "vue/v-bind-style": [1],
-  "vue/v-on-event-hyphenation": [
-    1,
-    "always",
-    {
-      "autofix": true
-    }
-  ],
-  "vue/v-on-style": [1],
-  "vue/v-slot-style": [1],
-  "vue/valid-attribute-name": [2],
-  "vue/valid-define-emits": [2],
-  "vue/valid-define-props": [2],
-  "vue/valid-next-tick": [2],
-  "vue/valid-template-root": [2],
-  "vue/valid-v-bind": [2],
-  "vue/valid-v-cloak": [2],
-  "vue/valid-v-else": [2],
-  "vue/valid-v-else-if": [2],
-  "vue/valid-v-for": [2],
-  "vue/valid-v-html": [2],
-  "vue/valid-v-if": [2],
-  "vue/valid-v-is": [2],
-  "vue/valid-v-memo": [2],
-  "vue/valid-v-model": [2],
-  "vue/valid-v-on": [2],
-  "vue/valid-v-once": [2],
-  "vue/valid-v-pre": [2],
-  "vue/valid-v-show": [2],
-  "vue/valid-v-slot": [2],
-  "vue/valid-v-text": [2],
-  "wrap-iife": [0],
-  "wrap-regex": [0],
-  "yield-star-spacing": [0]
-}
diff --git a/print/eslint-config-ts.json b/print/eslint-config-ts.json
deleted file mode 100644
index 6398b6b5d6..0000000000
--- a/print/eslint-config-ts.json
+++ /dev/null
@@ -1,374 +0,0 @@
-{
-  "@babel/object-curly-spacing": [0],
-  "@babel/semi": [0],
-  "@typescript-eslint/block-spacing": [0],
-  "@typescript-eslint/brace-style": [0],
-  "@typescript-eslint/comma-dangle": [0],
-  "@typescript-eslint/comma-spacing": [0],
-  "@typescript-eslint/func-call-spacing": [0],
-  "@typescript-eslint/indent": [0],
-  "@typescript-eslint/key-spacing": [0],
-  "@typescript-eslint/keyword-spacing": [0],
-  "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": [0],
-  "@typescript-eslint/no-extra-parens": [0],
-  "@typescript-eslint/no-extra-semi": [0],
-  "@typescript-eslint/no-unused-vars": [1],
-  "@typescript-eslint/object-curly-spacing": [0],
-  "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": [0],
-  "@typescript-eslint/space-before-blocks": [0],
-  "@typescript-eslint/space-before-function-paren": [0],
-  "@typescript-eslint/space-infix-ops": [0],
-  "@typescript-eslint/type-annotation-spacing": [0],
-  "array-bracket-newline": [0],
-  "array-bracket-spacing": [0],
-  "array-element-newline": [0],
-  "arrow-body-style": [0],
-  "arrow-parens": [0],
-  "arrow-spacing": [0],
-  "babel/object-curly-spacing": [0],
-  "babel/quotes": [0],
-  "babel/semi": [0],
-  "block-spacing": [0],
-  "brace-style": [0],
-  "comma-dangle": [0],
-  "comma-spacing": [0],
-  "comma-style": [0],
-  "computed-property-spacing": [0],
-  "constructor-super": [2],
-  "curly": [0],
-  "dot-location": [0],
-  "eol-last": [0],
-  "flowtype/boolean-style": [0],
-  "flowtype/delimiter-dangle": [0],
-  "flowtype/generic-spacing": [0],
-  "flowtype/object-type-curly-spacing": [0],
-  "flowtype/object-type-delimiter": [0],
-  "flowtype/quotes": [0],
-  "flowtype/semi": [0],
-  "flowtype/space-after-type-colon": [0],
-  "flowtype/space-before-generic-bracket": [0],
-  "flowtype/space-before-type-colon": [0],
-  "flowtype/union-intersection-spacing": [0],
-  "for-direction": [2],
-  "func-call-spacing": [0],
-  "function-call-argument-newline": [0],
-  "function-paren-newline": [0],
-  "generator-star": [0],
-  "generator-star-spacing": [0],
-  "getter-return": [2],
-  "implicit-arrow-linebreak": [0],
-  "indent": [0],
-  "indent-legacy": [0],
-  "jsx-quotes": [0],
-  "key-spacing": [0],
-  "keyword-spacing": [0],
-  "linebreak-style": [0],
-  "lines-around-comment": [0],
-  "local-rules/matching-translation-keys": [
-    2,
-    {
-      "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
-      "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
-    }
-  ],
-  "max-len": [0],
-  "max-statements-per-line": [0],
-  "multiline-ternary": [0],
-  "new-parens": [0],
-  "newline-per-chained-call": [0],
-  "no-arrow-condition": [0],
-  "no-async-promise-executor": [2],
-  "no-case-declarations": [2],
-  "no-class-assign": [2],
-  "no-comma-dangle": [0],
-  "no-compare-neg-zero": [2],
-  "no-cond-assign": [2],
-  "no-confusing-arrow": [0],
-  "no-console": [0],
-  "no-const-assign": [2],
-  "no-constant-binary-expression": [2],
-  "no-constant-condition": [2],
-  "no-control-regex": [2],
-  "no-debugger": [2],
-  "no-delete-var": [2],
-  "no-dupe-args": [2],
-  "no-dupe-class-members": [2],
-  "no-dupe-else-if": [2],
-  "no-dupe-keys": [2],
-  "no-duplicate-case": [2],
-  "no-empty": [2],
-  "no-empty-character-class": [2],
-  "no-empty-pattern": [2],
-  "no-empty-static-block": [2],
-  "no-ex-assign": [2],
-  "no-extra-boolean-cast": [2],
-  "no-extra-parens": [0],
-  "no-extra-semi": [0],
-  "no-fallthrough": [2],
-  "no-floating-decimal": [0],
-  "no-func-assign": [2],
-  "no-global-assign": [2],
-  "no-import-assign": [2],
-  "no-invalid-regexp": [2],
-  "no-irregular-whitespace": [2],
-  "no-loss-of-precision": [2],
-  "no-misleading-character-class": [2],
-  "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": [0],
-  "no-multi-spaces": [0],
-  "no-multiple-empty-lines": [0],
-  "no-new-native-nonconstructor": [2],
-  "no-new-symbol": [0],
-  "no-nonoctal-decimal-escape": [2],
-  "no-obj-calls": [2],
-  "no-octal": [2],
-  "no-prototype-builtins": [2],
-  "no-redeclare": [2],
-  "no-regex-spaces": [2],
-  "no-reserved-keys": [0],
-  "no-self-assign": [2],
-  "no-setter-return": [2],
-  "no-shadow-restricted-names": [2],
-  "no-space-before-semi": [0],
-  "no-spaced-func": [0],
-  "no-sparse-arrays": [2],
-  "no-tabs": [0],
-  "no-this-before-super": [2],
-  "no-trailing-spaces": [0],
-  "no-undef": [0],
-  "no-unexpected-multiline": [0],
-  "no-unreachable": [2],
-  "no-unsafe-finally": [2],
-  "no-unsafe-negation": [2],
-  "no-unsafe-optional-chaining": [2],
-  "no-unused-labels": [2],
-  "no-unused-private-class-members": [2],
-  "no-unused-vars": [2],
-  "no-useless-backreference": [2],
-  "no-useless-catch": [2],
-  "no-useless-escape": [2],
-  "no-var": [2],
-  "no-whitespace-before-property": [0],
-  "no-with": [2],
-  "no-wrap-func": [0],
-  "nonblock-statement-body-position": [0],
-  "object-curly-newline": [0],
-  "object-curly-spacing": [0],
-  "object-property-newline": [0],
-  "one-var-declaration-per-line": [0],
-  "operator-linebreak": [0],
-  "padded-blocks": [0],
-  "prefer-arrow-callback": [0],
-  "prefer-const": [2],
-  "prefer-rest-params": [2],
-  "prefer-spread": [2],
-  "prettier/prettier": [2],
-  "quote-props": [0],
-  "quotes": [0],
-  "react/jsx-child-element-spacing": [0],
-  "react/jsx-closing-bracket-location": [0],
-  "react/jsx-closing-tag-location": [0],
-  "react/jsx-curly-newline": [0],
-  "react/jsx-curly-spacing": [0],
-  "react/jsx-equals-spacing": [0],
-  "react/jsx-first-prop-new-line": [0],
-  "react/jsx-indent": [0],
-  "react/jsx-indent-props": [0],
-  "react/jsx-max-props-per-line": [0],
-  "react/jsx-newline": [0],
-  "react/jsx-one-expression-per-line": [0],
-  "react/jsx-props-no-multi-spaces": [0],
-  "react/jsx-space-before-closing": [0],
-  "react/jsx-tag-spacing": [0],
-  "react/jsx-wrap-multilines": [0],
-  "require-yield": [2],
-  "rest-spread-spacing": [0],
-  "semi": [0],
-  "semi-spacing": [0],
-  "semi-style": [0],
-  "space-after-function-name": [0],
-  "space-after-keywords": [0],
-  "space-before-blocks": [0],
-  "space-before-function-paren": [0],
-  "space-before-function-parentheses": [0],
-  "space-before-keywords": [0],
-  "space-in-brackets": [0],
-  "space-in-parens": [0],
-  "space-infix-ops": [0],
-  "space-return-throw-case": [0],
-  "space-unary-ops": [0],
-  "space-unary-word-ops": [0],
-  "standard/array-bracket-even-spacing": [0],
-  "standard/computed-property-even-spacing": [0],
-  "standard/object-curly-even-spacing": [0],
-  "switch-colon-spacing": [0],
-  "template-curly-spacing": [0],
-  "template-tag-spacing": [0],
-  "unicorn/empty-brace-spaces": [0],
-  "unicorn/no-nested-ternary": [0],
-  "unicorn/number-literal-case": [0],
-  "unicorn/template-indent": [0],
-  "use-isnan": [2],
-  "valid-typeof": [2],
-  "vue-scoped-css/enforce-style-type": [1],
-  "vue-scoped-css/no-deprecated-deep-combinator": [1],
-  "vue-scoped-css/no-parent-of-v-global": [1],
-  "vue-scoped-css/no-parsing-error": [1],
-  "vue-scoped-css/no-unused-keyframes": [1],
-  "vue-scoped-css/no-unused-selector": [1],
-  "vue-scoped-css/require-v-deep-argument": [1],
-  "vue-scoped-css/require-v-global-argument": [1],
-  "vue-scoped-css/require-v-slotted-argument": [1],
-  "vue/array-bracket-newline": [0],
-  "vue/array-bracket-spacing": [0],
-  "vue/array-element-newline": [0],
-  "vue/arrow-spacing": [0],
-  "vue/attribute-hyphenation": [1],
-  "vue/attributes-order": [1],
-  "vue/block-spacing": [0],
-  "vue/block-tag-newline": [0],
-  "vue/brace-style": [0],
-  "vue/comma-dangle": [0],
-  "vue/comma-spacing": [0],
-  "vue/comma-style": [0],
-  "vue/comment-directive": [2],
-  "vue/component-definition-name-casing": [1],
-  "vue/component-tags-order": [1],
-  "vue/dot-location": [0],
-  "vue/first-attribute-linebreak": [1],
-  "vue/func-call-spacing": [0],
-  "vue/html-closing-bracket-newline": [0],
-  "vue/html-closing-bracket-spacing": [0],
-  "vue/html-end-tags": [0],
-  "vue/html-indent": [0],
-  "vue/html-quotes": [0],
-  "vue/html-self-closing": [0],
-  "vue/jsx-uses-vars": [2],
-  "vue/key-spacing": [0],
-  "vue/keyword-spacing": [0],
-  "vue/max-attributes-per-line": [0],
-  "vue/max-len": [0],
-  "vue/multi-word-component-names": [0],
-  "vue/multiline-html-element-content-newline": [0],
-  "vue/multiline-ternary": [0],
-  "vue/mustache-interpolation-spacing": [0],
-  "vue/no-arrow-functions-in-watch": [2],
-  "vue/no-async-in-computed-properties": [2],
-  "vue/no-child-content": [2],
-  "vue/no-computed-properties-in-data": [2],
-  "vue/no-deprecated-data-object-declaration": [2],
-  "vue/no-deprecated-destroyed-lifecycle": [2],
-  "vue/no-deprecated-dollar-listeners-api": [2],
-  "vue/no-deprecated-dollar-scopedslots-api": [2],
-  "vue/no-deprecated-events-api": [2],
-  "vue/no-deprecated-filter": [2],
-  "vue/no-deprecated-functional-template": [2],
-  "vue/no-deprecated-html-element-is": [2],
-  "vue/no-deprecated-inline-template": [2],
-  "vue/no-deprecated-props-default-this": [2],
-  "vue/no-deprecated-router-link-tag-prop": [2],
-  "vue/no-deprecated-scope-attribute": [2],
-  "vue/no-deprecated-slot-attribute": [2],
-  "vue/no-deprecated-slot-scope-attribute": [2],
-  "vue/no-deprecated-v-bind-sync": [2],
-  "vue/no-deprecated-v-is": [2],
-  "vue/no-deprecated-v-on-native-modifier": [2],
-  "vue/no-deprecated-v-on-number-modifiers": [2],
-  "vue/no-deprecated-vue-config-keycodes": [2],
-  "vue/no-dupe-keys": [2],
-  "vue/no-dupe-v-else-if": [2],
-  "vue/no-duplicate-attributes": [2],
-  "vue/no-export-in-script-setup": [2],
-  "vue/no-expose-after-await": [2],
-  "vue/no-extra-parens": [0],
-  "vue/no-lifecycle-after-await": [2],
-  "vue/no-lone-template": [1],
-  "vue/no-multi-spaces": [0],
-  "vue/no-multiple-slot-args": [1],
-  "vue/no-mutating-props": [2],
-  "vue/no-parsing-error": [2],
-  "vue/no-ref-as-operand": [2],
-  "vue/no-reserved-component-names": [2],
-  "vue/no-reserved-keys": [2],
-  "vue/no-reserved-props": [2],
-  "vue/no-shared-component-data": [2],
-  "vue/no-side-effects-in-computed-properties": [2],
-  "vue/no-spaces-around-equal-signs-in-attribute": [0],
-  "vue/no-template-key": [2],
-  "vue/no-template-shadow": [1],
-  "vue/no-textarea-mustache": [2],
-  "vue/no-unused-components": [2],
-  "vue/no-unused-vars": [2],
-  "vue/no-use-computed-property-like-method": [2],
-  "vue/no-use-v-if-with-v-for": [2],
-  "vue/no-useless-template-attributes": [2],
-  "vue/no-v-for-template-key-on-child": [2],
-  "vue/no-v-html": [1],
-  "vue/no-v-text-v-html-on-component": [2],
-  "vue/no-watch-after-await": [2],
-  "vue/object-curly-newline": [0],
-  "vue/object-curly-spacing": [0],
-  "vue/object-property-newline": [0],
-  "vue/one-component-per-file": [1],
-  "vue/operator-linebreak": [0],
-  "vue/order-in-components": [1],
-  "vue/prefer-import-from-vue": [2],
-  "vue/prop-name-casing": [1],
-  "vue/quote-props": [0],
-  "vue/require-component-is": [2],
-  "vue/require-default-prop": [1],
-  "vue/require-explicit-emits": [1],
-  "vue/require-prop-type-constructor": [2],
-  "vue/require-prop-types": [1],
-  "vue/require-render-return": [2],
-  "vue/require-slots-as-functions": [2],
-  "vue/require-toggle-inside-transition": [2],
-  "vue/require-v-for-key": [2],
-  "vue/require-valid-default-prop": [2],
-  "vue/return-in-computed-property": [2],
-  "vue/return-in-emits-validator": [2],
-  "vue/script-indent": [0],
-  "vue/singleline-html-element-content-newline": [0],
-  "vue/space-in-parens": [0],
-  "vue/space-infix-ops": [0],
-  "vue/space-unary-ops": [0],
-  "vue/template-curly-spacing": [0],
-  "vue/this-in-template": [1],
-  "vue/use-v-on-exact": [2],
-  "vue/v-bind-style": [1],
-  "vue/v-on-event-hyphenation": [
-    1,
-    "always",
-    {
-      "autofix": true
-    }
-  ],
-  "vue/v-on-style": [1],
-  "vue/v-slot-style": [1],
-  "vue/valid-attribute-name": [2],
-  "vue/valid-define-emits": [2],
-  "vue/valid-define-props": [2],
-  "vue/valid-next-tick": [2],
-  "vue/valid-template-root": [2],
-  "vue/valid-v-bind": [2],
-  "vue/valid-v-cloak": [2],
-  "vue/valid-v-else": [2],
-  "vue/valid-v-else-if": [2],
-  "vue/valid-v-for": [2],
-  "vue/valid-v-html": [2],
-  "vue/valid-v-if": [2],
-  "vue/valid-v-is": [2],
-  "vue/valid-v-memo": [2],
-  "vue/valid-v-model": [2],
-  "vue/valid-v-on": [2],
-  "vue/valid-v-once": [2],
-  "vue/valid-v-pre": [2],
-  "vue/valid-v-show": [2],
-  "vue/valid-v-slot": [2],
-  "vue/valid-v-text": [2],
-  "wrap-iife": [0],
-  "wrap-regex": [0],
-  "yield-star-spacing": [0]
-}
diff --git a/print/eslint-config-vue.json b/print/eslint-config-vue.json
deleted file mode 100644
index 3147aae9fc..0000000000
--- a/print/eslint-config-vue.json
+++ /dev/null
@@ -1,375 +0,0 @@
-{
-  "@babel/object-curly-spacing": [0],
-  "@babel/semi": [0],
-  "@typescript-eslint/block-spacing": [0],
-  "@typescript-eslint/brace-style": [0],
-  "@typescript-eslint/comma-dangle": [0],
-  "@typescript-eslint/comma-spacing": [0],
-  "@typescript-eslint/func-call-spacing": [0],
-  "@typescript-eslint/indent": [0],
-  "@typescript-eslint/key-spacing": [0],
-  "@typescript-eslint/keyword-spacing": [0],
-  "@typescript-eslint/lines-around-comment": [0],
-  "@typescript-eslint/member-delimiter-style": [0],
-  "@typescript-eslint/no-extra-parens": [0],
-  "@typescript-eslint/no-extra-semi": [0],
-  "@typescript-eslint/no-unused-vars": [1],
-  "@typescript-eslint/object-curly-spacing": [0],
-  "@typescript-eslint/quotes": [0],
-  "@typescript-eslint/semi": [0],
-  "@typescript-eslint/space-before-blocks": [0],
-  "@typescript-eslint/space-before-function-paren": [0],
-  "@typescript-eslint/space-infix-ops": [0],
-  "@typescript-eslint/type-annotation-spacing": [0],
-  "array-bracket-newline": [0],
-  "array-bracket-spacing": [0],
-  "array-element-newline": [0],
-  "arrow-body-style": [0],
-  "arrow-parens": [0],
-  "arrow-spacing": [0],
-  "babel/object-curly-spacing": [0],
-  "babel/quotes": [0],
-  "babel/semi": [0],
-  "block-spacing": [0],
-  "brace-style": [0],
-  "comma-dangle": [0],
-  "comma-spacing": [0],
-  "comma-style": [0],
-  "computed-property-spacing": [0],
-  "constructor-super": [2],
-  "curly": [0],
-  "dot-location": [0],
-  "eol-last": [0],
-  "flowtype/boolean-style": [0],
-  "flowtype/delimiter-dangle": [0],
-  "flowtype/generic-spacing": [0],
-  "flowtype/object-type-curly-spacing": [0],
-  "flowtype/object-type-delimiter": [0],
-  "flowtype/quotes": [0],
-  "flowtype/semi": [0],
-  "flowtype/space-after-type-colon": [0],
-  "flowtype/space-before-generic-bracket": [0],
-  "flowtype/space-before-type-colon": [0],
-  "flowtype/union-intersection-spacing": [0],
-  "for-direction": [2],
-  "func-call-spacing": [0],
-  "function-call-argument-newline": [0],
-  "function-paren-newline": [0],
-  "generator-star": [0],
-  "generator-star-spacing": [0],
-  "getter-return": [2],
-  "implicit-arrow-linebreak": [0],
-  "indent": [0],
-  "indent-legacy": [0],
-  "jsx-quotes": [0],
-  "key-spacing": [0],
-  "keyword-spacing": [0],
-  "linebreak-style": [0],
-  "lines-around-comment": [0],
-  "local-rules/matching-translation-keys": [
-    2,
-    {
-      "ignoreKeysRegex": "^(global|entity|contentNode\\.[a-z][a-zA-Z]+|print\\.(global|activity|cover|picasso|program|story|toc))\\..+",
-      "translationKeyPropRegex": "[a-zA-Z0-9]-i18n-key$"
-    }
-  ],
-  "max-len": [0],
-  "max-statements-per-line": [0],
-  "multiline-ternary": [0],
-  "new-parens": [0],
-  "newline-per-chained-call": [0],
-  "no-arrow-condition": [0],
-  "no-async-promise-executor": [2],
-  "no-case-declarations": [2],
-  "no-class-assign": [2],
-  "no-comma-dangle": [0],
-  "no-compare-neg-zero": [2],
-  "no-cond-assign": [2],
-  "no-confusing-arrow": [0],
-  "no-console": [0],
-  "no-const-assign": [2],
-  "no-constant-binary-expression": [2],
-  "no-constant-condition": [2],
-  "no-control-regex": [2],
-  "no-debugger": [2],
-  "no-delete-var": [2],
-  "no-dupe-args": [2],
-  "no-dupe-class-members": [2],
-  "no-dupe-else-if": [2],
-  "no-dupe-keys": [2],
-  "no-duplicate-case": [2],
-  "no-empty": [2],
-  "no-empty-character-class": [2],
-  "no-empty-pattern": [2],
-  "no-empty-static-block": [2],
-  "no-ex-assign": [2],
-  "no-extra-boolean-cast": [2],
-  "no-extra-parens": [0],
-  "no-extra-semi": [0],
-  "no-fallthrough": [2],
-  "no-floating-decimal": [0],
-  "no-func-assign": [2],
-  "no-global-assign": [2],
-  "no-import-assign": [2],
-  "no-invalid-regexp": [2],
-  "no-irregular-whitespace": [2],
-  "no-loss-of-precision": [2],
-  "no-misleading-character-class": [2],
-  "no-mixed-operators": [0],
-  "no-mixed-spaces-and-tabs": [0],
-  "no-multi-spaces": [0],
-  "no-multiple-empty-lines": [0],
-  "no-new-native-nonconstructor": [2],
-  "no-new-symbol": [0],
-  "no-nonoctal-decimal-escape": [2],
-  "no-obj-calls": [2],
-  "no-octal": [2],
-  "no-prototype-builtins": [2],
-  "no-redeclare": [2],
-  "no-regex-spaces": [2],
-  "no-reserved-keys": [0],
-  "no-self-assign": [2],
-  "no-setter-return": [2],
-  "no-shadow-restricted-names": [2],
-  "no-space-before-semi": [0],
-  "no-spaced-func": [0],
-  "no-sparse-arrays": [2],
-  "no-tabs": [0],
-  "no-this-before-super": [2],
-  "no-trailing-spaces": [0],
-  "no-undef": [0],
-  "no-unexpected-multiline": [0],
-  "no-unreachable": [2],
-  "no-unsafe-finally": [2],
-  "no-unsafe-negation": [2],
-  "no-unsafe-optional-chaining": [2],
-  "no-unused-labels": [2],
-  "no-unused-private-class-members": [2],
-  "no-unused-vars": [2],
-  "no-useless-backreference": [2],
-  "no-useless-catch": [2],
-  "no-useless-escape": [2],
-  "no-var": [2],
-  "no-whitespace-before-property": [0],
-  "no-with": [2],
-  "no-wrap-func": [0],
-  "nonblock-statement-body-position": [0],
-  "object-curly-newline": [0],
-  "object-curly-spacing": [0],
-  "object-property-newline": [0],
-  "one-var-declaration-per-line": [0],
-  "operator-linebreak": [0],
-  "padded-blocks": [0],
-  "prefer-arrow-callback": [0],
-  "prefer-const": [2],
-  "prefer-rest-params": [2],
-  "prefer-spread": [2],
-  "prettier/prettier": [2],
-  "quote-props": [0],
-  "quotes": [0],
-  "react/jsx-child-element-spacing": [0],
-  "react/jsx-closing-bracket-location": [0],
-  "react/jsx-closing-tag-location": [0],
-  "react/jsx-curly-newline": [0],
-  "react/jsx-curly-spacing": [0],
-  "react/jsx-equals-spacing": [0],
-  "react/jsx-first-prop-new-line": [0],
-  "react/jsx-indent": [0],
-  "react/jsx-indent-props": [0],
-  "react/jsx-max-props-per-line": [0],
-  "react/jsx-newline": [0],
-  "react/jsx-one-expression-per-line": [0],
-  "react/jsx-props-no-multi-spaces": [0],
-  "react/jsx-space-before-closing": [0],
-  "react/jsx-tag-spacing": [0],
-  "react/jsx-wrap-multilines": [0],
-  "require-yield": [2],
-  "rest-spread-spacing": [0],
-  "semi": [0],
-  "semi-spacing": [0],
-  "semi-style": [0],
-  "space-after-function-name": [0],
-  "space-after-keywords": [0],
-  "space-before-blocks": [0],
-  "space-before-function-paren": [0],
-  "space-before-function-parentheses": [0],
-  "space-before-keywords": [0],
-  "space-in-brackets": [0],
-  "space-in-parens": [0],
-  "space-infix-ops": [0],
-  "space-return-throw-case": [0],
-  "space-unary-ops": [0],
-  "space-unary-word-ops": [0],
-  "standard/array-bracket-even-spacing": [0],
-  "standard/computed-property-even-spacing": [0],
-  "standard/object-curly-even-spacing": [0],
-  "switch-colon-spacing": [0],
-  "template-curly-spacing": [0],
-  "template-tag-spacing": [0],
-  "unicorn/empty-brace-spaces": [0],
-  "unicorn/no-nested-ternary": [0],
-  "unicorn/number-literal-case": [0],
-  "unicorn/template-indent": [0],
-  "use-isnan": [2],
-  "valid-typeof": [2],
-  "vue-scoped-css/enforce-style-type": [1],
-  "vue-scoped-css/no-deprecated-deep-combinator": [1],
-  "vue-scoped-css/no-parent-of-v-global": [1],
-  "vue-scoped-css/no-parsing-error": [1],
-  "vue-scoped-css/no-unused-keyframes": [1],
-  "vue-scoped-css/no-unused-selector": [1],
-  "vue-scoped-css/require-v-deep-argument": [1],
-  "vue-scoped-css/require-v-global-argument": [1],
-  "vue-scoped-css/require-v-slotted-argument": [1],
-  "vue/array-bracket-newline": [0],
-  "vue/array-bracket-spacing": [0],
-  "vue/array-element-newline": [0],
-  "vue/arrow-spacing": [0],
-  "vue/attribute-hyphenation": [1],
-  "vue/attributes-order": [1],
-  "vue/block-spacing": [0],
-  "vue/block-tag-newline": [0],
-  "vue/brace-style": [0],
-  "vue/comma-dangle": [0],
-  "vue/comma-spacing": [0],
-  "vue/comma-style": [0],
-  "vue/comment-directive": [2],
-  "vue/component-definition-name-casing": [1],
-  "vue/component-tags-order": [1],
-  "vue/dot-location": [0],
-  "vue/first-attribute-linebreak": [1],
-  "vue/func-call-spacing": [0],
-  "vue/html-closing-bracket-newline": [0],
-  "vue/html-closing-bracket-spacing": [0],
-  "vue/html-end-tags": [0],
-  "vue/html-indent": [0],
-  "vue/html-quotes": [0],
-  "vue/html-self-closing": [0],
-  "vue/jsx-uses-vars": [2],
-  "vue/key-spacing": [0],
-  "vue/keyword-spacing": [0],
-  "vue/max-attributes-per-line": [0],
-  "vue/max-len": [0],
-  "vue/multi-word-component-names": [0],
-  "vue/multiline-html-element-content-newline": [0],
-  "vue/multiline-ternary": [0],
-  "vue/mustache-interpolation-spacing": [0],
-  "vue/no-arrow-functions-in-watch": [2],
-  "vue/no-async-in-computed-properties": [2],
-  "vue/no-child-content": [2],
-  "vue/no-computed-properties-in-data": [2],
-  "vue/no-deprecated-data-object-declaration": [2],
-  "vue/no-deprecated-destroyed-lifecycle": [2],
-  "vue/no-deprecated-dollar-listeners-api": [2],
-  "vue/no-deprecated-dollar-scopedslots-api": [2],
-  "vue/no-deprecated-events-api": [2],
-  "vue/no-deprecated-filter": [2],
-  "vue/no-deprecated-functional-template": [2],
-  "vue/no-deprecated-html-element-is": [2],
-  "vue/no-deprecated-inline-template": [2],
-  "vue/no-deprecated-props-default-this": [2],
-  "vue/no-deprecated-router-link-tag-prop": [2],
-  "vue/no-deprecated-scope-attribute": [2],
-  "vue/no-deprecated-slot-attribute": [2],
-  "vue/no-deprecated-slot-scope-attribute": [2],
-  "vue/no-deprecated-v-bind-sync": [2],
-  "vue/no-deprecated-v-is": [2],
-  "vue/no-deprecated-v-on-native-modifier": [2],
-  "vue/no-deprecated-v-on-number-modifiers": [2],
-  "vue/no-deprecated-vue-config-keycodes": [2],
-  "vue/no-dupe-keys": [2],
-  "vue/no-dupe-v-else-if": [2],
-  "vue/no-duplicate-attributes": [2],
-  "vue/no-export-in-script-setup": [2],
-  "vue/no-expose-after-await": [2],
-  "vue/no-extra-parens": [0],
-  "vue/no-lifecycle-after-await": [2],
-  "vue/no-lone-template": [1],
-  "vue/no-multi-spaces": [0],
-  "vue/no-multiple-slot-args": [1],
-  "vue/no-multiple-template-root": [2],
-  "vue/no-mutating-props": [2],
-  "vue/no-parsing-error": [2],
-  "vue/no-ref-as-operand": [2],
-  "vue/no-reserved-component-names": [2],
-  "vue/no-reserved-keys": [2],
-  "vue/no-reserved-props": [2],
-  "vue/no-shared-component-data": [2],
-  "vue/no-side-effects-in-computed-properties": [2],
-  "vue/no-spaces-around-equal-signs-in-attribute": [0],
-  "vue/no-template-key": [2],
-  "vue/no-template-shadow": [1],
-  "vue/no-textarea-mustache": [2],
-  "vue/no-unused-components": [2],
-  "vue/no-unused-vars": [2],
-  "vue/no-use-computed-property-like-method": [2],
-  "vue/no-use-v-if-with-v-for": [2],
-  "vue/no-useless-template-attributes": [2],
-  "vue/no-v-for-template-key-on-child": [2],
-  "vue/no-v-html": [1],
-  "vue/no-v-text-v-html-on-component": [2],
-  "vue/no-watch-after-await": [2],
-  "vue/object-curly-newline": [0],
-  "vue/object-curly-spacing": [0],
-  "vue/object-property-newline": [0],
-  "vue/one-component-per-file": [1],
-  "vue/operator-linebreak": [0],
-  "vue/order-in-components": [1],
-  "vue/prefer-import-from-vue": [2],
-  "vue/prop-name-casing": [1],
-  "vue/quote-props": [0],
-  "vue/require-component-is": [2],
-  "vue/require-default-prop": [1],
-  "vue/require-explicit-emits": [1],
-  "vue/require-prop-type-constructor": [2],
-  "vue/require-prop-types": [1],
-  "vue/require-render-return": [2],
-  "vue/require-slots-as-functions": [2],
-  "vue/require-toggle-inside-transition": [2],
-  "vue/require-v-for-key": [2],
-  "vue/require-valid-default-prop": [2],
-  "vue/return-in-computed-property": [2],
-  "vue/return-in-emits-validator": [2],
-  "vue/script-indent": [0],
-  "vue/singleline-html-element-content-newline": [0],
-  "vue/space-in-parens": [0],
-  "vue/space-infix-ops": [0],
-  "vue/space-unary-ops": [0],
-  "vue/template-curly-spacing": [0],
-  "vue/this-in-template": [1],
-  "vue/use-v-on-exact": [2],
-  "vue/v-bind-style": [1],
-  "vue/v-on-event-hyphenation": [
-    1,
-    "always",
-    {
-      "autofix": true
-    }
-  ],
-  "vue/v-on-style": [1],
-  "vue/v-slot-style": [1],
-  "vue/valid-attribute-name": [2],
-  "vue/valid-define-emits": [2],
-  "vue/valid-define-props": [2],
-  "vue/valid-next-tick": [2],
-  "vue/valid-template-root": [2],
-  "vue/valid-v-bind": [2],
-  "vue/valid-v-cloak": [2],
-  "vue/valid-v-else": [2],
-  "vue/valid-v-else-if": [2],
-  "vue/valid-v-for": [2],
-  "vue/valid-v-html": [2],
-  "vue/valid-v-if": [2],
-  "vue/valid-v-is": [2],
-  "vue/valid-v-memo": [2],
-  "vue/valid-v-model": [2],
-  "vue/valid-v-on": [2],
-  "vue/valid-v-once": [2],
-  "vue/valid-v-pre": [2],
-  "vue/valid-v-show": [2],
-  "vue/valid-v-slot": [2],
-  "vue/valid-v-text": [2],
-  "wrap-iife": [0],
-  "wrap-regex": [0],
-  "yield-star-spacing": [0]
-}

From 54ee0d731f548a4445f8214bcef2e2b5ef2b5c6f Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Sat, 15 Jun 2024 16:19:21 +0200
Subject: [PATCH 100/273] CategoryProperties: fix all missing import issues

---
 frontend/src/components/category/CategoryProperties.vue | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/frontend/src/components/category/CategoryProperties.vue b/frontend/src/components/category/CategoryProperties.vue
index 7a2169d2b3..5f932906af 100644
--- a/frontend/src/components/category/CategoryProperties.vue
+++ b/frontend/src/components/category/CategoryProperties.vue
@@ -16,8 +16,14 @@
 </template>
 
 <script>
+import ApiForm from '@/components/form/api/ApiForm.vue'
+import ApiSelect from '@/components/form/api/ApiSelect.vue'
+import ApiColorPicker from '@/components/form/api/ApiColorPicker.vue'
+import ApiTextField from '@/components/form/api/ApiTextField.vue'
+
 export default {
   name: 'CategoryProperties',
+  components: { ApiTextField, ApiColorPicker, ApiSelect, ApiForm },
   props: {
     category: { type: Object, required: true },
     disabled: { type: Boolean, default: false },

From a5b903849aca05488624cdb7fbbb10830122a1db Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Sat, 15 Jun 2024 16:31:37 +0200
Subject: [PATCH 101/273] CategoryProperties: document that the div selector is
 not unused

---
 frontend/src/components/category/CategoryProperties.vue | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/frontend/src/components/category/CategoryProperties.vue b/frontend/src/components/category/CategoryProperties.vue
index 5f932906af..c8bd3b36ff 100644
--- a/frontend/src/components/category/CategoryProperties.vue
+++ b/frontend/src/components/category/CategoryProperties.vue
@@ -40,6 +40,8 @@ export default {
 </script>
 
 <style scoped>
+/* makes the input fields smaller */
+/* eslint-disable-next-line vue-scoped-css/no-unused-selector */
 div {
   max-width: 600px;
 }

From 966d01ba962776575359a7b824eca32240ee8cb1 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Sat, 15 Jun 2024 16:43:39 +0200
Subject: [PATCH 102/273] ContentNodeCard.vue: import ApiTextField

---
 .../src/components/activity/content/layout/ContentNodeCard.vue  | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/frontend/src/components/activity/content/layout/ContentNodeCard.vue b/frontend/src/components/activity/content/layout/ContentNodeCard.vue
index 96dfbbc67f..69e211bb37 100644
--- a/frontend/src/components/activity/content/layout/ContentNodeCard.vue
+++ b/frontend/src/components/activity/content/layout/ContentNodeCard.vue
@@ -89,10 +89,12 @@ import camelCase from 'lodash/camelCase'
 import DialogEntityDelete from '@/components/dialog/DialogEntityDelete.vue'
 import IconWithTooltip from '@/components/generic/IconWithTooltip.vue'
 import ApiForm from '@/components/form/api/ApiForm.vue'
+import ApiTextField from '@/components/form/api/ApiTextField.vue'
 
 export default {
   name: 'ContentNodeCard',
   components: {
+    ApiTextField,
     ApiForm,
     IconWithTooltip,
     DialogEntityDelete,

From bbfed92b7d78e835a08d3d5c84b1d3349655e35b Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Sat, 15 Jun 2024 16:18:05 +0200
Subject: [PATCH 103/273] ActivityRow: remove unused css class mt-2px

fix: 200:1  warning  The selector `.mt-2px` is unused  vue-scoped-css/no-unused-selector
---
 frontend/src/components/dashboard/ActivityRow.vue | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/frontend/src/components/dashboard/ActivityRow.vue b/frontend/src/components/dashboard/ActivityRow.vue
index 9ce35ae06e..c62093df91 100644
--- a/frontend/src/components/dashboard/ActivityRow.vue
+++ b/frontend/src/components/dashboard/ActivityRow.vue
@@ -197,10 +197,6 @@ tr + tr :is(td, th) {
   font-size: 0.75em;
 }
 
-.mt-2px {
-  margin-top: 2px;
-}
-
 .my-6px {
   margin-top: 6px;
   margin-bottom: 6px;

From 8e9764abb0a612ad0f2e50ce2a843bc48c9e9350 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Sun, 9 Jun 2024 17:36:59 +0200
Subject: [PATCH 104/273] App.vue: disable vue-scoped-css/enforce-style-type
 for style tag

---
 frontend/src/App.vue | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index 55b1f2bc5a..a4d1bf070f 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -56,6 +56,8 @@ export default {
   },
 }
 </script>
+<!-- these styles must be global -->
+<!-- eslint-disable-next-line vue-scoped-css/enforce-style-type -->
 <style lang="scss">
 @import 'src/scss/global';
 @import '~@mdi/font/css/materialdesignicons.css';

From c8deb1cd1fcc1699d65a8c89c87d995460592d2e Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Sun, 9 Jun 2024 17:44:54 +0200
Subject: [PATCH 105/273] App.vue: disable vue-scoped-css/no-unused-selector
 for .v-footer

---
 frontend/src/App.vue | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/frontend/src/App.vue b/frontend/src/App.vue
index a4d1bf070f..921c112484 100644
--- a/frontend/src/App.vue
+++ b/frontend/src/App.vue
@@ -138,6 +138,8 @@ export default {
 </style>
 
 <style scoped>
+/* <v-footer> is transformed to <footer class="v-footer"> */
+/* eslint-disable-next-line vue-scoped-css/no-unused-selector */
 .v-footer {
   border-top: 3px solid #c80d0d;
   z-index: 4;

From ef661cc24394a4cc22e8d341bdef3f88ba4a7413 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Sun, 9 Jun 2024 17:55:29 +0200
Subject: [PATCH 106/273] DaySwitcher.vue: suppress
 vue-scoped-css/enforce-style-type

And also suppress the JetBrains IDE CssUnusedSymbol for classes on
inner elements.
---
 frontend/src/components/activity/DaySwitcher.vue | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/frontend/src/components/activity/DaySwitcher.vue b/frontend/src/components/activity/DaySwitcher.vue
index 229293e051..e66d802f1e 100644
--- a/frontend/src/components/activity/DaySwitcher.vue
+++ b/frontend/src/components/activity/DaySwitcher.vue
@@ -115,15 +115,21 @@ export default {
 }
 </script>
 
+<!-- these styles should apply to inner elements -->
+<!-- eslint-disable-next-line vue-scoped-css/enforce-style-type -->
 <style>
 .basis-num {
   flex-basis: 2.5ch;
 }
 
+/* .e-day-switcher__menu is in the <e-select> tag */
+/*noinspection CssUnusedSymbol*/
 .e-day-switcher__menu {
   transform: translateX(-12px);
 }
 
+/* ..v-input__append-inner is in an inner tag */
+/*noinspection CssUnusedSymbol*/
 .e-day-switcher__select .v-input__append-inner {
   align-self: center;
   margin-top: 0;

From 8fa7eed4033ee04b66f1e583c02fffd13fa0f051 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 21 Aug 2024 19:57:24 +0000
Subject: [PATCH 107/273] chore(deps): update dependency phpstan/phpstan to
 v1.11.11

---
 api/composer.json |  2 +-
 api/composer.lock | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 83fe388c47..1fd9dbc712 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -56,7 +56,7 @@
         "justinrainbow/json-schema": "6.0.0",
         "php-coveralls/php-coveralls": "2.7.0",
         "phpspec/prophecy-phpunit": "2.2",
-        "phpstan/phpstan": "1.11.10",
+        "phpstan/phpstan": "1.11.11",
         "phpunit/phpunit": "10.5.29",
         "rector/rector": "1.2.3",
         "spatie/phpunit-snapshot-assertions": "5.1.6",
diff --git a/api/composer.lock b/api/composer.lock
index 227309d9b3..e2b222777f 100644
--- a/api/composer.lock
+++ b/api/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": "d7004981c95a3ce11f482651b011b5d4",
+    "content-hash": "b03af05515f7f1849111ed7b5a7184e1",
     "packages": [
         {
             "name": "api-platform/core",
@@ -12075,16 +12075,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.10",
+            "version": "1.11.11",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "640410b32995914bde3eed26fa89552f9c2c082f"
+                "reference": "707c2aed5d8d0075666e673a5e71440c1d01a5a3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/640410b32995914bde3eed26fa89552f9c2c082f",
-                "reference": "640410b32995914bde3eed26fa89552f9c2c082f",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/707c2aed5d8d0075666e673a5e71440c1d01a5a3",
+                "reference": "707c2aed5d8d0075666e673a5e71440c1d01a5a3",
                 "shasum": ""
             },
             "require": {
@@ -12129,7 +12129,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-08T09:02:50+00:00"
+            "time": "2024-08-19T14:37:29+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",

From d2ff4be35589e7ebaf800eb3af9980ce12d9cbab Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Sat, 15 Jun 2024 16:31:37 +0200
Subject: [PATCH 108/273] CategoryProperties: document that the div selector is
 not unused

---
 frontend/src/components/category/CategoryProperties.vue | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/frontend/src/components/category/CategoryProperties.vue b/frontend/src/components/category/CategoryProperties.vue
index 7a2169d2b3..5b3f7cf173 100644
--- a/frontend/src/components/category/CategoryProperties.vue
+++ b/frontend/src/components/category/CategoryProperties.vue
@@ -34,6 +34,8 @@ export default {
 </script>
 
 <style scoped>
+/* makes the input fields smaller */
+/* eslint-disable-next-line vue-scoped-css/no-unused-selector */
 div {
   max-width: 600px;
 }

From 5dcef9d6e3d2bdf70a428b88680a11ecc7a5c965 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Sat, 15 Jun 2024 17:34:01 +0200
Subject: [PATCH 109/273] Activate.vue: fix vue-scoped-css/enforce-style-type

---
 frontend/src/views/auth/Activate.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/frontend/src/views/auth/Activate.vue b/frontend/src/views/auth/Activate.vue
index 90a6964f12..708f30e318 100644
--- a/frontend/src/views/auth/Activate.vue
+++ b/frontend/src/views/auth/Activate.vue
@@ -73,4 +73,4 @@ export default {
 }
 </script>
 
-<style></style>
+<style scoped></style>

From 47d3a3d6cf410cd9505c0e7e5314ae8380a59ced Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Sat, 15 Jun 2024 17:34:13 +0200
Subject: [PATCH 110/273] RegisterDone.vue: fix
 vue-scoped-css/enforce-style-type

---
 frontend/src/views/auth/RegisterDone.vue | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/frontend/src/views/auth/RegisterDone.vue b/frontend/src/views/auth/RegisterDone.vue
index bfdfcf822e..21182d0534 100644
--- a/frontend/src/views/auth/RegisterDone.vue
+++ b/frontend/src/views/auth/RegisterDone.vue
@@ -25,4 +25,4 @@ export default {
 }
 </script>
 
-<style></style>
+<style scoped></style>

From fe806da19afc0f9ed596e6940c34e65249beb6f4 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Sat, 15 Jun 2024 17:47:55 +0200
Subject: [PATCH 111/273] ApiWrapper.vue: suppress
 vue-scoped-css/enforce-style-type

---
 frontend/src/components/form/api/ApiWrapper.vue | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/frontend/src/components/form/api/ApiWrapper.vue b/frontend/src/components/form/api/ApiWrapper.vue
index 769716bf15..beb55f95f5 100644
--- a/frontend/src/components/form/api/ApiWrapper.vue
+++ b/frontend/src/components/form/api/ApiWrapper.vue
@@ -280,6 +280,8 @@ export default {
 }
 </style>
 
+<!-- This does not work with scoped css -->
+<!-- eslint-disable-next-line vue-scoped-css/enforce-style-type -->
 <style lang="scss">
 .api-wrapper--inline .v-text-field {
   border-top-right-radius: 0;

From e8d2b2448f5a1521beba24cb8cc49318ae3edca8 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 21 Aug 2024 20:04:56 +0000
Subject: [PATCH 112/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.35

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 770b94f0af..9cd9f0c463 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.34
+    image: amazon/aws-cli:2.17.35
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From c54fff68207eb336306ee69c3931c5183180505a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 22 Aug 2024 01:54:14 +0000
Subject: [PATCH 113/273] fix(deps): update dependency @pulumi/aws to v6.50.0

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index 26161d1f31..c29cc35c92 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -6,7 +6,7 @@
         "": {
             "name": "ecamp-core",
             "dependencies": {
-                "@pulumi/aws": "6.49.1",
+                "@pulumi/aws": "6.50.0",
                 "@pulumi/awsx": "2.14.0",
                 "@pulumi/pulumi": "3.129.0"
             },
@@ -2069,9 +2069,9 @@
             "license": "BSD-3-Clause"
         },
         "node_modules/@pulumi/aws": {
-            "version": "6.49.1",
-            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.49.1.tgz",
-            "integrity": "sha512-4FPJNmZsVCcCVtsusGMTozR5PqzW0h3O4jJGJ6t2jGDJDtqAkEUMLMRlnNXX1QsoKbK4gtG5YwmG/24F3TjJuA==",
+            "version": "6.50.0",
+            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.50.0.tgz",
+            "integrity": "sha512-v+Dit+WCN6qXviByTvCSbnD+CNkSeti8vYVdqRkOKt82oxs3XhIoIZPs/AdILxR7226mf/0FK3rnBeBt28eITg==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@pulumi/pulumi": "^3.0.0",
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index ee7bda21d2..9d0d44188f 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -11,7 +11,7 @@
     },
     "dependencies": {
         "@pulumi/pulumi": "3.129.0",
-        "@pulumi/aws": "6.49.1",
+        "@pulumi/aws": "6.50.0",
         "@pulumi/awsx": "2.14.0"
     },
     "devDependencies": {

From 255ef43d5306dfdcc703e44e02dfe46de9a7a7e7 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 22 Aug 2024 16:38:15 +0000
Subject: [PATCH 114/273] chore(deps): update dependency nuxt to v3.13.0

---
 print/package-lock.json | 457 ++++++++++++++++++++--------------------
 print/package.json      |   2 +-
 2 files changed, 230 insertions(+), 229 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index 023a8ae7ae..3b2e255240 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -44,7 +44,7 @@
         "eslint-plugin-vue": "9.27.0",
         "eslint-plugin-vue-scoped-css": "2.8.1",
         "globals": "15.9.0",
-        "nuxt": "3.12.4",
+        "nuxt": "3.13.0",
         "prettier": "3.3.3",
         "sass": "1.69.4",
         "vite-svg-loader": "5.1.0",
@@ -754,9 +754,9 @@
       }
     },
     "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz",
-      "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz",
+      "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==",
       "cpu": [
         "ppc64"
       ],
@@ -771,9 +771,9 @@
       }
     },
     "node_modules/@esbuild/android-arm": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz",
-      "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz",
+      "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==",
       "cpu": [
         "arm"
       ],
@@ -788,9 +788,9 @@
       }
     },
     "node_modules/@esbuild/android-arm64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz",
-      "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz",
+      "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==",
       "cpu": [
         "arm64"
       ],
@@ -805,9 +805,9 @@
       }
     },
     "node_modules/@esbuild/android-x64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz",
-      "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz",
+      "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==",
       "cpu": [
         "x64"
       ],
@@ -822,9 +822,9 @@
       }
     },
     "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz",
-      "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz",
+      "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==",
       "cpu": [
         "arm64"
       ],
@@ -839,9 +839,9 @@
       }
     },
     "node_modules/@esbuild/darwin-x64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz",
-      "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz",
+      "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==",
       "cpu": [
         "x64"
       ],
@@ -856,9 +856,9 @@
       }
     },
     "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz",
-      "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz",
+      "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==",
       "cpu": [
         "arm64"
       ],
@@ -873,9 +873,9 @@
       }
     },
     "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz",
-      "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz",
+      "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==",
       "cpu": [
         "x64"
       ],
@@ -890,9 +890,9 @@
       }
     },
     "node_modules/@esbuild/linux-arm": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz",
-      "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz",
+      "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==",
       "cpu": [
         "arm"
       ],
@@ -907,9 +907,9 @@
       }
     },
     "node_modules/@esbuild/linux-arm64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz",
-      "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz",
+      "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==",
       "cpu": [
         "arm64"
       ],
@@ -924,9 +924,9 @@
       }
     },
     "node_modules/@esbuild/linux-ia32": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz",
-      "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz",
+      "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==",
       "cpu": [
         "ia32"
       ],
@@ -941,9 +941,9 @@
       }
     },
     "node_modules/@esbuild/linux-loong64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz",
-      "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz",
+      "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==",
       "cpu": [
         "loong64"
       ],
@@ -958,9 +958,9 @@
       }
     },
     "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz",
-      "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz",
+      "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==",
       "cpu": [
         "mips64el"
       ],
@@ -975,9 +975,9 @@
       }
     },
     "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz",
-      "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz",
+      "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==",
       "cpu": [
         "ppc64"
       ],
@@ -992,9 +992,9 @@
       }
     },
     "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz",
-      "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz",
+      "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==",
       "cpu": [
         "riscv64"
       ],
@@ -1009,9 +1009,9 @@
       }
     },
     "node_modules/@esbuild/linux-s390x": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz",
-      "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz",
+      "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==",
       "cpu": [
         "s390x"
       ],
@@ -1026,9 +1026,9 @@
       }
     },
     "node_modules/@esbuild/linux-x64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz",
-      "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz",
+      "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==",
       "cpu": [
         "x64"
       ],
@@ -1043,9 +1043,9 @@
       }
     },
     "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz",
-      "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz",
+      "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==",
       "cpu": [
         "x64"
       ],
@@ -1060,9 +1060,9 @@
       }
     },
     "node_modules/@esbuild/openbsd-arm64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz",
-      "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz",
+      "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==",
       "cpu": [
         "arm64"
       ],
@@ -1077,9 +1077,9 @@
       }
     },
     "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz",
-      "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz",
+      "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==",
       "cpu": [
         "x64"
       ],
@@ -1094,9 +1094,9 @@
       }
     },
     "node_modules/@esbuild/sunos-x64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz",
-      "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz",
+      "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==",
       "cpu": [
         "x64"
       ],
@@ -1111,9 +1111,9 @@
       }
     },
     "node_modules/@esbuild/win32-arm64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz",
-      "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz",
+      "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==",
       "cpu": [
         "arm64"
       ],
@@ -1128,9 +1128,9 @@
       }
     },
     "node_modules/@esbuild/win32-ia32": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz",
-      "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz",
+      "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==",
       "cpu": [
         "ia32"
       ],
@@ -1145,9 +1145,9 @@
       }
     },
     "node_modules/@esbuild/win32-x64": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz",
-      "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz",
+      "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==",
       "cpu": [
         "x64"
       ],
@@ -1922,49 +1922,49 @@
       "license": "MIT"
     },
     "node_modules/@nuxt/devtools": {
-      "version": "1.3.9",
-      "resolved": "https://registry.npmjs.org/@nuxt/devtools/-/devtools-1.3.9.tgz",
-      "integrity": "sha512-tFKlbUPgSXw4tyD8xpztQtJeVn3egdKbFCV0xc92FbfGbclAyaa3XhKA2tMWXEGZQpykAWMRNrGWN24FtXFA6Q==",
+      "version": "1.3.14",
+      "resolved": "https://registry.npmjs.org/@nuxt/devtools/-/devtools-1.3.14.tgz",
+      "integrity": "sha512-ebeVWBisXbhJ7begAZTgSDF8cPbExHv4RPDb9fWTMI1YoVVxX+elqUPw0K6T5Yi4atdGhyxRtGMqjikl7QKp9w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@antfu/utils": "^0.7.10",
-        "@nuxt/devtools-kit": "1.3.9",
-        "@nuxt/devtools-wizard": "1.3.9",
-        "@nuxt/kit": "^3.12.2",
+        "@nuxt/devtools-kit": "1.3.14",
+        "@nuxt/devtools-wizard": "1.3.14",
+        "@nuxt/kit": "^3.12.4",
         "@vue/devtools-core": "7.3.3",
         "@vue/devtools-kit": "7.3.3",
         "birpc": "^0.2.17",
         "consola": "^3.2.3",
         "cronstrue": "^2.50.0",
         "destr": "^2.0.3",
-        "error-stack-parser-es": "^0.1.4",
+        "error-stack-parser-es": "^0.1.5",
         "execa": "^7.2.0",
         "fast-glob": "^3.3.2",
-        "fast-npm-meta": "^0.1.1",
+        "fast-npm-meta": "^0.2.2",
         "flatted": "^3.3.1",
         "get-port-please": "^3.1.2",
         "hookable": "^5.5.3",
-        "image-meta": "^0.2.0",
+        "image-meta": "^0.2.1",
         "is-installed-globally": "^1.0.0",
-        "launch-editor": "^2.8.0",
+        "launch-editor": "^2.8.1",
         "local-pkg": "^0.5.0",
         "magicast": "^0.3.4",
         "nypm": "^0.3.9",
         "ohash": "^1.1.3",
         "pathe": "^1.1.2",
         "perfect-debounce": "^1.0.0",
-        "pkg-types": "^1.1.2",
+        "pkg-types": "^1.1.3",
         "rc9": "^2.1.2",
         "scule": "^1.3.0",
-        "semver": "^7.6.2",
+        "semver": "^7.6.3",
         "simple-git": "^3.25.0",
         "sirv": "^2.0.4",
-        "unimport": "^3.7.2",
-        "vite-plugin-inspect": "^0.8.4",
-        "vite-plugin-vue-inspector": "^5.1.2",
+        "unimport": "^3.10.1",
+        "vite-plugin-inspect": "^0.8.6",
+        "vite-plugin-vue-inspector": "^5.1.3",
         "which": "^3.0.1",
-        "ws": "^8.17.1"
+        "ws": "^8.18.0"
       },
       "bin": {
         "devtools": "cli.mjs"
@@ -1974,14 +1974,14 @@
       }
     },
     "node_modules/@nuxt/devtools-kit": {
-      "version": "1.3.9",
-      "resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.3.9.tgz",
-      "integrity": "sha512-tgr/F+4BbI53/JxgaXl3cuV9dMuCXMsd4GEXN+JqtCdAkDbH3wL79GGWx0/6I9acGzRsB6UZ1H6U96nfgcIrAw==",
+      "version": "1.3.14",
+      "resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.3.14.tgz",
+      "integrity": "sha512-mLPuCf5nFYLm/1JD0twt8qfFGwoVhTRA4Zx9CPiyWCQNf7XJXb3TfhCm89vHpcPP+9T6ulZxRJp+JZETjXY8+A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nuxt/kit": "^3.12.2",
-        "@nuxt/schema": "^3.12.3",
+        "@nuxt/kit": "^3.12.4",
+        "@nuxt/schema": "^3.12.4",
         "execa": "^7.2.0"
       },
       "peerDependencies": {
@@ -1989,9 +1989,9 @@
       }
     },
     "node_modules/@nuxt/devtools-wizard": {
-      "version": "1.3.9",
-      "resolved": "https://registry.npmjs.org/@nuxt/devtools-wizard/-/devtools-wizard-1.3.9.tgz",
-      "integrity": "sha512-WMgwWWuyng+Y6k7sfBI95wYnec8TPFkuYbHHOlYQgqE9dAewPisSbEm3WkB7p/W9UqxpN8mvKN5qUg4sTmEpgQ==",
+      "version": "1.3.14",
+      "resolved": "https://registry.npmjs.org/@nuxt/devtools-wizard/-/devtools-wizard-1.3.14.tgz",
+      "integrity": "sha512-5kLB53/7YUME6Y8byrOxRhl0hXWm05jPStJd1CJHKDcGrp+hjxYZaSgEwYtEIQ0A1GF04rfL4bJ+qIL+7e0+9Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2001,10 +2001,10 @@
         "global-directory": "^4.0.1",
         "magicast": "^0.3.4",
         "pathe": "^1.1.2",
-        "pkg-types": "^1.1.2",
+        "pkg-types": "^1.1.3",
         "prompts": "^2.4.2",
         "rc9": "^2.1.2",
-        "semver": "^7.6.2"
+        "semver": "^7.6.3"
       },
       "bin": {
         "devtools-wizard": "cli.mjs"
@@ -2071,20 +2071,20 @@
       }
     },
     "node_modules/@nuxt/kit": {
-      "version": "3.12.4",
-      "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.12.4.tgz",
-      "integrity": "sha512-aNRD1ylzijY0oYolldNcZJXVyxdGzNTl+Xd0UYyFQCu9f4wqUZqQ9l+b7arCEzchr96pMK0xdpvLcS3xo1wDcw==",
+      "version": "3.13.0",
+      "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.0.tgz",
+      "integrity": "sha512-gbhSbDvYfkGQ0R2ztqTLQLHRMv+7g50kAKKuN6mbF4tL9jg7NPnQ8bAarn2I4Qx8xtmwO+qY1ABkmYMn5S1CpA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nuxt/schema": "3.12.4",
+        "@nuxt/schema": "3.13.0",
         "c12": "^1.11.1",
         "consola": "^3.2.3",
         "defu": "^6.1.4",
         "destr": "^2.0.3",
         "globby": "^14.0.2",
         "hash-sum": "^2.0.0",
-        "ignore": "^5.3.1",
+        "ignore": "^5.3.2",
         "jiti": "^1.21.6",
         "klona": "^2.0.6",
         "knitwork": "^1.1.0",
@@ -2095,7 +2095,7 @@
         "semver": "^7.6.3",
         "ufo": "^1.5.4",
         "unctx": "^2.3.1",
-        "unimport": "^3.9.0",
+        "unimport": "^3.11.0",
         "untyped": "^1.4.2"
       },
       "engines": {
@@ -2103,9 +2103,9 @@
       }
     },
     "node_modules/@nuxt/schema": {
-      "version": "3.12.4",
-      "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.12.4.tgz",
-      "integrity": "sha512-H7FwBV4ChssMaeiLyPdVLOLUa0326ebp3pNbJfGgFt7rSoKh1MmgjorecA8JMxOQZziy3w6EELf4+5cgLh/F1w==",
+      "version": "3.13.0",
+      "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.0.tgz",
+      "integrity": "sha512-JBGSjF9Hd8guvTV2312eM1RulCMJc50yR3CeMZPLDsI02A8TXQnABS8EbgvGRvxD43q/ITjj21B2ffG1wEVrnQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2119,7 +2119,7 @@
         "std-env": "^3.7.0",
         "ufo": "^1.5.4",
         "uncrypto": "^0.1.3",
-        "unimport": "^3.9.0",
+        "unimport": "^3.11.0",
         "untyped": "^1.4.2"
       },
       "engines": {
@@ -2156,43 +2156,43 @@
       }
     },
     "node_modules/@nuxt/vite-builder": {
-      "version": "3.12.4",
-      "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.12.4.tgz",
-      "integrity": "sha512-5v3y6SkshJurZYJWHtc7+NGeCgptsreCSguBCZVzJxYdsPFdMicLoxjTt8IGAHWjkGVONrX+K8NBSFFgnx40jQ==",
+      "version": "3.13.0",
+      "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.13.0.tgz",
+      "integrity": "sha512-FVIpT5wTxGcU3JDFxIyvT6isSZUujVKavQyPo3kgOQKWURDcBcvVY4HdJIVMsSIcaXafH13RZc5RKLlxfIGFdQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nuxt/kit": "3.12.4",
+        "@nuxt/kit": "3.13.0",
         "@rollup/plugin-replace": "^5.0.7",
-        "@vitejs/plugin-vue": "^5.0.5",
-        "@vitejs/plugin-vue-jsx": "^4.0.0",
-        "autoprefixer": "^10.4.19",
+        "@vitejs/plugin-vue": "^5.1.2",
+        "@vitejs/plugin-vue-jsx": "^4.0.1",
+        "autoprefixer": "^10.4.20",
         "clear": "^0.1.0",
         "consola": "^3.2.3",
-        "cssnano": "^7.0.4",
+        "cssnano": "^7.0.5",
         "defu": "^6.1.4",
-        "esbuild": "^0.23.0",
+        "esbuild": "^0.23.1",
         "escape-string-regexp": "^5.0.0",
         "estree-walker": "^3.0.3",
         "externality": "^1.0.2",
         "get-port-please": "^3.1.2",
         "h3": "^1.12.0",
         "knitwork": "^1.1.0",
-        "magic-string": "^0.30.10",
+        "magic-string": "^0.30.11",
         "mlly": "^1.7.1",
         "ohash": "^1.1.3",
         "pathe": "^1.1.2",
         "perfect-debounce": "^1.0.0",
         "pkg-types": "^1.1.3",
-        "postcss": "^8.4.39",
+        "postcss": "^8.4.41",
         "rollup-plugin-visualizer": "^5.12.0",
         "std-env": "^3.7.0",
         "strip-literal": "^2.1.0",
         "ufo": "^1.5.4",
         "unenv": "^1.10.0",
-        "unplugin": "^1.11.0",
-        "vite": "^5.3.4",
-        "vite-node": "^2.0.3",
+        "unplugin": "^1.12.2",
+        "vite": "^5.4.2",
+        "vite-node": "^2.0.5",
         "vite-plugin-checker": "^0.7.2",
         "vue-bundle-renderer": "^2.1.0"
       },
@@ -4695,23 +4695,23 @@
       "license": "ISC"
     },
     "node_modules/@unhead/dom": {
-      "version": "1.9.16",
-      "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.9.16.tgz",
-      "integrity": "sha512-aZIAnnc89Csi1vV4mtlHYI765B7m1yuaXUuQiYHwr6glE9FLyy2X87CzEci4yPH/YbkKm0bGQRfcxXq6Eq0W7g==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.10.0.tgz",
+      "integrity": "sha512-LdgtOlyMHOyuQNsUKM+1d8ViiiY4LxjCPJlgUU/5CwgqeRYf4LWFu8oRMQfSQVTusbPwwvr3MolM9iTUu2I4BQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@unhead/schema": "1.9.16",
-        "@unhead/shared": "1.9.16"
+        "@unhead/schema": "1.10.0",
+        "@unhead/shared": "1.10.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
       }
     },
     "node_modules/@unhead/schema": {
-      "version": "1.9.16",
-      "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.9.16.tgz",
-      "integrity": "sha512-V2BshX+I6D2wN4ys5so8RQDUgsggsxW9FVBiuQi4h8oPWtHclogxzDiHa5BH2TgvNIoUxLnLYNAShMGipmVuUw==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.10.0.tgz",
+      "integrity": "sha512-hmgkFdLzm/VPLAXBF89Iry4Wz/6FpHMfMKCnAdihAt1Ublsi04RrA0hQuAiuGG2CZiKL4VCxtmV++UXj/kyakA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4723,43 +4723,43 @@
       }
     },
     "node_modules/@unhead/shared": {
-      "version": "1.9.16",
-      "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.9.16.tgz",
-      "integrity": "sha512-pfJnArULCY+GBr7OtYyyxihRiQLkT31TpyK6nUKIwyax4oNOGyhNfk0RFzNq16BwLg60d1lrc5bd5mZGbfClMA==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.10.0.tgz",
+      "integrity": "sha512-Lv7pP0AoWJy+YaiWd4kGD+TK78ahPUwnIRx6YCC6FjPmE0KCqooeDS4HbInYaklLlEMQZislXyIwLczK2DTWiw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@unhead/schema": "1.9.16"
+        "@unhead/schema": "1.10.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
       }
     },
     "node_modules/@unhead/ssr": {
-      "version": "1.9.16",
-      "resolved": "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.9.16.tgz",
-      "integrity": "sha512-8R1qt4VAemX4Iun/l7DnUBJqmxA/KaUSc2+/hRYPJYOopXdCWkoaxC1K1ROX2vbRF7qmjdU5ik/a27kSPN94gg==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.10.0.tgz",
+      "integrity": "sha512-L2XqGUQ05+a/zBAJk4mseLpsDoHMsuEsZNWp5f7E/Kx8P1oBAAs6J/963nvVFdec41HuClNHtJZ5swz77dmb1Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@unhead/schema": "1.9.16",
-        "@unhead/shared": "1.9.16"
+        "@unhead/schema": "1.10.0",
+        "@unhead/shared": "1.10.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
       }
     },
     "node_modules/@unhead/vue": {
-      "version": "1.9.16",
-      "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.9.16.tgz",
-      "integrity": "sha512-kpMWWwm8cOwo4gw4An43pz30l2CqNtmJpX5Xsu79rwf6Viq8jHAjk6BGqyKy220M2bpa0Va4fnR532SgGO1YgQ==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.10.0.tgz",
+      "integrity": "sha512-Cv9BViaOwCBdXy3bsTvJ10Rs808FSSq/ZfeBXzOjOxt08sbubf6Mr5opBdOlv/i1bzyFVIAqe5ABmrhC9mB80w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@unhead/schema": "1.9.16",
-        "@unhead/shared": "1.9.16",
+        "@unhead/schema": "1.10.0",
+        "@unhead/shared": "1.10.0",
         "hookable": "^5.5.3",
-        "unhead": "1.9.16"
+        "unhead": "1.10.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
@@ -4887,14 +4887,14 @@
       }
     },
     "node_modules/@vitejs/plugin-vue-jsx": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.0.0.tgz",
-      "integrity": "sha512-A+6wL2AdQhDsLsDnY+2v4rRDI1HLJGIMc97a8FURO9tqKsH5QvjWrzsa5DH3NlZsM742W2wODl2fF+bfcTWtXw==",
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-4.0.1.tgz",
+      "integrity": "sha512-7mg9HFGnFHMEwCdB6AY83cVK4A6sCqnrjFYF4WIlebYAQVVJ/sC/CiTruVdrRlhrFoeZ8rlMxY9wYpPTIRhhAg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/core": "^7.24.6",
-        "@babel/plugin-transform-typescript": "^7.24.6",
+        "@babel/core": "^7.24.7",
+        "@babel/plugin-transform-typescript": "^7.24.7",
         "@vue/babel-plugin-jsx": "^1.2.2"
       },
       "engines": {
@@ -7809,9 +7809,9 @@
       "license": "MIT"
     },
     "node_modules/esbuild": {
-      "version": "0.23.0",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz",
-      "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==",
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz",
+      "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==",
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
@@ -7822,30 +7822,30 @@
         "node": ">=18"
       },
       "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.23.0",
-        "@esbuild/android-arm": "0.23.0",
-        "@esbuild/android-arm64": "0.23.0",
-        "@esbuild/android-x64": "0.23.0",
-        "@esbuild/darwin-arm64": "0.23.0",
-        "@esbuild/darwin-x64": "0.23.0",
-        "@esbuild/freebsd-arm64": "0.23.0",
-        "@esbuild/freebsd-x64": "0.23.0",
-        "@esbuild/linux-arm": "0.23.0",
-        "@esbuild/linux-arm64": "0.23.0",
-        "@esbuild/linux-ia32": "0.23.0",
-        "@esbuild/linux-loong64": "0.23.0",
-        "@esbuild/linux-mips64el": "0.23.0",
-        "@esbuild/linux-ppc64": "0.23.0",
-        "@esbuild/linux-riscv64": "0.23.0",
-        "@esbuild/linux-s390x": "0.23.0",
-        "@esbuild/linux-x64": "0.23.0",
-        "@esbuild/netbsd-x64": "0.23.0",
-        "@esbuild/openbsd-arm64": "0.23.0",
-        "@esbuild/openbsd-x64": "0.23.0",
-        "@esbuild/sunos-x64": "0.23.0",
-        "@esbuild/win32-arm64": "0.23.0",
-        "@esbuild/win32-ia32": "0.23.0",
-        "@esbuild/win32-x64": "0.23.0"
+        "@esbuild/aix-ppc64": "0.23.1",
+        "@esbuild/android-arm": "0.23.1",
+        "@esbuild/android-arm64": "0.23.1",
+        "@esbuild/android-x64": "0.23.1",
+        "@esbuild/darwin-arm64": "0.23.1",
+        "@esbuild/darwin-x64": "0.23.1",
+        "@esbuild/freebsd-arm64": "0.23.1",
+        "@esbuild/freebsd-x64": "0.23.1",
+        "@esbuild/linux-arm": "0.23.1",
+        "@esbuild/linux-arm64": "0.23.1",
+        "@esbuild/linux-ia32": "0.23.1",
+        "@esbuild/linux-loong64": "0.23.1",
+        "@esbuild/linux-mips64el": "0.23.1",
+        "@esbuild/linux-ppc64": "0.23.1",
+        "@esbuild/linux-riscv64": "0.23.1",
+        "@esbuild/linux-s390x": "0.23.1",
+        "@esbuild/linux-x64": "0.23.1",
+        "@esbuild/netbsd-x64": "0.23.1",
+        "@esbuild/openbsd-arm64": "0.23.1",
+        "@esbuild/openbsd-x64": "0.23.1",
+        "@esbuild/sunos-x64": "0.23.1",
+        "@esbuild/win32-arm64": "0.23.1",
+        "@esbuild/win32-ia32": "0.23.1",
+        "@esbuild/win32-x64": "0.23.1"
       }
     },
     "node_modules/escalade": {
@@ -8751,9 +8751,9 @@
       "license": "MIT"
     },
     "node_modules/fast-npm-meta": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/fast-npm-meta/-/fast-npm-meta-0.1.1.tgz",
-      "integrity": "sha512-uS9DjGncI/9XZ6HJFrci0WzSi++N8Jskbb2uB7+9SQlrgA3VaLhXhV9Gl5HwIGESHkayYYZFGnVNhJwRDKCWIA==",
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/fast-npm-meta/-/fast-npm-meta-0.2.2.tgz",
+      "integrity": "sha512-E+fdxeaOQGo/CMWc9f4uHFfgUPJRAu7N3uB8GBvB3SDPAIWJK4GKyYhkAGFq+GYrcbKNfQIz5VVQyJnDuPPCrg==",
       "dev": true,
       "license": "MIT",
       "funding": {
@@ -12089,43 +12089,43 @@
       }
     },
     "node_modules/nuxt": {
-      "version": "3.12.4",
-      "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-3.12.4.tgz",
-      "integrity": "sha512-/ddvyc2kgYYIN2UEjP8QIz48O/W3L0lZm7wChIDbOCj0vF/yLLeZHBaTb3aNvS9Hwp269nfjrm8j/mVxQK4RhA==",
+      "version": "3.13.0",
+      "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-3.13.0.tgz",
+      "integrity": "sha512-NZlPGlMav18KXWiOmTguQtH5lcrwooPniWXM3Ca4c9spsMRu3wyWLlN8wiI/cK+lEu3rQyKCGSA75nFVK4Ew3w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@nuxt/devalue": "^2.0.2",
-        "@nuxt/devtools": "^1.3.9",
-        "@nuxt/kit": "3.12.4",
-        "@nuxt/schema": "3.12.4",
+        "@nuxt/devtools": "^1.3.14",
+        "@nuxt/kit": "3.13.0",
+        "@nuxt/schema": "3.13.0",
         "@nuxt/telemetry": "^2.5.4",
-        "@nuxt/vite-builder": "3.12.4",
-        "@unhead/dom": "^1.9.16",
-        "@unhead/ssr": "^1.9.16",
-        "@unhead/vue": "^1.9.16",
-        "@vue/shared": "^3.4.32",
+        "@nuxt/vite-builder": "3.13.0",
+        "@unhead/dom": "^1.10.0",
+        "@unhead/ssr": "^1.10.0",
+        "@unhead/vue": "^1.10.0",
+        "@vue/shared": "^3.4.38",
         "acorn": "8.12.1",
         "c12": "^1.11.1",
         "chokidar": "^3.6.0",
         "compatx": "^0.1.8",
         "consola": "^3.2.3",
-        "cookie-es": "^1.1.0",
+        "cookie-es": "^1.2.2",
         "defu": "^6.1.4",
         "destr": "^2.0.3",
         "devalue": "^5.0.0",
         "errx": "^0.1.0",
-        "esbuild": "^0.23.0",
+        "esbuild": "^0.23.1",
         "escape-string-regexp": "^5.0.0",
         "estree-walker": "^3.0.3",
         "globby": "^14.0.2",
         "h3": "^1.12.0",
         "hookable": "^5.5.3",
-        "ignore": "^5.3.1",
+        "ignore": "^5.3.2",
         "jiti": "^1.21.6",
         "klona": "^2.0.6",
         "knitwork": "^1.1.0",
-        "magic-string": "^0.30.10",
+        "magic-string": "^0.30.11",
         "mlly": "^1.7.1",
         "nitropack": "^2.9.7",
         "nuxi": "^3.12.0",
@@ -12145,15 +12145,15 @@
         "uncrypto": "^0.1.3",
         "unctx": "^2.3.1",
         "unenv": "^1.10.0",
-        "unimport": "^3.9.0",
-        "unplugin": "^1.11.0",
-        "unplugin-vue-router": "^0.10.0",
+        "unimport": "^3.11.0",
+        "unplugin": "^1.12.2",
+        "unplugin-vue-router": "^0.10.7",
         "unstorage": "^1.10.2",
         "untyped": "^1.4.2",
-        "vue": "^3.4.32",
+        "vue": "^3.4.38",
         "vue-bundle-renderer": "^2.1.0",
         "vue-devtools-stub": "^0.1.0",
-        "vue-router": "^4.4.0"
+        "vue-router": "^4.4.3"
       },
       "bin": {
         "nuxi": "bin/nuxt.mjs",
@@ -16495,15 +16495,15 @@
       }
     },
     "node_modules/unhead": {
-      "version": "1.9.16",
-      "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.9.16.tgz",
-      "integrity": "sha512-FOoXkuRNDwt7PUaNE0LXNCb6RCz4vTpkGymz4tJ8rcaG5uUJ0lxGK536hzCFwFw3Xkp3n+tkt2yCcbAZE/FOvA==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.10.0.tgz",
+      "integrity": "sha512-nv75Hvhu0asuD/rbP6b3tSRJUltxmThq/iZU5rLCGEkCqTkFk7ruQGNk+TRtx/RCYqL0R/IzIY9aqvhNOGe3mg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@unhead/dom": "1.9.16",
-        "@unhead/schema": "1.9.16",
-        "@unhead/shared": "1.9.16",
+        "@unhead/dom": "1.10.0",
+        "@unhead/schema": "1.10.0",
+        "@unhead/shared": "1.10.0",
         "hookable": "^5.5.3"
       },
       "funding": {
@@ -16524,9 +16524,9 @@
       }
     },
     "node_modules/unimport": {
-      "version": "3.10.0",
-      "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.10.0.tgz",
-      "integrity": "sha512-/UvKRfWx3mNDWwWQhR62HsoM3wxHwYdTq8ellZzMOHnnw4Dp8tovgthyW7DjTrbjDL+i4idOp06voz2VKlvrLw==",
+      "version": "3.11.0",
+      "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.11.0.tgz",
+      "integrity": "sha512-mPrvWwy+li8TLUeglC7CIREFAbeEMkJ8X2Bhxg4iLdh+HraxjFyxqWv8V+4lzekoGHChx9ofv1qGOfvHBJBl0A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -16542,7 +16542,7 @@
         "pkg-types": "^1.1.3",
         "scule": "^1.3.0",
         "strip-literal": "^2.1.0",
-        "unplugin": "^1.12.0"
+        "unplugin": "^1.12.2"
       }
     },
     "node_modules/unimport/node_modules/escape-string-regexp": {
@@ -16568,9 +16568,9 @@
       }
     },
     "node_modules/unplugin": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.1.tgz",
-      "integrity": "sha512-aXEH9c5qi3uYZHo0niUtxDlT9ylG/luMW/dZslSCkbtC31wCyFkmM0kyoBBh+Grhn7CL+/kvKLfN61/EdxPxMQ==",
+      "version": "1.12.2",
+      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.2.tgz",
+      "integrity": "sha512-bEqQxeC7rxtxPZ3M5V4Djcc4lQqKPgGe3mAWZvxcSmX5jhGxll19NliaRzQSQPrk4xJZSGniK3puLWpRuZN7VQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -16584,20 +16584,21 @@
       }
     },
     "node_modules/unplugin-vue-router": {
-      "version": "0.10.3",
-      "resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.10.3.tgz",
-      "integrity": "sha512-qyR3etefMT2U6gBz8li6vFhIdGMib1wCZ7iqwYNEk22qBvx7i/LmFTrNsDpNpPpwXlfM6xOITd6yfVo9pPQklw==",
+      "version": "0.10.7",
+      "resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.10.7.tgz",
+      "integrity": "sha512-5KEh7Swc1L2Xh5WOD7yQLeB5bO3iTw+Hst7qMxwmwYcPm9qVrtrRTZUftn2Hj4is17oMKgqacyWadjQzwW5B/Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/types": "^7.25.2",
         "@rollup/pluginutils": "^5.1.0",
         "@vue-macros/common": "^1.12.2",
-        "ast-walker-scope": "^0.6.1",
+        "ast-walker-scope": "^0.6.2",
         "chokidar": "^3.6.0",
         "fast-glob": "^3.3.2",
         "json5": "^2.2.3",
         "local-pkg": "^0.5.0",
+        "magic-string": "^0.30.11",
         "mlly": "^1.7.1",
         "pathe": "^1.1.2",
         "scule": "^1.3.0",
@@ -16855,15 +16856,15 @@
       }
     },
     "node_modules/vite": {
-      "version": "5.4.0",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz",
-      "integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==",
+      "version": "5.4.2",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz",
+      "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
-        "postcss": "^8.4.40",
-        "rollup": "^4.13.0"
+        "postcss": "^8.4.41",
+        "rollup": "^4.20.0"
       },
       "bin": {
         "vite": "bin/vite.js"
@@ -17105,16 +17106,16 @@
       }
     },
     "node_modules/vite-plugin-inspect": {
-      "version": "0.8.5",
-      "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.5.tgz",
-      "integrity": "sha512-JvTUqsP1JNDw0lMZ5Z/r5cSj81VK2B7884LO1DC3GMBhdcjcsAnJjdWq7bzQL01Xbh+v60d3lju3g+z7eAtNew==",
+      "version": "0.8.7",
+      "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.7.tgz",
+      "integrity": "sha512-/XXou3MVc13A5O9/2Nd6xczjrUwt7ZyI9h8pTnUMkr5SshLcb0PJUOVq2V+XVkdeU4njsqAtmK87THZuO2coGA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@antfu/utils": "^0.7.10",
         "@rollup/pluginutils": "^5.1.0",
-        "debug": "^4.3.5",
-        "error-stack-parser-es": "^0.1.4",
+        "debug": "^4.3.6",
+        "error-stack-parser-es": "^0.1.5",
         "fs-extra": "^11.2.0",
         "open": "^10.1.0",
         "perfect-debounce": "^1.0.0",
diff --git a/print/package.json b/print/package.json
index 9db578ea6b..e7851b7510 100644
--- a/print/package.json
+++ b/print/package.json
@@ -53,7 +53,7 @@
     "eslint-plugin-vue": "9.27.0",
     "eslint-plugin-vue-scoped-css": "2.8.1",
     "globals": "15.9.0",
-    "nuxt": "3.12.4",
+    "nuxt": "3.13.0",
     "prettier": "3.3.3",
     "sass": "1.69.4",
     "vitest": "2.0.5",

From 4aaab0b21eef8a4a2f12ee4e639942d086806eb6 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 22 Aug 2024 20:37:06 +0000
Subject: [PATCH 115/273] chore(deps): update dependency @nuxt/eslint-config to
 v0.5.2

---
 print/package-lock.json | 16 ++++++++--------
 print/package.json      |  2 +-
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index 023a8ae7ae..609b5c2c06 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -24,7 +24,7 @@
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.0",
-        "@nuxt/eslint-config": "0.5.1",
+        "@nuxt/eslint-config": "0.5.2",
         "@nuxtjs/eslint-module": "4.1.0",
         "@nuxtjs/i18n": "8.5.0",
         "@nuxtjs/tailwindcss": "6.12.1",
@@ -2027,14 +2027,14 @@
       }
     },
     "node_modules/@nuxt/eslint-config": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.1.tgz",
-      "integrity": "sha512-Z6JNHe4trtJdte3y5Fy0CueFCris/kEIbDAoY1bYum1EtOFjEhOcx6BWCrkQybzUIfPVel7YgJ4CiG9bkD3plQ==",
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.2.tgz",
+      "integrity": "sha512-InlT4s6dUaO7YGxz0J2yaW3pRiCbIPBH4Mc3OxUPFT5+BYYXASm/Os+Ssc0Ia/UDAjiofLwd0Ov+QforPOeQUg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint/js": "^9.9.0",
-        "@nuxt/eslint-plugin": "0.5.1",
+        "@nuxt/eslint-plugin": "0.5.2",
         "@rushstack/eslint-patch": "^1.10.4",
         "@stylistic/eslint-plugin": "^2.6.4",
         "@typescript-eslint/eslint-plugin": "^8.1.0",
@@ -2057,9 +2057,9 @@
       }
     },
     "node_modules/@nuxt/eslint-plugin": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.1.tgz",
-      "integrity": "sha512-erJ6bum60DTAy+nCq+oU2ZmG4kat+zhvTPvBEkA9SSnJvrHLSjTzJ/r74rgwPM5yuUfIxtujYQ6BBvwvbCBzXw==",
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.2.tgz",
+      "integrity": "sha512-Z7v+mVJp6ertuwyYSU5NQbPzAEjvNDI3W88jcRr6cM94SzlJCJWfgZgZtxumbISGT2SAIO4TqNC++wFxDC5Jgw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/print/package.json b/print/package.json
index 9db578ea6b..9ab2a916d4 100644
--- a/print/package.json
+++ b/print/package.json
@@ -33,7 +33,7 @@
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
     "@eslint/js": "9.9.0",
-    "@nuxt/eslint-config": "0.5.1",
+    "@nuxt/eslint-config": "0.5.2",
     "@nuxtjs/eslint-module": "4.1.0",
     "@nuxtjs/i18n": "8.5.0",
     "@nuxtjs/tailwindcss": "6.12.1",

From 07d9931802be8786a749a6782b6e52d34698d7c5 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 22 Aug 2024 22:48:44 +0000
Subject: [PATCH 116/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.36

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 9cd9f0c463..86c97ea155 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.35
+    image: amazon/aws-cli:2.17.36
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From 7dcc588fadabb44d931218e88f35a33b2ac4e9a3 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 12:03:28 +0000
Subject: [PATCH 117/273] fix(deps): update dependency @pulumi/aws to v6.50.1

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index c29cc35c92..fa369f18d1 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -6,7 +6,7 @@
         "": {
             "name": "ecamp-core",
             "dependencies": {
-                "@pulumi/aws": "6.50.0",
+                "@pulumi/aws": "6.50.1",
                 "@pulumi/awsx": "2.14.0",
                 "@pulumi/pulumi": "3.129.0"
             },
@@ -2069,9 +2069,9 @@
             "license": "BSD-3-Clause"
         },
         "node_modules/@pulumi/aws": {
-            "version": "6.50.0",
-            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.50.0.tgz",
-            "integrity": "sha512-v+Dit+WCN6qXviByTvCSbnD+CNkSeti8vYVdqRkOKt82oxs3XhIoIZPs/AdILxR7226mf/0FK3rnBeBt28eITg==",
+            "version": "6.50.1",
+            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.50.1.tgz",
+            "integrity": "sha512-PzU8DnOsLCFgqeV7eFSrmcyqos2ilsuuRNbGLxP9pP1dXhsBvXoLFVyLNdTuI+zDG58fOmC2c7KsXXuyo3vjvg==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@pulumi/pulumi": "^3.0.0",
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 9d0d44188f..b40946c87c 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -11,7 +11,7 @@
     },
     "dependencies": {
         "@pulumi/pulumi": "3.129.0",
-        "@pulumi/aws": "6.50.0",
+        "@pulumi/aws": "6.50.1",
         "@pulumi/awsx": "2.14.0"
     },
     "devDependencies": {

From 8211c88cff68a482b4a21733a55a6a7d5d2da5f6 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 16:49:49 +0000
Subject: [PATCH 118/273] chore(deps): update helm release oauth2-proxy to
 v7.7.12

---
 .ops/ops-dashboard/Chart.lock | 10 +++++-----
 .ops/ops-dashboard/Chart.yaml |  6 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/.ops/ops-dashboard/Chart.lock b/.ops/ops-dashboard/Chart.lock
index d7c1f24218..9db509460d 100644
--- a/.ops/ops-dashboard/Chart.lock
+++ b/.ops/ops-dashboard/Chart.lock
@@ -1,15 +1,15 @@
 dependencies:
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.9
+  version: 7.7.12
 - name: kubernetes-dashboard
   repository: https://kubernetes.github.io/dashboard/
   version: 7.5.0
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.9
+  version: 7.7.12
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.9
-digest: sha256:d59fb8f09271eabc1b56d4049ced9d101637b386d59e79b547361d2c6071907d
-generated: "2024-07-16T15:09:43.307473692Z"
+  version: 7.7.12
+digest: sha256:82a62eb3ac6b4c78a84b14c975ddcc070e9151a8569b16552ce30175c9cdec99
+generated: "2024-08-23T16:49:39.187101742Z"
diff --git a/.ops/ops-dashboard/Chart.yaml b/.ops/ops-dashboard/Chart.yaml
index d6cfb60a10..71d317fbaf 100644
--- a/.ops/ops-dashboard/Chart.yaml
+++ b/.ops/ops-dashboard/Chart.yaml
@@ -26,16 +26,16 @@ appVersion: 0.1.0
 dependencies:
   - name: oauth2-proxy
     alias: grafana-proxy
-    version: 7.7.9
+    version: 7.7.12
     repository: https://oauth2-proxy.github.io/manifests
   - name: kubernetes-dashboard
     version: 7.5.0
     repository: https://kubernetes.github.io/dashboard/
   - name: oauth2-proxy
     alias: kubernetes-dashboard-proxy
-    version: 7.7.9
+    version: 7.7.12
     repository: https://oauth2-proxy.github.io/manifests
   - name: oauth2-proxy
     alias: logging-proxy
-    version: 7.7.9
+    version: 7.7.12
     repository: https://oauth2-proxy.github.io/manifests

From 8d5e0ec92fcd257881598a48fa2b5c82ded5962e Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 16:50:29 +0000
Subject: [PATCH 119/273] fix(deps): update dependency axios to v1.7.5

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 frontend/package-lock.json       | 8 ++++----
 frontend/package.json            | 2 +-
 print/package-lock.json          | 8 ++++----
 print/package.json               | 2 +-
 6 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index fa369f18d1..c29cc35c92 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -6,7 +6,7 @@
         "": {
             "name": "ecamp-core",
             "dependencies": {
-                "@pulumi/aws": "6.50.1",
+                "@pulumi/aws": "6.50.0",
                 "@pulumi/awsx": "2.14.0",
                 "@pulumi/pulumi": "3.129.0"
             },
@@ -2069,9 +2069,9 @@
             "license": "BSD-3-Clause"
         },
         "node_modules/@pulumi/aws": {
-            "version": "6.50.1",
-            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.50.1.tgz",
-            "integrity": "sha512-PzU8DnOsLCFgqeV7eFSrmcyqos2ilsuuRNbGLxP9pP1dXhsBvXoLFVyLNdTuI+zDG58fOmC2c7KsXXuyo3vjvg==",
+            "version": "6.50.0",
+            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.50.0.tgz",
+            "integrity": "sha512-v+Dit+WCN6qXviByTvCSbnD+CNkSeti8vYVdqRkOKt82oxs3XhIoIZPs/AdILxR7226mf/0FK3rnBeBt28eITg==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@pulumi/pulumi": "^3.0.0",
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index b40946c87c..9d0d44188f 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -11,7 +11,7 @@
     },
     "dependencies": {
         "@pulumi/pulumi": "3.129.0",
-        "@pulumi/aws": "6.50.1",
+        "@pulumi/aws": "6.50.0",
         "@pulumi/awsx": "2.14.0"
     },
     "devDependencies": {
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 81d9ced977..c765ceb914 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -40,7 +40,7 @@
         "@zxcvbn-ts/language-fr": "3.0.2",
         "@zxcvbn-ts/language-it": "3.0.2",
         "assert": "2.1.0",
-        "axios": "1.7.4",
+        "axios": "1.7.5",
         "colorjs.io": "0.5.2",
         "comlink": "4.4.1",
         "dayjs": "1.11.13",
@@ -5346,9 +5346,9 @@
       }
     },
     "node_modules/axios": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
-      "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
+      "version": "1.7.5",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz",
+      "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==",
       "license": "MIT",
       "dependencies": {
         "follow-redirects": "^1.15.6",
diff --git a/frontend/package.json b/frontend/package.json
index b342c50f7e..c8e140a0e9 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -52,7 +52,7 @@
     "@zxcvbn-ts/language-fr": "3.0.2",
     "@zxcvbn-ts/language-it": "3.0.2",
     "assert": "2.1.0",
-    "axios": "1.7.4",
+    "axios": "1.7.5",
     "colorjs.io": "0.5.2",
     "comlink": "4.4.1",
     "dayjs": "1.11.13",
diff --git a/print/package-lock.json b/print/package-lock.json
index c33f72a51b..5b5559b6f2 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -9,7 +9,7 @@
         "@jamescoyle/vue-icon": "0.1.2",
         "@mdi/js": "7.4.47",
         "@sentry/node": "8.26.0",
-        "axios": "1.7.4",
+        "axios": "1.7.5",
         "colorjs.io": "0.5.2",
         "dayjs": "1.11.13",
         "deepmerge": "4.3.1",
@@ -6002,9 +6002,9 @@
       }
     },
     "node_modules/axios": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
-      "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
+      "version": "1.7.5",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz",
+      "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==",
       "license": "MIT",
       "dependencies": {
         "follow-redirects": "^1.15.6",
diff --git a/print/package.json b/print/package.json
index b83e30d744..08407f948f 100644
--- a/print/package.json
+++ b/print/package.json
@@ -18,7 +18,7 @@
     "@jamescoyle/vue-icon": "0.1.2",
     "@mdi/js": "7.4.47",
     "@sentry/node": "8.26.0",
-    "axios": "1.7.4",
+    "axios": "1.7.5",
     "colorjs.io": "0.5.2",
     "dayjs": "1.11.13",
     "deepmerge": "4.3.1",

From f1338ede65e76fa13e826e9dfdb358cb253ac438 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 16:50:58 +0000
Subject: [PATCH 120/273] fix(deps): update dependency doctrine/orm to v2.19.7

---
 .ops/aws-setup/package-lock.json |  8 ++++----
 .ops/aws-setup/package.json      |  2 +-
 api/composer.json                |  2 +-
 api/composer.lock                | 26 +++++++++++++-------------
 4 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index fa369f18d1..c29cc35c92 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -6,7 +6,7 @@
         "": {
             "name": "ecamp-core",
             "dependencies": {
-                "@pulumi/aws": "6.50.1",
+                "@pulumi/aws": "6.50.0",
                 "@pulumi/awsx": "2.14.0",
                 "@pulumi/pulumi": "3.129.0"
             },
@@ -2069,9 +2069,9 @@
             "license": "BSD-3-Clause"
         },
         "node_modules/@pulumi/aws": {
-            "version": "6.50.1",
-            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.50.1.tgz",
-            "integrity": "sha512-PzU8DnOsLCFgqeV7eFSrmcyqos2ilsuuRNbGLxP9pP1dXhsBvXoLFVyLNdTuI+zDG58fOmC2c7KsXXuyo3vjvg==",
+            "version": "6.50.0",
+            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.50.0.tgz",
+            "integrity": "sha512-v+Dit+WCN6qXviByTvCSbnD+CNkSeti8vYVdqRkOKt82oxs3XhIoIZPs/AdILxR7226mf/0FK3rnBeBt28eITg==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@pulumi/pulumi": "^3.0.0",
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index b40946c87c..9d0d44188f 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -11,7 +11,7 @@
     },
     "dependencies": {
         "@pulumi/pulumi": "3.129.0",
-        "@pulumi/aws": "6.50.1",
+        "@pulumi/aws": "6.50.0",
         "@pulumi/awsx": "2.14.0"
     },
     "devDependencies": {
diff --git a/api/composer.json b/api/composer.json
index 1fd9dbc712..b2392e54f3 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -10,7 +10,7 @@
         "cweagans/composer-patches": "1.7.3",
         "doctrine/doctrine-bundle": "2.12.0",
         "doctrine/doctrine-migrations-bundle": "3.3.1",
-        "doctrine/orm": "2.19.6",
+        "doctrine/orm": "2.19.7",
         "exercise/htmlpurifier-bundle": "5.0",
         "friendsofsymfony/http-cache": "3.1.0",
         "friendsofsymfony/http-cache-bundle": "3.0.1",
diff --git a/api/composer.lock b/api/composer.lock
index e2b222777f..92601aef42 100644
--- a/api/composer.lock
+++ b/api/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": "b03af05515f7f1849111ed7b5a7184e1",
+    "content-hash": "c45047c7da0ee16f9666ea1ba7d8ccbc",
     "packages": [
         {
             "name": "api-platform/core",
@@ -762,16 +762,16 @@
         },
         {
             "name": "doctrine/dbal",
-            "version": "3.8.7",
+            "version": "3.9.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/dbal.git",
-                "reference": "2093d670ca17f634f3c095ec10a20687eccebd99"
+                "reference": "d8f68ea6cc00912e5313237130b8c8decf4d28c6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/dbal/zipball/2093d670ca17f634f3c095ec10a20687eccebd99",
-                "reference": "2093d670ca17f634f3c095ec10a20687eccebd99",
+                "url": "https://api.github.com/repos/doctrine/dbal/zipball/d8f68ea6cc00912e5313237130b8c8decf4d28c6",
+                "reference": "d8f68ea6cc00912e5313237130b8c8decf4d28c6",
                 "shasum": ""
             },
             "require": {
@@ -855,7 +855,7 @@
             ],
             "support": {
                 "issues": "https://github.com/doctrine/dbal/issues",
-                "source": "https://github.com/doctrine/dbal/tree/3.8.7"
+                "source": "https://github.com/doctrine/dbal/tree/3.9.0"
             },
             "funding": [
                 {
@@ -871,7 +871,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-08-07T11:57:25+00:00"
+            "time": "2024-08-15T07:34:42+00:00"
         },
         {
             "name": "doctrine/deprecations",
@@ -1565,16 +1565,16 @@
         },
         {
             "name": "doctrine/orm",
-            "version": "2.19.6",
+            "version": "2.19.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/orm.git",
-                "reference": "c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073"
+                "reference": "168ac31084226f94d42e7461a40ff5607a56bd35"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/orm/zipball/c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073",
-                "reference": "c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073",
+                "url": "https://api.github.com/repos/doctrine/orm/zipball/168ac31084226f94d42e7461a40ff5607a56bd35",
+                "reference": "168ac31084226f94d42e7461a40ff5607a56bd35",
                 "shasum": ""
             },
             "require": {
@@ -1660,9 +1660,9 @@
             ],
             "support": {
                 "issues": "https://github.com/doctrine/orm/issues",
-                "source": "https://github.com/doctrine/orm/tree/2.19.6"
+                "source": "https://github.com/doctrine/orm/tree/2.19.7"
             },
-            "time": "2024-06-26T17:24:40+00:00"
+            "time": "2024-08-23T06:54:57+00:00"
         },
         {
             "name": "doctrine/persistence",

From 14c7161855cab4c68a25b7799da8d8bde83afb62 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 16:53:49 +0000
Subject: [PATCH 121/273] fix(deps): update tiptap to v2.6.6

---
 .ops/ops-dashboard/Chart.lock |  10 +-
 .ops/ops-dashboard/Chart.yaml |   6 +-
 frontend/package-lock.json    | 198 +++++++++++++++++-----------------
 frontend/package.json         |  34 +++---
 4 files changed, 124 insertions(+), 124 deletions(-)

diff --git a/.ops/ops-dashboard/Chart.lock b/.ops/ops-dashboard/Chart.lock
index 9db509460d..d7c1f24218 100644
--- a/.ops/ops-dashboard/Chart.lock
+++ b/.ops/ops-dashboard/Chart.lock
@@ -1,15 +1,15 @@
 dependencies:
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.12
+  version: 7.7.9
 - name: kubernetes-dashboard
   repository: https://kubernetes.github.io/dashboard/
   version: 7.5.0
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.12
+  version: 7.7.9
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.12
-digest: sha256:82a62eb3ac6b4c78a84b14c975ddcc070e9151a8569b16552ce30175c9cdec99
-generated: "2024-08-23T16:49:39.187101742Z"
+  version: 7.7.9
+digest: sha256:d59fb8f09271eabc1b56d4049ced9d101637b386d59e79b547361d2c6071907d
+generated: "2024-07-16T15:09:43.307473692Z"
diff --git a/.ops/ops-dashboard/Chart.yaml b/.ops/ops-dashboard/Chart.yaml
index 71d317fbaf..d6cfb60a10 100644
--- a/.ops/ops-dashboard/Chart.yaml
+++ b/.ops/ops-dashboard/Chart.yaml
@@ -26,16 +26,16 @@ appVersion: 0.1.0
 dependencies:
   - name: oauth2-proxy
     alias: grafana-proxy
-    version: 7.7.12
+    version: 7.7.9
     repository: https://oauth2-proxy.github.io/manifests
   - name: kubernetes-dashboard
     version: 7.5.0
     repository: https://kubernetes.github.io/dashboard/
   - name: oauth2-proxy
     alias: kubernetes-dashboard-proxy
-    version: 7.7.12
+    version: 7.7.9
     repository: https://oauth2-proxy.github.io/manifests
   - name: oauth2-proxy
     alias: logging-proxy
-    version: 7.7.12
+    version: 7.7.9
     repository: https://oauth2-proxy.github.io/manifests
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 81d9ced977..49d7f7a697 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -16,23 +16,23 @@
         "@react-pdf/render": "3.4.4",
         "@sentry/browser": "8.26.0",
         "@sentry/vue": "8.26.0",
-        "@tiptap/extension-bold": "2.6.5",
-        "@tiptap/extension-bubble-menu": "2.6.5",
-        "@tiptap/extension-bullet-list": "2.6.5",
-        "@tiptap/extension-document": "2.6.5",
-        "@tiptap/extension-hard-break": "2.6.5",
-        "@tiptap/extension-heading": "2.6.5",
-        "@tiptap/extension-history": "2.6.5",
-        "@tiptap/extension-italic": "2.6.5",
-        "@tiptap/extension-list-item": "2.6.5",
-        "@tiptap/extension-ordered-list": "2.6.5",
-        "@tiptap/extension-paragraph": "2.6.5",
-        "@tiptap/extension-placeholder": "2.6.5",
-        "@tiptap/extension-strike": "2.6.5",
-        "@tiptap/extension-text": "2.6.5",
-        "@tiptap/extension-underline": "2.6.5",
-        "@tiptap/pm": "2.6.5",
-        "@tiptap/vue-2": "2.6.5",
+        "@tiptap/extension-bold": "2.6.6",
+        "@tiptap/extension-bubble-menu": "2.6.6",
+        "@tiptap/extension-bullet-list": "2.6.6",
+        "@tiptap/extension-document": "2.6.6",
+        "@tiptap/extension-hard-break": "2.6.6",
+        "@tiptap/extension-heading": "2.6.6",
+        "@tiptap/extension-history": "2.6.6",
+        "@tiptap/extension-italic": "2.6.6",
+        "@tiptap/extension-list-item": "2.6.6",
+        "@tiptap/extension-ordered-list": "2.6.6",
+        "@tiptap/extension-paragraph": "2.6.6",
+        "@tiptap/extension-placeholder": "2.6.6",
+        "@tiptap/extension-strike": "2.6.6",
+        "@tiptap/extension-text": "2.6.6",
+        "@tiptap/extension-underline": "2.6.6",
+        "@tiptap/pm": "2.6.6",
+        "@tiptap/vue-2": "2.6.6",
         "@zxcvbn-ts/core": "3.0.4",
         "@zxcvbn-ts/language-common": "3.0.4",
         "@zxcvbn-ts/language-de": "3.0.2",
@@ -3979,9 +3979,9 @@
       }
     },
     "node_modules/@tiptap/core": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.6.5.tgz",
-      "integrity": "sha512-1q5gn4YB0Qm3xFxdQq40FMwjL0gj4flP3UeXHlHXHYvJtMK9ZckRJReYtTEGjRp99BJWivU0YehGdC/96f47GA==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.6.6.tgz",
+      "integrity": "sha512-VO5qTsjt6rwworkuo0s5AqYMfDA0ZwiTiH6FHKFSu2G/6sS7HKcc/LjPq+5Legzps4QYdBDl3W28wGsGuS1GdQ==",
       "license": "MIT",
       "peer": true,
       "funding": {
@@ -3989,26 +3989,26 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/pm": "^2.6.5"
+        "@tiptap/pm": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-bold": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.6.5.tgz",
-      "integrity": "sha512-ey78g9YCOQi+qQ58QBFvWJVIXLQ+9isamshO9lzoc4RdtWDm+WuIUmmyoeneRcQixbVlyvOOMUf7PNKdIZHHtg==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.6.6.tgz",
+      "integrity": "sha512-CD6gBhdQtCoqYSmx8oAV8gvKtVOGZSyyvuNYo7by9eZ56DqLYnd7kbUj0RH7o9Ymf/iJTOUJ6XcvrsWwo4lubg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5"
+        "@tiptap/core": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-bubble-menu": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.6.5.tgz",
-      "integrity": "sha512-KIqZnbmIcHEg7ynkkDS7PKqHmsF45FZYeyJGXESrvxwfrvPElTtCwDeNaqmDwb000ljwW7BwiVUj5DjZCJlj2A==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.6.6.tgz",
+      "integrity": "sha512-IkfmlZq67aaegym5sBddBc/xXWCArxn5WJEl1oxKEayjQhybKSaqI7tk0lOx/x7fa5Ml1WlGpCFh+KKXbQTG0g==",
       "license": "MIT",
       "dependencies": {
         "tippy.js": "^6.3.7"
@@ -4018,40 +4018,40 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5",
-        "@tiptap/pm": "^2.6.5"
+        "@tiptap/core": "^2.6.6",
+        "@tiptap/pm": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-bullet-list": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.6.5.tgz",
-      "integrity": "sha512-6r1sc7voURIVU1bl6D9iBOJCHRQphQXHRzE2tLENCHdT8nlgO6wRwAIUVaps8Xkckr+WkLEeHTun+AD6bS+Q3A==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.6.6.tgz",
+      "integrity": "sha512-WEKxbVSYuvmX2wkHWP8HXk5nzA7stYwtdaubwWH/R17kGI3IGScJuMQ9sEN82uzJU8bfgL9yCbH2bY8Fj/Q4Ow==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5"
+        "@tiptap/core": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-document": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.6.5.tgz",
-      "integrity": "sha512-3rjyNAW8yAm4jrD8AsD39n/FXZ0PMkqbEN0Uzt4RCfK0Kbi8UcTYgcRCgo+HneqqtUAK/d+5imcbdTP6R2lTCg==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.6.6.tgz",
+      "integrity": "sha512-6qlH5VWzLHHRVeeciRC6C4ZHpMsAGPNG16EF53z0GeMSaaFD/zU3B239QlmqXmLsAl8bpf8Bn93N0t2ABUvScw==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5"
+        "@tiptap/core": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-floating-menu": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.6.5.tgz",
-      "integrity": "sha512-RrGNBvpvklZH5n3iIeTgrKVH07n6ozb7IZ60T5idhxedWBtvbEAou3Y9XlCqOhNgooHiCqWkiV4dPngk51G2Yg==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.6.6.tgz",
+      "integrity": "sha512-lPkESOfAUxgmXRiNqUU23WSyja5FUfSWjsW4hqe+BKNjsUt1OuFMEtYJtNc+MCGhhtPfFvM3Jg6g9jd6g5XsLQ==",
       "license": "MIT",
       "dependencies": {
         "tippy.js": "^6.3.7"
@@ -4061,159 +4061,159 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5",
-        "@tiptap/pm": "^2.6.5"
+        "@tiptap/core": "^2.6.6",
+        "@tiptap/pm": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-hard-break": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.6.5.tgz",
-      "integrity": "sha512-5DcI6hDm3pw5I1jWwzNo/tx/2Nx+as4Nl6Stk3tJO1WPKCWPWouyR62EHyzhgMqcPFKRUWtWpeHag2rGDoY4Bw==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.6.6.tgz",
+      "integrity": "sha512-bsUuyYBrMDEiudx1dOQSr9MzKv13m0xHWrOK+DYxuIDYJb5g+c9un5cK7Js+et/HEYYSPOoH/iTW6h+4I5YeUg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5"
+        "@tiptap/core": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-heading": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.6.5.tgz",
-      "integrity": "sha512-H7WqddzURXUptUznPWqW988mVK1HwghSwKYNTvcw3BHUI6nbVK2UJQyZUV3+XDDru2W77lXwvmBTw8xglPkHlg==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.6.6.tgz",
+      "integrity": "sha512-bgx9vptVFi5yFkIw1OI53J7+xJ71Or3SOe/Q8eSpZv53DlaKpL/TzKw8Z54t1PrI2rJ6H9vrLtkvixJvBZH1Ug==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5"
+        "@tiptap/core": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-history": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.6.5.tgz",
-      "integrity": "sha512-zDCXiVKfqii0D+Q9lu65skW3+4Jqzicge+sw42YBQp4H7jXLJC55QoLuctwhl4iGXliiWnobRpotTPdaUXYhoA==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.6.6.tgz",
+      "integrity": "sha512-tPTzAmPGqMX5Bd5H8lzRpmsaMvB9DvI5Dy2za/VQuFtxgXmDiFVgHRkRXIuluSkPTuANu84XBOQ0cBijqY8x4w==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5",
-        "@tiptap/pm": "^2.6.5"
+        "@tiptap/core": "^2.6.6",
+        "@tiptap/pm": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-italic": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.6.5.tgz",
-      "integrity": "sha512-g+OC1KcgKu3xhaydTRDcw/Ydr+EEAVLelmtwNILv5UfypFDvcYZRQNqF5/m2ZJ6kjtXQQ8whC3ddMGUgxs29Bg==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.6.6.tgz",
+      "integrity": "sha512-t7ZPsXqa8nJZZ/6D0rQyZ/KsvzLaSihC6hBTjUQ77CeDGV9PhDWjIcBW4OrvwraJDBd12ETBeQ2CkULJOgH+lQ==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5"
+        "@tiptap/core": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-list-item": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.6.5.tgz",
-      "integrity": "sha512-Ks/m2spl3t3pX8W23H1clq0CQ2cGrLKdPxpSn3DAbZxYjT3SF7jpJaG3e+MKKh84PcjY0Xa3FextuLFRSLlgOw==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.6.6.tgz",
+      "integrity": "sha512-k+oEzZu2cgVKqPqOP1HzASOKLpTEV9m7mRVPAbuaaX8mSyvIgD6f+JUx9PvgYv//D918wk98LMoRBFX53tDJ4w==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5"
+        "@tiptap/core": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-ordered-list": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.6.5.tgz",
-      "integrity": "sha512-brTZiwS3Lg3bFXCJABfJ1UOLiX08BNnWw/mOBYuKsnBvIPJQpJ98C1galnX77ihsjFtAUdVdm7xlwcX2q5x8Yg==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.6.6.tgz",
+      "integrity": "sha512-AJwyfLXIi7iUGnK5twJbwdVVpQyh7fU6OK75h1AwDztzsOcoPcxtffDlZvUOd4ZtwuyhkzYqVkeI0f+abTWZTw==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5"
+        "@tiptap/core": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-paragraph": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.6.5.tgz",
-      "integrity": "sha512-RGevQMVpqTxuU9Gz2G4STOVcqoP9i9Fc0QurM/B0mDjs5onzCCJLd6qIqxuT7WfFYILe8q3QIu8KB+XGmvmobQ==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.6.6.tgz",
+      "integrity": "sha512-fD/onCr16UQWx+/xEmuFC2MccZZ7J5u4YaENh8LMnAnBXf78iwU7CAcmuc9rfAEO3qiLoYGXgLKiHlh2ZfD4wA==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5"
+        "@tiptap/core": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-placeholder": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.6.5.tgz",
-      "integrity": "sha512-ysPt++WIN9j57lQJFk5UmKK1lPMrbREAB206VrOqDmsehThegpgl4rRWQP6G4AUr+ieytYPV49vjJtZQGxo3WA==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-2.6.6.tgz",
+      "integrity": "sha512-J0ZMvF93NsRrt+R7IQ3GhxNq32vq+88g25oV/YFJiwvC48HMu1tQB6kG1I3LJpu5b8lN+LnfANNqDOEhiBfjaA==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5",
-        "@tiptap/pm": "^2.6.5"
+        "@tiptap/core": "^2.6.6",
+        "@tiptap/pm": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-strike": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.6.5.tgz",
-      "integrity": "sha512-ehA++vHPMmLNhfjKFDHJR6FAh3wziIfehaZShuvkjlF7mryTa19y7KJem+8d0wv2w5AwoFOMBJmC7EBXyG0boQ==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.6.6.tgz",
+      "integrity": "sha512-Ze8KhGk+wzSJSJRl5fbhTI6AvPu2LmcHYeO3pMEH8u4gV5WTXfmKJVStEIAzkoqvwEQVWzXvy8nDgsFQHiojPg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5"
+        "@tiptap/core": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-text": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.6.5.tgz",
-      "integrity": "sha512-ItYw4K2EjP4yNBP2BVa77kimdvpsEqDy0Iic+d46F3SM60wLMhp1qmauZhwk5oo89sDuMz3DI0p+R4lI43wprA==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.6.6.tgz",
+      "integrity": "sha512-e84uILnRzNzcwK1DVQNpXVmBG1Cq3BJipTOIDl1LHifOok7MBjhI/X+/NR0bd3N2t6gmDTWi63+4GuJ5EeDmsg==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5"
+        "@tiptap/core": "^2.6.6"
       }
     },
     "node_modules/@tiptap/extension-underline": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.6.5.tgz",
-      "integrity": "sha512-OUkCVviAe1m5j0xZZHDdNhX4kd7TpasWJn9TvEhAoE9zCaCn54T1xSFGWq61Eu4qICn+KPjgWXWOGwniKEIrKg==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.6.6.tgz",
+      "integrity": "sha512-3A4HqsDM/AFb2VaeWACpGexjgI257kz0yU4jNV8uyydDR2KhqeinuEnoSoOmx9T3pL006TWfPg4vaQYPO3qvrQ==",
       "license": "MIT",
       "funding": {
         "type": "github",
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5"
+        "@tiptap/core": "^2.6.6"
       }
     },
     "node_modules/@tiptap/pm": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.6.5.tgz",
-      "integrity": "sha512-5n7O7MdVATwJTNMs5mW0qngtIfaxzBXnkO6gaQj169HgmDHKA0ST60r/G6r6yQ/QU6UCt6ey9Stgr7ko1eU1NQ==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.6.6.tgz",
+      "integrity": "sha512-56FGLPn3fwwUlIbLs+BO21bYfyqP9fKyZQbQyY0zWwA/AG2kOwoXaRn7FOVbjP6CylyWpFJnpRRmgn694QKHEg==",
       "license": "MIT",
       "dependencies": {
         "prosemirror-changeset": "^2.2.1",
@@ -4241,13 +4241,13 @@
       }
     },
     "node_modules/@tiptap/vue-2": {
-      "version": "2.6.5",
-      "resolved": "https://registry.npmjs.org/@tiptap/vue-2/-/vue-2-2.6.5.tgz",
-      "integrity": "sha512-ImRX66HystlljLGeQQErC2Y+32dcxsMM/3zIdGXaSIpt1ZF7iQkeC55UF8pR5u8Nbpgf13XqTZJUOPI7z3B2xw==",
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/@tiptap/vue-2/-/vue-2-2.6.6.tgz",
+      "integrity": "sha512-d7GmQ2XaC6a0GWNtWz/4togQadMdl7b/qyhnxFR3tkJdMz5AXFq6VQDxghOEsV0WpAE9syiRyEY3jp7ZELOJow==",
       "license": "MIT",
       "dependencies": {
-        "@tiptap/extension-bubble-menu": "^2.6.5",
-        "@tiptap/extension-floating-menu": "^2.6.5",
+        "@tiptap/extension-bubble-menu": "^2.6.6",
+        "@tiptap/extension-floating-menu": "^2.6.6",
         "vue-ts-types": "^1.6.0"
       },
       "funding": {
@@ -4255,8 +4255,8 @@
         "url": "https://github.com/sponsors/ueberdosis"
       },
       "peerDependencies": {
-        "@tiptap/core": "^2.6.5",
-        "@tiptap/pm": "^2.6.5",
+        "@tiptap/core": "^2.6.6",
+        "@tiptap/pm": "^2.6.6",
         "vue": "^2.6.0"
       }
     },
diff --git a/frontend/package.json b/frontend/package.json
index b342c50f7e..a0914ae187 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -28,23 +28,23 @@
     "@react-pdf/render": "3.4.4",
     "@sentry/browser": "8.26.0",
     "@sentry/vue": "8.26.0",
-    "@tiptap/extension-bold": "2.6.5",
-    "@tiptap/extension-bubble-menu": "2.6.5",
-    "@tiptap/extension-bullet-list": "2.6.5",
-    "@tiptap/extension-document": "2.6.5",
-    "@tiptap/extension-hard-break": "2.6.5",
-    "@tiptap/extension-heading": "2.6.5",
-    "@tiptap/extension-history": "2.6.5",
-    "@tiptap/extension-italic": "2.6.5",
-    "@tiptap/extension-list-item": "2.6.5",
-    "@tiptap/extension-ordered-list": "2.6.5",
-    "@tiptap/extension-paragraph": "2.6.5",
-    "@tiptap/extension-placeholder": "2.6.5",
-    "@tiptap/extension-strike": "2.6.5",
-    "@tiptap/extension-text": "2.6.5",
-    "@tiptap/extension-underline": "2.6.5",
-    "@tiptap/pm": "2.6.5",
-    "@tiptap/vue-2": "2.6.5",
+    "@tiptap/extension-bold": "2.6.6",
+    "@tiptap/extension-bubble-menu": "2.6.6",
+    "@tiptap/extension-bullet-list": "2.6.6",
+    "@tiptap/extension-document": "2.6.6",
+    "@tiptap/extension-hard-break": "2.6.6",
+    "@tiptap/extension-heading": "2.6.6",
+    "@tiptap/extension-history": "2.6.6",
+    "@tiptap/extension-italic": "2.6.6",
+    "@tiptap/extension-list-item": "2.6.6",
+    "@tiptap/extension-ordered-list": "2.6.6",
+    "@tiptap/extension-paragraph": "2.6.6",
+    "@tiptap/extension-placeholder": "2.6.6",
+    "@tiptap/extension-strike": "2.6.6",
+    "@tiptap/extension-text": "2.6.6",
+    "@tiptap/extension-underline": "2.6.6",
+    "@tiptap/pm": "2.6.6",
+    "@tiptap/vue-2": "2.6.6",
     "@zxcvbn-ts/core": "3.0.4",
     "@zxcvbn-ts/language-common": "3.0.4",
     "@zxcvbn-ts/language-de": "3.0.2",

From caa837e7b0baf04e1480cbea1fcb8214e67a6f33 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 18:57:15 +0000
Subject: [PATCH 122/273] chore(deps): update dependency rector/rector to
 v1.2.4

---
 api/composer.json |  2 +-
 api/composer.lock | 16 ++++++++--------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index b2392e54f3..794d5abecb 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -58,7 +58,7 @@
         "phpspec/prophecy-phpunit": "2.2",
         "phpstan/phpstan": "1.11.11",
         "phpunit/phpunit": "10.5.29",
-        "rector/rector": "1.2.3",
+        "rector/rector": "1.2.4",
         "spatie/phpunit-snapshot-assertions": "5.1.6",
         "symfony/browser-kit": "7.1.1",
         "symfony/css-selector": "7.1.1",
diff --git a/api/composer.lock b/api/composer.lock
index 92601aef42..fb2d071d5a 100644
--- a/api/composer.lock
+++ b/api/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": "c45047c7da0ee16f9666ea1ba7d8ccbc",
+    "content-hash": "e674aa5e5f4120bce4feeaf769d047f9",
     "packages": [
         {
             "name": "api-platform/core",
@@ -13085,21 +13085,21 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.2.3",
+            "version": "1.2.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "2433e95410aef1b34b15d7f1b6a134365a4ddb39"
+                "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/2433e95410aef1b34b15d7f1b6a134365a4ddb39",
-                "reference": "2433e95410aef1b34b15d7f1b6a134365a4ddb39",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/42a4aa23b48b4cfc8ebfeac2b570364e27744381",
+                "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.2|^8.0",
-                "phpstan/phpstan": "^1.11.9"
+                "phpstan/phpstan": "^1.11.11"
             },
             "conflict": {
                 "rector/rector-doctrine": "*",
@@ -13132,7 +13132,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.2.3"
+                "source": "https://github.com/rectorphp/rector/tree/1.2.4"
             },
             "funding": [
                 {
@@ -13140,7 +13140,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-12T16:36:46+00:00"
+            "time": "2024-08-23T09:03:01+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From cf6fd56008c914ae79f058a97232f8241c716ce4 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 19:11:28 +0000
Subject: [PATCH 123/273] chore(deps): update dependency phpunit/phpunit to
 v10.5.30

---
 api/composer.json |  2 +-
 api/composer.lock | 48 +++++++++++++++++++++++------------------------
 2 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 794d5abecb..891d29548d 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -57,7 +57,7 @@
         "php-coveralls/php-coveralls": "2.7.0",
         "phpspec/prophecy-phpunit": "2.2",
         "phpstan/phpstan": "1.11.11",
-        "phpunit/phpunit": "10.5.29",
+        "phpunit/phpunit": "10.5.30",
         "rector/rector": "1.2.4",
         "spatie/phpunit-snapshot-assertions": "5.1.6",
         "symfony/browser-kit": "7.1.1",
diff --git a/api/composer.lock b/api/composer.lock
index fb2d071d5a..aa59cf66aa 100644
--- a/api/composer.lock
+++ b/api/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": "e674aa5e5f4120bce4feeaf769d047f9",
+    "content-hash": "1ce91f397201ed13fe999c198b6e0cda",
     "packages": [
         {
             "name": "api-platform/core",
@@ -12133,32 +12133,32 @@
         },
         {
             "name": "phpunit/php-code-coverage",
-            "version": "10.1.15",
+            "version": "10.1.16",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae"
+                "reference": "7e308268858ed6baedc8704a304727d20bc07c77"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae",
-                "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77",
+                "reference": "7e308268858ed6baedc8704a304727d20bc07c77",
                 "shasum": ""
             },
             "require": {
                 "ext-dom": "*",
                 "ext-libxml": "*",
                 "ext-xmlwriter": "*",
-                "nikic/php-parser": "^4.18 || ^5.0",
+                "nikic/php-parser": "^4.19.1 || ^5.1.0",
                 "php": ">=8.1",
-                "phpunit/php-file-iterator": "^4.0",
-                "phpunit/php-text-template": "^3.0",
-                "sebastian/code-unit-reverse-lookup": "^3.0",
-                "sebastian/complexity": "^3.0",
-                "sebastian/environment": "^6.0",
-                "sebastian/lines-of-code": "^2.0",
-                "sebastian/version": "^4.0",
-                "theseer/tokenizer": "^1.2.0"
+                "phpunit/php-file-iterator": "^4.1.0",
+                "phpunit/php-text-template": "^3.0.1",
+                "sebastian/code-unit-reverse-lookup": "^3.0.0",
+                "sebastian/complexity": "^3.2.0",
+                "sebastian/environment": "^6.1.0",
+                "sebastian/lines-of-code": "^2.0.2",
+                "sebastian/version": "^4.0.1",
+                "theseer/tokenizer": "^1.2.3"
             },
             "require-dev": {
                 "phpunit/phpunit": "^10.1"
@@ -12170,7 +12170,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "10.1-dev"
+                    "dev-main": "10.1.x-dev"
                 }
             },
             "autoload": {
@@ -12199,7 +12199,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
                 "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
-                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.15"
+                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16"
             },
             "funding": [
                 {
@@ -12207,7 +12207,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-06-29T08:25:15+00:00"
+            "time": "2024-08-22T04:31:57+00:00"
         },
         {
             "name": "phpunit/php-file-iterator",
@@ -12454,16 +12454,16 @@
         },
         {
             "name": "phpunit/phpunit",
-            "version": "10.5.29",
+            "version": "10.5.30",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f"
+                "reference": "b15524febac0153876b4ba9aab3326c2ee94c897"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8e9e80872b4e8064401788ee8a32d40b4455318f",
-                "reference": "8e9e80872b4e8064401788ee8a32d40b4455318f",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b15524febac0153876b4ba9aab3326c2ee94c897",
+                "reference": "b15524febac0153876b4ba9aab3326c2ee94c897",
                 "shasum": ""
             },
             "require": {
@@ -12484,7 +12484,7 @@
                 "phpunit/php-timer": "^6.0.0",
                 "sebastian/cli-parser": "^2.0.1",
                 "sebastian/code-unit": "^2.0.0",
-                "sebastian/comparator": "^5.0.1",
+                "sebastian/comparator": "^5.0.2",
                 "sebastian/diff": "^5.1.1",
                 "sebastian/environment": "^6.1.0",
                 "sebastian/exporter": "^5.1.2",
@@ -12535,7 +12535,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.29"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.30"
             },
             "funding": [
                 {
@@ -12551,7 +12551,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-30T11:08:00+00:00"
+            "time": "2024-08-13T06:09:37+00:00"
         },
         {
             "name": "react/cache",

From becaaee6913b28ab09d779825a4a527bb2cab3d7 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 21:37:04 +0000
Subject: [PATCH 124/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.37

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 86c97ea155..4edf3fd55a 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.36
+    image: amazon/aws-cli:2.17.37
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From cbe0af563393d630dba4bddde3364b2db188eb6d Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 21:37:59 +0000
Subject: [PATCH 125/273] chore(deps): update dependency @eslint/js to v9.9.1

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 e2e/package-lock.json            | 8 ++++----
 e2e/package.json                 | 2 +-
 frontend/package-lock.json       | 8 ++++----
 frontend/package.json            | 2 +-
 pdf/package-lock.json            | 8 ++++----
 pdf/package.json                 | 2 +-
 print/package-lock.json          | 8 ++++----
 print/package.json               | 2 +-
 10 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index c29cc35c92..ba401bc894 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -14,7 +14,7 @@
                 "@babel/eslint-parser": "7.25.1",
                 "@eslint/compat": "1.1.1",
                 "@eslint/eslintrc": "3.1.0",
-                "@eslint/js": "9.9.0",
+                "@eslint/js": "9.9.1",
                 "@types/node": "20.16.1",
                 "eslint": "8.57.0",
                 "eslint-config-prettier": "9.1.0",
@@ -1169,9 +1169,9 @@
             }
         },
         "node_modules/@eslint/js": {
-            "version": "9.9.0",
-            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.0.tgz",
-            "integrity": "sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==",
+            "version": "9.9.1",
+            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
+            "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
             "dev": true,
             "license": "MIT",
             "engines": {
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 9d0d44188f..4bd0ffa049 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -18,7 +18,7 @@
         "@babel/eslint-parser": "7.25.1",
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.9.0",
+        "@eslint/js": "9.9.1",
         "@types/node": "20.16.1",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
diff --git a/e2e/package-lock.json b/e2e/package-lock.json
index b09862c930..6bb508c99a 100644
--- a/e2e/package-lock.json
+++ b/e2e/package-lock.json
@@ -9,7 +9,7 @@
         "@babel/eslint-parser": "7.25.1",
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.9.0",
+        "@eslint/js": "9.9.1",
         "cypress": "13.13.2",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
@@ -604,9 +604,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.9.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.0.tgz",
-      "integrity": "sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==",
+      "version": "9.9.1",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
+      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/e2e/package.json b/e2e/package.json
index 4237afad20..dbd59acb1c 100644
--- a/e2e/package.json
+++ b/e2e/package.json
@@ -15,7 +15,7 @@
     "@babel/eslint-parser": "7.25.1",
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
-    "@eslint/js": "9.9.0",
+    "@eslint/js": "9.9.1",
     "cypress": "13.13.2",
     "eslint": "8.57.0",
     "eslint-config-prettier": "9.1.0",
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 995e8aaf62..08d93a503f 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -74,7 +74,7 @@
         "@babel/eslint-parser": "7.25.1",
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.9.0",
+        "@eslint/js": "9.9.1",
         "@sentry/vite-plugin": "2.22.2",
         "@testing-library/jest-dom": "6.4.8",
         "@testing-library/user-event": "14.5.2",
@@ -2544,9 +2544,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.9.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.0.tgz",
-      "integrity": "sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==",
+      "version": "9.9.1",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
+      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/frontend/package.json b/frontend/package.json
index 71a7451662..6b1f6c897f 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -86,7 +86,7 @@
     "@babel/eslint-parser": "7.25.1",
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
-    "@eslint/js": "9.9.0",
+    "@eslint/js": "9.9.1",
     "@sentry/vite-plugin": "2.22.2",
     "@testing-library/jest-dom": "6.4.8",
     "@testing-library/user-event": "14.5.2",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index 1b7980d25e..eabdac9cdc 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -14,7 +14,7 @@
         "@babel/eslint-parser": "7.25.1",
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.9.0",
+        "@eslint/js": "9.9.1",
         "@intlify/core": "^9.10.2",
         "@rushstack/eslint-patch": "1.10.4",
         "@vitejs/plugin-vue": "5.1.2",
@@ -2469,9 +2469,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.9.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.0.tgz",
-      "integrity": "sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==",
+      "version": "9.9.1",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
+      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/pdf/package.json b/pdf/package.json
index 8c35a7297f..fb103dbe1c 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -34,7 +34,7 @@
     "@babel/eslint-parser": "7.25.1",
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
-    "@eslint/js": "9.9.0",
+    "@eslint/js": "9.9.1",
     "@intlify/core": "^9.10.2",
     "@rushstack/eslint-patch": "1.10.4",
     "@vitejs/plugin-vue": "5.1.2",
diff --git a/print/package-lock.json b/print/package-lock.json
index 5b5559b6f2..d85b376d75 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -23,7 +23,7 @@
       "devDependencies": {
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.9.0",
+        "@eslint/js": "9.9.1",
         "@nuxt/eslint-config": "0.5.2",
         "@nuxtjs/eslint-module": "4.1.0",
         "@nuxtjs/i18n": "8.5.0",
@@ -1272,9 +1272,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.9.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.0.tgz",
-      "integrity": "sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==",
+      "version": "9.9.1",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
+      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/print/package.json b/print/package.json
index 08407f948f..4c03ac2338 100644
--- a/print/package.json
+++ b/print/package.json
@@ -32,7 +32,7 @@
   "devDependencies": {
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
-    "@eslint/js": "9.9.0",
+    "@eslint/js": "9.9.1",
     "@nuxt/eslint-config": "0.5.2",
     "@nuxtjs/eslint-module": "4.1.0",
     "@nuxtjs/i18n": "8.5.0",

From bfcbfd9ff7bcd05b434af09f31565a3a58cef2d0 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 21:40:56 +0000
Subject: [PATCH 126/273] chore(deps): update helm release oauth2-proxy to
 v7.7.12

---
 .ops/ops-dashboard/Chart.lock | 10 +++++-----
 .ops/ops-dashboard/Chart.yaml |  6 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/.ops/ops-dashboard/Chart.lock b/.ops/ops-dashboard/Chart.lock
index d7c1f24218..a9125e69c0 100644
--- a/.ops/ops-dashboard/Chart.lock
+++ b/.ops/ops-dashboard/Chart.lock
@@ -1,15 +1,15 @@
 dependencies:
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.9
+  version: 7.7.12
 - name: kubernetes-dashboard
   repository: https://kubernetes.github.io/dashboard/
   version: 7.5.0
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.9
+  version: 7.7.12
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.9
-digest: sha256:d59fb8f09271eabc1b56d4049ced9d101637b386d59e79b547361d2c6071907d
-generated: "2024-07-16T15:09:43.307473692Z"
+  version: 7.7.12
+digest: sha256:82a62eb3ac6b4c78a84b14c975ddcc070e9151a8569b16552ce30175c9cdec99
+generated: "2024-08-23T21:40:43.883983991Z"
diff --git a/.ops/ops-dashboard/Chart.yaml b/.ops/ops-dashboard/Chart.yaml
index d6cfb60a10..71d317fbaf 100644
--- a/.ops/ops-dashboard/Chart.yaml
+++ b/.ops/ops-dashboard/Chart.yaml
@@ -26,16 +26,16 @@ appVersion: 0.1.0
 dependencies:
   - name: oauth2-proxy
     alias: grafana-proxy
-    version: 7.7.9
+    version: 7.7.12
     repository: https://oauth2-proxy.github.io/manifests
   - name: kubernetes-dashboard
     version: 7.5.0
     repository: https://kubernetes.github.io/dashboard/
   - name: oauth2-proxy
     alias: kubernetes-dashboard-proxy
-    version: 7.7.9
+    version: 7.7.12
     repository: https://oauth2-proxy.github.io/manifests
   - name: oauth2-proxy
     alias: logging-proxy
-    version: 7.7.9
+    version: 7.7.12
     repository: https://oauth2-proxy.github.io/manifests

From 081d3d1b5ee12203988f28cdd8c0eaecc0f6ab6e Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 21:41:17 +0000
Subject: [PATCH 127/273] chore(deps): update dependency
 @testing-library/jest-dom to v6.5.0

---
 frontend/package-lock.json | 9 ++++-----
 frontend/package.json      | 2 +-
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 995e8aaf62..ecf015eedf 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -76,7 +76,7 @@
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.0",
         "@sentry/vite-plugin": "2.22.2",
-        "@testing-library/jest-dom": "6.4.8",
+        "@testing-library/jest-dom": "6.5.0",
         "@testing-library/user-event": "14.5.2",
         "@testing-library/vue": "5.9.0",
         "@vitejs/plugin-vue2": "2.3.1",
@@ -3738,14 +3738,13 @@
       }
     },
     "node_modules/@testing-library/jest-dom": {
-      "version": "6.4.8",
-      "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.8.tgz",
-      "integrity": "sha512-JD0G+Zc38f5MBHA4NgxQMR5XtO5Jx9g86jqturNTt2WUfRmLDIY7iKkWHDCCTiDuFMre6nxAD5wHw9W5kI4rGw==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz",
+      "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@adobe/css-tools": "^4.4.0",
-        "@babel/runtime": "^7.9.2",
         "aria-query": "^5.0.0",
         "chalk": "^3.0.0",
         "css.escape": "^1.5.1",
diff --git a/frontend/package.json b/frontend/package.json
index 71a7451662..106e78d946 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -88,7 +88,7 @@
     "@eslint/eslintrc": "3.1.0",
     "@eslint/js": "9.9.0",
     "@sentry/vite-plugin": "2.22.2",
-    "@testing-library/jest-dom": "6.4.8",
+    "@testing-library/jest-dom": "6.5.0",
     "@testing-library/user-event": "14.5.2",
     "@testing-library/vue": "5.9.0",
     "@vitejs/plugin-vue2": "2.3.1",

From 49c36c0fdcd748e6ecb0181276ff1869013ee03c Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 21:46:11 +0000
Subject: [PATCH 128/273] fix(deps): update dependency @pulumi/pulumi to
 v3.130.0

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index c29cc35c92..12f0a2c5e6 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -8,7 +8,7 @@
             "dependencies": {
                 "@pulumi/aws": "6.50.0",
                 "@pulumi/awsx": "2.14.0",
-                "@pulumi/pulumi": "3.129.0"
+                "@pulumi/pulumi": "3.130.0"
             },
             "devDependencies": {
                 "@babel/eslint-parser": "7.25.1",
@@ -2117,9 +2117,9 @@
             }
         },
         "node_modules/@pulumi/pulumi": {
-            "version": "3.129.0",
-            "resolved": "https://registry.npmjs.org/@pulumi/pulumi/-/pulumi-3.129.0.tgz",
-            "integrity": "sha512-kjdO81GzEBwFHTYBUg/nz63RLuJ2T4SwObTKBgrfLsyYiPxvTaWdS7Y/N5ww6d4GgnmRNr/dh5mb1LuhlL41fQ==",
+            "version": "3.130.0",
+            "resolved": "https://registry.npmjs.org/@pulumi/pulumi/-/pulumi-3.130.0.tgz",
+            "integrity": "sha512-WsvXRfEdCz+AcuzP41ABgN5Ye3qLt4v/EVZXUT7sMHU6G8uazaLtS92tpvNp+pgeRZf9kbotCEoABXKg+d+1oQ==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@grpc/grpc-js": "^1.10.1",
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 9d0d44188f..210fcfa23c 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -10,7 +10,7 @@
         "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{json,md,mjs,ts}"
     },
     "dependencies": {
-        "@pulumi/pulumi": "3.129.0",
+        "@pulumi/pulumi": "3.130.0",
         "@pulumi/aws": "6.50.0",
         "@pulumi/awsx": "2.14.0"
     },

From 41ac6d8a3cb02d99aa4e640df8f7b77128a3dce6 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 23 Aug 2024 21:48:09 +0000
Subject: [PATCH 129/273] chore(deps): update pulumi/pulumi-nodejs docker tag
 to v3.130.0

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 303e34d2d5..a3e3ca5a26 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -1,6 +1,6 @@
 services:
   aws-setup:
-    image: pulumi/pulumi-nodejs:3.129.0
+    image: pulumi/pulumi-nodejs:3.130.0
     container_name: 'ecamp3-aws-setup'
     volumes:
       - ../../.prettierrc:/.prettierrc:delegated

From bb5256cb3838e9db1822bd36fbb8b481a670ebac Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 24 Aug 2024 05:16:41 +0000
Subject: [PATCH 130/273] fix(deps): update dependency @pulumi/aws to v6.50.1

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index ed73d69f69..4fa50d76e9 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -6,7 +6,7 @@
         "": {
             "name": "ecamp-core",
             "dependencies": {
-                "@pulumi/aws": "6.50.0",
+                "@pulumi/aws": "6.50.1",
                 "@pulumi/awsx": "2.14.0",
                 "@pulumi/pulumi": "3.130.0"
             },
@@ -2069,9 +2069,9 @@
             "license": "BSD-3-Clause"
         },
         "node_modules/@pulumi/aws": {
-            "version": "6.50.0",
-            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.50.0.tgz",
-            "integrity": "sha512-v+Dit+WCN6qXviByTvCSbnD+CNkSeti8vYVdqRkOKt82oxs3XhIoIZPs/AdILxR7226mf/0FK3rnBeBt28eITg==",
+            "version": "6.50.1",
+            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.50.1.tgz",
+            "integrity": "sha512-PzU8DnOsLCFgqeV7eFSrmcyqos2ilsuuRNbGLxP9pP1dXhsBvXoLFVyLNdTuI+zDG58fOmC2c7KsXXuyo3vjvg==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@pulumi/pulumi": "^3.0.0",
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 1478270348..55e4c1204c 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -11,7 +11,7 @@
     },
     "dependencies": {
         "@pulumi/pulumi": "3.130.0",
-        "@pulumi/aws": "6.50.0",
+        "@pulumi/aws": "6.50.1",
         "@pulumi/awsx": "2.14.0"
     },
     "devDependencies": {

From 71a684250eb28737a3b6e3b09de909e10ce541bc Mon Sep 17 00:00:00 2001
From: Manuel Meister <news.manuelsworld@gmail.com>
Date: Sun, 16 Jun 2024 14:24:00 +0200
Subject: [PATCH 131/273] Use paratest for parallel test execution

---
 .../continuous-integration-optional.yml       |   2 +-
 .github/workflows/continuous-integration.yml  |  36 +++++-
 .../reusable-api-performance-test.yml         |   4 +-
 api/.env                                      |   3 +-
 api/composer.json                             |   5 +
 api/composer.lock                             | 112 ++++++++++++++++--
 api/config/packages/dev/doctrine.yaml         |   4 +
 api/config/packages/test/doctrine.yaml        |   3 +-
 8 files changed, 149 insertions(+), 20 deletions(-)
 create mode 100644 api/config/packages/dev/doctrine.yaml

diff --git a/.github/workflows/continuous-integration-optional.yml b/.github/workflows/continuous-integration-optional.yml
index cee9c8ac8f..2f19cc7187 100644
--- a/.github/workflows/continuous-integration-optional.yml
+++ b/.github/workflows/continuous-integration-optional.yml
@@ -92,7 +92,7 @@ jobs:
     name: 'API: validate migrations'
     runs-on: ubuntu-latest
     env:
-      TEST_DATABASE_URL: postgresql://ecamp3:ecamp3@localhost:5432/ecamp3test?serverVersion=15&charset=utf8
+      DATABASE_URL: postgresql://ecamp3:ecamp3@localhost:5432/ecamp3?serverVersion=15&charset=utf8
 
     services:
       postgres:
diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index 44d417808b..fc1cf51692 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -223,7 +223,7 @@ jobs:
       - api-check-needed
     if: needs.api-check-needed.outputs.should_skip != 'true'
     env:
-      TEST_DATABASE_URL: postgresql://ecamp3:ecamp3@localhost:5432/ecamp3test?serverVersion=15&charset=utf8
+      DATABASE_URL: postgresql://ecamp3:ecamp3@localhost:5432/ecamp3?serverVersion=15&charset=utf8
 
     services:
       postgres:
@@ -279,7 +279,35 @@ jobs:
       - run: php bin/console doctrine:migrations:migrate --no-interaction -e test
         working-directory: api
 
-      - run: composer test
+      - run: |
+          php bin/console doctrine:database:create --no-interaction -e test
+          php bin/console doctrine:migrations:migrate --no-interaction -e test
+        env:
+          TEST_TOKEN: 1
+        working-directory: api
+
+      - run: |
+          php bin/console doctrine:database:create --no-interaction -e test
+          php bin/console doctrine:migrations:migrate --no-interaction -e test
+        env:
+          TEST_TOKEN: 2
+        working-directory: api
+
+      - run: |
+          php bin/console doctrine:database:create --no-interaction -e test
+          php bin/console doctrine:migrations:migrate --no-interaction -e test
+        env:
+          TEST_TOKEN: 3
+        working-directory: api
+
+      - run: |
+          php bin/console doctrine:database:create --no-interaction -e test
+          php bin/console doctrine:migrations:migrate --no-interaction -e test
+        env:
+          TEST_TOKEN: 4
+        working-directory: api
+
+      - run: composer paratest -- -p 4
         working-directory: api
         env:
           PERFORMANCE_TEST_DEBUG_OUTPUT: ${{ vars.PERFORMANCE_TEST_DEBUG_OUTPUT }}
@@ -330,7 +358,7 @@ jobs:
       - name: replace paths in lcov.info that they reflect repo path
         run: |
           sed -i "s|src/|frontend/src/|g" frontend/data/coverage/lcov.info
-          
+
       - name: Coveralls Parallel
         uses: coverallsapp/github-action@v2
         with:
@@ -442,7 +470,7 @@ jobs:
           parallel-finished: true
           carryforward: "api,frontend,print,pdf"
           fail-on-error: false
-          
+
   workflow-success:
     name: workflow-success
     needs:
diff --git a/.github/workflows/reusable-api-performance-test.yml b/.github/workflows/reusable-api-performance-test.yml
index d8c87d25be..b1fa952d32 100644
--- a/.github/workflows/reusable-api-performance-test.yml
+++ b/.github/workflows/reusable-api-performance-test.yml
@@ -2,13 +2,13 @@ name: '[reusable only] api performance tests'
 
 on:
   workflow_call:
-    
+
 jobs:
   api-performance-test:
     name: 'Tests: API performance tests'
     runs-on: ubuntu-latest
     env:
-      TEST_DATABASE_URL: postgresql://ecamp3:ecamp3@localhost:5432/ecamp3test?serverVersion=15&charset=utf8
+      DATABASE_URL: postgresql://ecamp3:ecamp3@localhost:5432/ecamp3?serverVersion=15&charset=utf8
 
     services:
       postgres:
diff --git a/api/.env b/api/.env
index c09c3d6eb7..f02a90fa5e 100644
--- a/api/.env
+++ b/api/.env
@@ -31,8 +31,7 @@ APP_SECRET=!ChangeMe!
 #
 # DATABASE_URL="sqlite:///%kernel.project_dir%/var/data.db"
 # DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=5.7"
-DATABASE_URL="postgresql://ecamp3:ecamp3@database:5432/ecamp3dev?serverVersion=15&charset=utf8"
-TEST_DATABASE_URL="postgresql://ecamp3:ecamp3@database:5432/ecamp3test?serverVersion=15&charset=utf8"
+DATABASE_URL="postgresql://ecamp3:ecamp3@database:5432/ecamp3?serverVersion=15&charset=utf8"
 ###< doctrine/doctrine-bundle ###
 
 ###> nelmio/cors-bundle ###
diff --git a/api/composer.json b/api/composer.json
index 891d29548d..8f3f81f2a9 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -51,6 +51,7 @@
         "webonyx/graphql-php": "15.12.5"
     },
     "require-dev": {
+        "brianium/paratest": "^7.4",
         "friendsofphp/php-cs-fixer": "3.62.0",
         "hautelook/alice-bundle": "2.13.0",
         "justinrainbow/json-schema": "6.0.0",
@@ -114,6 +115,10 @@
             "Composer\\Config::disableProcessTimeout",
             "bin/phpunit -d memory_limit=-1"
         ],
+        "paratest": [
+            "Composer\\Config::disableProcessTimeout",
+            "vendor/bin/paratest --passthru-php=\"-d memory_limit=-1\""
+        ],
         "update-snapshots": [
             "Composer\\Config::disableProcessTimeout",
             "bin/phpunit -d memory_limit=-1 -d --update-snapshots tests/Api/SnapshotTests",
diff --git a/api/composer.lock b/api/composer.lock
index aa59cf66aa..e76fdd2dca 100644
--- a/api/composer.lock
+++ b/api/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": "1ce91f397201ed13fe999c198b6e0cda",
+    "content-hash": "e2a179284549c0d918ceef74f75943c3",
     "packages": [
         {
             "name": "api-platform/core",
@@ -10302,6 +10302,100 @@
             ],
             "time": "2024-04-13T18:00:56+00:00"
         },
+        {
+            "name": "brianium/paratest",
+            "version": "v7.4.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/paratestphp/paratest.git",
+                "reference": "d4de825332842a7dee1ff350f0fd6caafa930d79"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/paratestphp/paratest/zipball/d4de825332842a7dee1ff350f0fd6caafa930d79",
+                "reference": "d4de825332842a7dee1ff350f0fd6caafa930d79",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-pcre": "*",
+                "ext-reflection": "*",
+                "ext-simplexml": "*",
+                "fidry/cpu-core-counter": "^1.1.0",
+                "jean85/pretty-package-versions": "^2.0.6",
+                "php": "~8.2.0 || ~8.3.0",
+                "phpunit/php-code-coverage": "^10.1.14 || ^11.0.3",
+                "phpunit/php-file-iterator": "^4.1.0 || ^5.0.0",
+                "phpunit/php-timer": "^6.0.0 || ^7.0.0",
+                "phpunit/phpunit": "^10.5.20 || ^11.1.3",
+                "sebastian/environment": "^6.1.0 || ^7.1.0",
+                "symfony/console": "^6.4.7 || ^7.1.0",
+                "symfony/process": "^6.4.7 || ^7.1.0"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^12.0.0",
+                "ext-pcov": "*",
+                "ext-posix": "*",
+                "phpstan/phpstan": "^1.11.2",
+                "phpstan/phpstan-deprecation-rules": "^1.2.0",
+                "phpstan/phpstan-phpunit": "^1.4.0",
+                "phpstan/phpstan-strict-rules": "^1.6.0",
+                "squizlabs/php_codesniffer": "^3.10.1",
+                "symfony/filesystem": "^6.4.3 || ^7.1.0"
+            },
+            "bin": [
+                "bin/paratest",
+                "bin/paratest.bat",
+                "bin/paratest_for_phpstorm"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "ParaTest\\": [
+                        "src/"
+                    ]
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Brian Scaturro",
+                    "email": "scaturrob@gmail.com",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Filippo Tessarotto",
+                    "email": "zoeslam@gmail.com",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Parallel testing for PHP",
+            "homepage": "https://github.com/paratestphp/paratest",
+            "keywords": [
+                "concurrent",
+                "parallel",
+                "phpunit",
+                "testing"
+            ],
+            "support": {
+                "issues": "https://github.com/paratestphp/paratest/issues",
+                "source": "https://github.com/paratestphp/paratest/tree/v7.4.5"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sponsors/Slamdunk",
+                    "type": "github"
+                },
+                {
+                    "url": "https://paypal.me/filippotessarotto",
+                    "type": "paypal"
+                }
+            ],
+            "time": "2024-05-31T13:59:20+00:00"
+        },
         {
             "name": "clue/ndjson-react",
             "version": "v1.3.0",
@@ -10368,26 +10462,26 @@
         },
         {
             "name": "composer/pcre",
-            "version": "3.2.0",
+            "version": "3.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/pcre.git",
-                "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90"
+                "reference": "1637e067347a0c40bbb1e3cd786b20dcab556a81"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/pcre/zipball/ea4ab6f9580a4fd221e0418f2c357cdd39102a90",
-                "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90",
+                "url": "https://api.github.com/repos/composer/pcre/zipball/1637e067347a0c40bbb1e3cd786b20dcab556a81",
+                "reference": "1637e067347a0c40bbb1e3cd786b20dcab556a81",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.4 || ^8.0"
             },
             "conflict": {
-                "phpstan/phpstan": "<1.11.8"
+                "phpstan/phpstan": "<1.11.10"
             },
             "require-dev": {
-                "phpstan/phpstan": "^1.11.8",
+                "phpstan/phpstan": "^1.11.10",
                 "phpstan/phpstan-strict-rules": "^1.1",
                 "phpunit/phpunit": "^8 || ^9"
             },
@@ -10427,7 +10521,7 @@
             ],
             "support": {
                 "issues": "https://github.com/composer/pcre/issues",
-                "source": "https://github.com/composer/pcre/tree/3.2.0"
+                "source": "https://github.com/composer/pcre/tree/3.3.0"
             },
             "funding": [
                 {
@@ -10443,7 +10537,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-25T09:36:02+00:00"
+            "time": "2024-08-19T19:43:53+00:00"
         },
         {
             "name": "composer/semver",
diff --git a/api/config/packages/dev/doctrine.yaml b/api/config/packages/dev/doctrine.yaml
new file mode 100644
index 0000000000..ac27353d25
--- /dev/null
+++ b/api/config/packages/dev/doctrine.yaml
@@ -0,0 +1,4 @@
+doctrine:
+  dbal:
+    # "TEST_TOKEN" is typically set by ParaTest
+    dbname_suffix: 'dev'
\ No newline at end of file
diff --git a/api/config/packages/test/doctrine.yaml b/api/config/packages/test/doctrine.yaml
index 2970b76ee4..c4ccb1853e 100644
--- a/api/config/packages/test/doctrine.yaml
+++ b/api/config/packages/test/doctrine.yaml
@@ -1,5 +1,4 @@
 doctrine:
   dbal:
-    url: '%env(resolve:TEST_DATABASE_URL)%'
     # "TEST_TOKEN" is typically set by ParaTest
-    #dbname_suffix: '_test%env(default::TEST_TOKEN)%'
\ No newline at end of file
+    dbname_suffix: 'test%env(default::TEST_TOKEN)%'
\ No newline at end of file

From 6c690b48d523ded0a06274c69f47696ea7cddace Mon Sep 17 00:00:00 2001
From: Manuel Meister <news.manuelsworld@gmail.com>
Date: Sat, 24 Aug 2024 13:45:00 +0200
Subject: [PATCH 132/273] Fix cover.vue lint

---
 pdf/src/campPrint/cover/Cover.vue | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/pdf/src/campPrint/cover/Cover.vue b/pdf/src/campPrint/cover/Cover.vue
index 7f4a350670..0aecf8fc52 100644
--- a/pdf/src/campPrint/cover/Cover.vue
+++ b/pdf/src/campPrint/cover/Cover.vue
@@ -4,8 +4,7 @@
       <Text v-if="config.camp.organizer" class="cover-camp-organizer cover-center">
         {{ config.camp.organizer }}
       </Text>
-      <Text class="cover-camp-title cover-center">
-        {{ config.camp.title }}</Text>
+      <Text class="cover-camp-title cover-center">{{ config.camp.title }}</Text>
       <Text class="cover-camp-motto cover-center">
         {{ config.camp.motto }}
       </Text>

From 6f71b3d9a5ebb69a8bd9f5f2fdfa9631a17b9bd6 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 24 Aug 2024 13:59:49 +0000
Subject: [PATCH 133/273] chore(deps): update dependency node to v22.7.0

---
 .docker-hub/print/Dockerfile                       |  4 ++--
 .github/workflows/continuous-integration.yml       | 14 +++++++-------
 .nvmrc                                             |  2 +-
 .../remove-old-indexes/docker-compose.yml          |  2 +-
 .ops/ecamp3-logging/values.yaml                    |  2 +-
 docker-compose.yml                                 |  8 ++++----
 renovate.json                                      |  2 +-
 7 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/.docker-hub/print/Dockerfile b/.docker-hub/print/Dockerfile
index c310878d89..f818f75d59 100644
--- a/.docker-hub/print/Dockerfile
+++ b/.docker-hub/print/Dockerfile
@@ -1,5 +1,5 @@
 # build stage
-FROM node:22.6.0 AS build-stage
+FROM node:22.7.0 AS build-stage
 ARG SENTRY_AUTH_TOKEN
 ARG SENTRY_ORG
 ARG SENTRY_PRINT_PROJECT
@@ -22,7 +22,7 @@ COPY print .
 RUN npm run build
 
 # production stage
-FROM node:22.6.0 AS production-stage
+FROM node:22.7.0 AS production-stage
 WORKDIR /app
 
 COPY --from=build-stage /app/.output ./.output
diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index 44d417808b..9e2fa2a809 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -105,7 +105,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.6.0'
+          node-version: '22.7.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -134,7 +134,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.6.0'
+          node-version: '22.7.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -163,7 +163,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.6.0'
+          node-version: '22.7.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -195,7 +195,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.6.0'
+          node-version: '22.7.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -303,7 +303,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.6.0'
+          node-version: '22.7.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -346,7 +346,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.6.0'
+          node-version: '22.7.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -385,7 +385,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.6.0'
+          node-version: '22.7.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
diff --git a/.nvmrc b/.nvmrc
index dc5f6a52b1..2062ac7e5f 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-22.6.0
+22.7.0
diff --git a/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml b/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml
index c3576be12c..3d1b576a88 100644
--- a/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml
+++ b/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml
@@ -1,6 +1,6 @@
 services:
   remove-old-indexes:
-    image: node:22.6.0
+    image: node:22.7.0
     volumes:
       - ./src:/src
     command:
diff --git a/.ops/ecamp3-logging/values.yaml b/.ops/ecamp3-logging/values.yaml
index 5c5852b185..4b6a03703f 100644
--- a/.ops/ecamp3-logging/values.yaml
+++ b/.ops/ecamp3-logging/values.yaml
@@ -48,7 +48,7 @@ elasticsearch:
         storage: 10Gi
   removeOldIndexes:
     maxIndexAge: 15
-    image: node:22.6.0
+    image: node:22.7.0
 
 kibana:
   name: kibana
diff --git a/docker-compose.yml b/docker-compose.yml
index fcf404b495..ba48433443 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,6 +1,6 @@
 services:
   frontend:
-    image: node:22.6.0
+    image: node:22.7.0
     container_name: 'ecamp3-frontend'
     ports:
       - '9229:9229' # jest debug
@@ -91,7 +91,7 @@ services:
       - VARNISH_HTTP_PORT=8080
 
   pdf:
-    image: node:22.6.0
+    image: node:22.7.0
     container_name: 'ecamp3-pdf'
     stdin_open: true
     tty: true
@@ -110,7 +110,7 @@ services:
       - CI=${CI}
 
   print:
-    image: node:22.6.0
+    image: node:22.7.0
     container_name: 'ecamp3-print'
     user: ${USER_ID:-1000}
     volumes:
@@ -194,7 +194,7 @@ services:
     working_dir: /e2e
 
   translation:
-    image: node:22.6.0
+    image: node:22.7.0
     profiles: ['translation']
     container_name: 'ecamp3-translation'
     volumes:
diff --git a/renovate.json b/renovate.json
index 65b395696f..719cb34ba2 100644
--- a/renovate.json
+++ b/renovate.json
@@ -5,7 +5,7 @@
     ":prConcurrentLimitNone"
   ],
   "constraints": {
-    "node": "22.6.0",
+    "node": "22.7.0",
     "php": "8.3.10"
   },
   "automergeType": "branch",

From ad6cc1c021ca2cb63daf1decdc9db0d7ebef5fdf Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Sat, 24 Aug 2024 16:40:24 +0200
Subject: [PATCH 134/273] frontend: remove eslint-plugin-import

It seems unused in our configuration,
and i tested it by throwing an error
in the index.js script.
(And our imports don't seem to follow a structure).
When https://github.com/import-js/eslint-plugin-import/issues/2948
is resolved, we can think about adding it again.
Allows https://github.com/ecamp/ecamp3/pull/5155 for the frontend.
---
 frontend/package-lock.json | 763 -------------------------------------
 frontend/package.json      |   1 -
 2 files changed, 764 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 9e3afa9fae..bb603f6be3 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -88,7 +88,6 @@
         "babel-plugin-require-context-hook": "1.0.0",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
-        "eslint-plugin-import": "2.29.1",
         "eslint-plugin-local-rules": "3.0.2",
         "eslint-plugin-n": "17.10.2",
         "eslint-plugin-prettier": "5.2.1",
@@ -4283,13 +4282,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/@types/json5": {
-      "version": "0.0.29",
-      "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
-      "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/@ungap/structured-clone": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
@@ -5146,109 +5138,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/array-includes": {
-      "version": "3.1.8",
-      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
-      "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
-        "es-object-atoms": "^1.0.0",
-        "get-intrinsic": "^1.2.4",
-        "is-string": "^1.0.7"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.findlastindex": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
-      "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0",
-        "es-shim-unscopables": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.flat": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
-      "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "es-shim-unscopables": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/array.prototype.flatmap": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
-      "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "es-shim-unscopables": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/arraybuffer.prototype.slice": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
-      "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-buffer-byte-length": "^1.0.1",
-        "call-bind": "^1.0.5",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.22.3",
-        "es-errors": "^1.2.1",
-        "get-intrinsic": "^1.2.3",
-        "is-array-buffer": "^3.0.4",
-        "is-shared-array-buffer": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/assert": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
@@ -6150,60 +6039,6 @@
         "node": ">=18"
       }
     },
-    "node_modules/data-view-buffer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
-      "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.6",
-        "es-errors": "^1.3.0",
-        "is-data-view": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/data-view-byte-length": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
-      "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "es-errors": "^1.3.0",
-        "is-data-view": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/data-view-byte-offset": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
-      "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.6",
-        "es-errors": "^1.3.0",
-        "is-data-view": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/dayjs": {
       "version": "1.11.13",
       "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
@@ -6614,67 +6449,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/es-abstract": {
-      "version": "1.23.3",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
-      "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-buffer-byte-length": "^1.0.1",
-        "arraybuffer.prototype.slice": "^1.0.3",
-        "available-typed-arrays": "^1.0.7",
-        "call-bind": "^1.0.7",
-        "data-view-buffer": "^1.0.1",
-        "data-view-byte-length": "^1.0.1",
-        "data-view-byte-offset": "^1.0.0",
-        "es-define-property": "^1.0.0",
-        "es-errors": "^1.3.0",
-        "es-object-atoms": "^1.0.0",
-        "es-set-tostringtag": "^2.0.3",
-        "es-to-primitive": "^1.2.1",
-        "function.prototype.name": "^1.1.6",
-        "get-intrinsic": "^1.2.4",
-        "get-symbol-description": "^1.0.2",
-        "globalthis": "^1.0.3",
-        "gopd": "^1.0.1",
-        "has-property-descriptors": "^1.0.2",
-        "has-proto": "^1.0.3",
-        "has-symbols": "^1.0.3",
-        "hasown": "^2.0.2",
-        "internal-slot": "^1.0.7",
-        "is-array-buffer": "^3.0.4",
-        "is-callable": "^1.2.7",
-        "is-data-view": "^1.0.1",
-        "is-negative-zero": "^2.0.3",
-        "is-regex": "^1.1.4",
-        "is-shared-array-buffer": "^1.0.3",
-        "is-string": "^1.0.7",
-        "is-typed-array": "^1.1.13",
-        "is-weakref": "^1.0.2",
-        "object-inspect": "^1.13.1",
-        "object-keys": "^1.1.1",
-        "object.assign": "^4.1.5",
-        "regexp.prototype.flags": "^1.5.2",
-        "safe-array-concat": "^1.1.2",
-        "safe-regex-test": "^1.0.3",
-        "string.prototype.trim": "^1.2.9",
-        "string.prototype.trimend": "^1.0.8",
-        "string.prototype.trimstart": "^1.0.8",
-        "typed-array-buffer": "^1.0.2",
-        "typed-array-byte-length": "^1.0.1",
-        "typed-array-byte-offset": "^1.0.2",
-        "typed-array-length": "^1.0.6",
-        "unbox-primitive": "^1.0.2",
-        "which-typed-array": "^1.1.15"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/es-define-property": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
@@ -6717,62 +6491,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/es-object-atoms": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
-      "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "es-errors": "^1.3.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-set-tostringtag": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
-      "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "get-intrinsic": "^1.2.4",
-        "has-tostringtag": "^1.0.2",
-        "hasown": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/es-shim-unscopables": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
-      "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "hasown": "^2.0.0"
-      }
-    },
-    "node_modules/es-to-primitive": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-callable": "^1.1.4",
-        "is-date-object": "^1.0.1",
-        "is-symbol": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/esbuild": {
       "version": "0.21.5",
       "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
@@ -6930,56 +6648,6 @@
         "eslint": ">=7.0.0"
       }
     },
-    "node_modules/eslint-import-resolver-node": {
-      "version": "0.3.9",
-      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
-      "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "debug": "^3.2.7",
-        "is-core-module": "^2.13.0",
-        "resolve": "^1.22.4"
-      }
-    },
-    "node_modules/eslint-import-resolver-node/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-module-utils": {
-      "version": "2.8.1",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz",
-      "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "debug": "^3.2.7"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependenciesMeta": {
-        "eslint": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/eslint-module-utils/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
     "node_modules/eslint-plugin-es-x": {
       "version": "7.8.0",
       "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz",
@@ -7002,61 +6670,6 @@
         "eslint": ">=8"
       }
     },
-    "node_modules/eslint-plugin-import": {
-      "version": "2.29.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
-      "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-includes": "^3.1.7",
-        "array.prototype.findlastindex": "^1.2.3",
-        "array.prototype.flat": "^1.3.2",
-        "array.prototype.flatmap": "^1.3.2",
-        "debug": "^3.2.7",
-        "doctrine": "^2.1.0",
-        "eslint-import-resolver-node": "^0.3.9",
-        "eslint-module-utils": "^2.8.0",
-        "hasown": "^2.0.0",
-        "is-core-module": "^2.13.1",
-        "is-glob": "^4.0.3",
-        "minimatch": "^3.1.2",
-        "object.fromentries": "^2.0.7",
-        "object.groupby": "^1.0.1",
-        "object.values": "^1.1.7",
-        "semver": "^6.3.1",
-        "tsconfig-paths": "^3.15.0"
-      },
-      "engines": {
-        "node": ">=4"
-      },
-      "peerDependencies": {
-        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/eslint-plugin-import/node_modules/doctrine": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "esutils": "^2.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/eslint-plugin-local-rules": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/eslint-plugin-local-rules/-/eslint-plugin-local-rules-3.0.2.tgz",
@@ -7882,25 +7495,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/function.prototype.name": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
-      "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "define-properties": "^1.2.0",
-        "es-abstract": "^1.22.1",
-        "functions-have-names": "^1.2.3"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/functions-have-names": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
@@ -7976,24 +7570,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/get-symbol-description": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
-      "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.5",
-        "es-errors": "^1.3.0",
-        "get-intrinsic": "^1.2.4"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/get-tsconfig": {
       "version": "4.7.6",
       "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
@@ -8078,23 +7654,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/globalthis": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
-      "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "define-properties": "^1.2.1",
-        "gopd": "^1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/gopd": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
@@ -8613,22 +8172,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-data-view": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
-      "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "is-typed-array": "^1.1.13"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/is-date-object": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
@@ -8735,19 +8278,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-negative-zero": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
-      "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/is-number": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -8916,19 +8446,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/is-weakref": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
-      "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/is-weakset": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
@@ -9883,16 +9400,6 @@
         "node": "*"
       }
     },
-    "node_modules/minimist": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
-      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
-      "dev": true,
-      "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/minipass": {
       "version": "4.2.8",
       "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz",
@@ -10164,58 +9671,6 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/object.fromentries": {
-      "version": "2.0.8",
-      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
-      "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/object.groupby": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
-      "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/object.values": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
-      "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/once": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -11390,25 +10845,6 @@
         "node": ">=4.0.0"
       }
     },
-    "node_modules/safe-array-concat": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
-      "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "get-intrinsic": "^1.2.4",
-        "has-symbols": "^1.0.3",
-        "isarray": "^2.0.5"
-      },
-      "engines": {
-        "node": ">=0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/safe-buffer": {
       "version": "5.2.1",
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -11429,24 +10865,6 @@
       ],
       "license": "MIT"
     },
-    "node_modules/safe-regex-test": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
-      "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.6",
-        "es-errors": "^1.3.0",
-        "is-regex": "^1.1.4"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/safer-buffer": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -11806,58 +11224,6 @@
         "url": "https://github.com/chalk/strip-ansi?sponsor=1"
       }
     },
-    "node_modules/string.prototype.trim": {
-      "version": "1.2.9",
-      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
-      "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.0",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimend": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
-      "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimstart": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
-      "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/strip-ansi": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -11885,16 +11251,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/strip-final-newline": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
@@ -12267,32 +11623,6 @@
         "node": ">=18"
       }
     },
-    "node_modules/tsconfig-paths": {
-      "version": "3.15.0",
-      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
-      "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/json5": "^0.0.29",
-        "json5": "^1.0.2",
-        "minimist": "^1.2.6",
-        "strip-bom": "^3.0.0"
-      }
-    },
-    "node_modules/tsconfig-paths/node_modules/json5": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "minimist": "^1.2.0"
-      },
-      "bin": {
-        "json5": "lib/cli.js"
-      }
-    },
     "node_modules/tslib": {
       "version": "2.6.3",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
@@ -12325,83 +11655,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/typed-array-buffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
-      "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "es-errors": "^1.3.0",
-        "is-typed-array": "^1.1.13"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/typed-array-byte-length": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
-      "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "has-proto": "^1.0.3",
-        "is-typed-array": "^1.1.13"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/typed-array-byte-offset": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
-      "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "available-typed-arrays": "^1.0.7",
-        "call-bind": "^1.0.7",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "has-proto": "^1.0.3",
-        "is-typed-array": "^1.1.13"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/typed-array-length": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
-      "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "has-proto": "^1.0.3",
-        "is-typed-array": "^1.1.13",
-        "possible-typed-array-names": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/uc.micro": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
@@ -12415,22 +11668,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/unbox-primitive": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
-      "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.2",
-        "has-bigints": "^1.0.2",
-        "has-symbols": "^1.0.3",
-        "which-boxed-primitive": "^1.0.2"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/undici": {
       "version": "6.19.7",
       "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.7.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 956b27b04b..1c7ebb0f7c 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -100,7 +100,6 @@
     "babel-plugin-require-context-hook": "1.0.0",
     "eslint": "8.57.0",
     "eslint-config-prettier": "9.1.0",
-    "eslint-plugin-import": "2.29.1",
     "eslint-plugin-local-rules": "3.0.2",
     "eslint-plugin-n": "17.10.2",
     "eslint-plugin-prettier": "5.2.1",

From e4a03c8101d2489f3ac29c9075dc3d0e08ff0e1d Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Sat, 24 Aug 2024 16:42:36 +0200
Subject: [PATCH 135/273] aws-setup: remove eslint-plugin-import

It seems unused in our configuration.
When https://github.com/import-js/eslint-plugin-import/issues/2948
is resolved, we can think about adding it again.
Allows https://github.com/ecamp/ecamp3/pull/5155 for aws-setup.
---
 .ops/aws-setup/package-lock.json | 1169 +-----------------------------
 .ops/aws-setup/package.json      |    1 -
 2 files changed, 29 insertions(+), 1141 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index ed73d69f69..83865d792a 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -18,7 +18,6 @@
                 "@types/node": "20.16.1",
                 "eslint": "8.57.0",
                 "eslint-config-prettier": "9.1.0",
-                "eslint-plugin-import": "2.29.1",
                 "eslint-plugin-n": "17.10.2",
                 "eslint-plugin-prettier": "5.2.1",
                 "eslint-plugin-promise": "7.1.0",
@@ -2902,13 +2901,6 @@
             "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==",
             "license": "MIT"
         },
-        "node_modules/@types/json5": {
-            "version": "0.0.29",
-            "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
-            "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
-            "dev": true,
-            "license": "MIT"
-        },
         "node_modules/@types/keyv": {
             "version": "3.1.4",
             "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz",
@@ -3075,126 +3067,6 @@
                 "sprintf-js": "~1.0.2"
             }
         },
-        "node_modules/array-buffer-byte-length": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
-            "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.5",
-                "is-array-buffer": "^3.0.4"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/array-includes": {
-            "version": "3.1.8",
-            "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
-            "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.7",
-                "define-properties": "^1.2.1",
-                "es-abstract": "^1.23.2",
-                "es-object-atoms": "^1.0.0",
-                "get-intrinsic": "^1.2.4",
-                "is-string": "^1.0.7"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/array.prototype.findlastindex": {
-            "version": "1.2.5",
-            "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
-            "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.7",
-                "define-properties": "^1.2.1",
-                "es-abstract": "^1.23.2",
-                "es-errors": "^1.3.0",
-                "es-object-atoms": "^1.0.0",
-                "es-shim-unscopables": "^1.0.2"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/array.prototype.flat": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
-            "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.2",
-                "define-properties": "^1.2.0",
-                "es-abstract": "^1.22.1",
-                "es-shim-unscopables": "^1.0.0"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/array.prototype.flatmap": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
-            "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.2",
-                "define-properties": "^1.2.0",
-                "es-abstract": "^1.22.1",
-                "es-shim-unscopables": "^1.0.0"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/arraybuffer.prototype.slice": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
-            "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "array-buffer-byte-length": "^1.0.1",
-                "call-bind": "^1.0.5",
-                "define-properties": "^1.2.1",
-                "es-abstract": "^1.22.3",
-                "es-errors": "^1.2.1",
-                "get-intrinsic": "^1.2.3",
-                "is-array-buffer": "^3.0.4",
-                "is-shared-array-buffer": "^1.0.2"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/available-typed-arrays": {
             "version": "1.0.7",
             "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
@@ -3711,60 +3583,6 @@
                 "node": ">=4"
             }
         },
-        "node_modules/data-view-buffer": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
-            "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.6",
-                "es-errors": "^1.3.0",
-                "is-data-view": "^1.0.1"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/data-view-byte-length": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
-            "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.7",
-                "es-errors": "^1.3.0",
-                "is-data-view": "^1.0.1"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/data-view-byte-offset": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
-            "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.6",
-                "es-errors": "^1.3.0",
-                "is-data-view": "^1.0.1"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/debug": {
             "version": "4.3.6",
             "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
@@ -3842,24 +3660,6 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "node_modules/define-properties": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
-            "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "define-data-property": "^1.0.1",
-                "has-property-descriptors": "^1.0.0",
-                "object-keys": "^1.1.1"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/docker-classic": {
             "name": "@pulumi/docker",
             "version": "3.6.1",
@@ -3962,67 +3762,6 @@
             "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
             "license": "MIT"
         },
-        "node_modules/es-abstract": {
-            "version": "1.23.3",
-            "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
-            "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "array-buffer-byte-length": "^1.0.1",
-                "arraybuffer.prototype.slice": "^1.0.3",
-                "available-typed-arrays": "^1.0.7",
-                "call-bind": "^1.0.7",
-                "data-view-buffer": "^1.0.1",
-                "data-view-byte-length": "^1.0.1",
-                "data-view-byte-offset": "^1.0.0",
-                "es-define-property": "^1.0.0",
-                "es-errors": "^1.3.0",
-                "es-object-atoms": "^1.0.0",
-                "es-set-tostringtag": "^2.0.3",
-                "es-to-primitive": "^1.2.1",
-                "function.prototype.name": "^1.1.6",
-                "get-intrinsic": "^1.2.4",
-                "get-symbol-description": "^1.0.2",
-                "globalthis": "^1.0.3",
-                "gopd": "^1.0.1",
-                "has-property-descriptors": "^1.0.2",
-                "has-proto": "^1.0.3",
-                "has-symbols": "^1.0.3",
-                "hasown": "^2.0.2",
-                "internal-slot": "^1.0.7",
-                "is-array-buffer": "^3.0.4",
-                "is-callable": "^1.2.7",
-                "is-data-view": "^1.0.1",
-                "is-negative-zero": "^2.0.3",
-                "is-regex": "^1.1.4",
-                "is-shared-array-buffer": "^1.0.3",
-                "is-string": "^1.0.7",
-                "is-typed-array": "^1.1.13",
-                "is-weakref": "^1.0.2",
-                "object-inspect": "^1.13.1",
-                "object-keys": "^1.1.1",
-                "object.assign": "^4.1.5",
-                "regexp.prototype.flags": "^1.5.2",
-                "safe-array-concat": "^1.1.2",
-                "safe-regex-test": "^1.0.3",
-                "string.prototype.trim": "^1.2.9",
-                "string.prototype.trimend": "^1.0.8",
-                "string.prototype.trimstart": "^1.0.8",
-                "typed-array-buffer": "^1.0.2",
-                "typed-array-byte-length": "^1.0.1",
-                "typed-array-byte-offset": "^1.0.2",
-                "typed-array-length": "^1.0.6",
-                "unbox-primitive": "^1.0.2",
-                "which-typed-array": "^1.1.15"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/es-define-property": {
             "version": "1.0.0",
             "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
@@ -4044,62 +3783,6 @@
                 "node": ">= 0.4"
             }
         },
-        "node_modules/es-object-atoms": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
-            "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "es-errors": "^1.3.0"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            }
-        },
-        "node_modules/es-set-tostringtag": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
-            "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "get-intrinsic": "^1.2.4",
-                "has-tostringtag": "^1.0.2",
-                "hasown": "^2.0.1"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            }
-        },
-        "node_modules/es-shim-unscopables": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
-            "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "hasown": "^2.0.0"
-            }
-        },
-        "node_modules/es-to-primitive": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
-            "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "is-callable": "^1.1.4",
-                "is-date-object": "^1.0.1",
-                "is-symbol": "^1.0.2"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/escalade": {
             "version": "3.1.2",
             "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
@@ -4218,56 +3901,6 @@
                 "eslint": ">=7.0.0"
             }
         },
-        "node_modules/eslint-import-resolver-node": {
-            "version": "0.3.9",
-            "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
-            "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "debug": "^3.2.7",
-                "is-core-module": "^2.13.0",
-                "resolve": "^1.22.4"
-            }
-        },
-        "node_modules/eslint-import-resolver-node/node_modules/debug": {
-            "version": "3.2.7",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-            "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "ms": "^2.1.1"
-            }
-        },
-        "node_modules/eslint-module-utils": {
-            "version": "2.8.1",
-            "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz",
-            "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "debug": "^3.2.7"
-            },
-            "engines": {
-                "node": ">=4"
-            },
-            "peerDependenciesMeta": {
-                "eslint": {
-                    "optional": true
-                }
-            }
-        },
-        "node_modules/eslint-module-utils/node_modules/debug": {
-            "version": "3.2.7",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-            "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "ms": "^2.1.1"
-            }
-        },
         "node_modules/eslint-plugin-es-x": {
             "version": "7.8.0",
             "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz",
@@ -4290,85 +3923,6 @@
                 "eslint": ">=8"
             }
         },
-        "node_modules/eslint-plugin-import": {
-            "version": "2.29.1",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz",
-            "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "array-includes": "^3.1.7",
-                "array.prototype.findlastindex": "^1.2.3",
-                "array.prototype.flat": "^1.3.2",
-                "array.prototype.flatmap": "^1.3.2",
-                "debug": "^3.2.7",
-                "doctrine": "^2.1.0",
-                "eslint-import-resolver-node": "^0.3.9",
-                "eslint-module-utils": "^2.8.0",
-                "hasown": "^2.0.0",
-                "is-core-module": "^2.13.1",
-                "is-glob": "^4.0.3",
-                "minimatch": "^3.1.2",
-                "object.fromentries": "^2.0.7",
-                "object.groupby": "^1.0.1",
-                "object.values": "^1.1.7",
-                "semver": "^6.3.1",
-                "tsconfig-paths": "^3.15.0"
-            },
-            "engines": {
-                "node": ">=4"
-            },
-            "peerDependencies": {
-                "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
-            }
-        },
-        "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
-            "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "balanced-match": "^1.0.0",
-                "concat-map": "0.0.1"
-            }
-        },
-        "node_modules/eslint-plugin-import/node_modules/debug": {
-            "version": "3.2.7",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-            "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "ms": "^2.1.1"
-            }
-        },
-        "node_modules/eslint-plugin-import/node_modules/doctrine": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
-            "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
-            "dev": true,
-            "license": "Apache-2.0",
-            "dependencies": {
-                "esutils": "^2.0.2"
-            },
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
-        "node_modules/eslint-plugin-import/node_modules/minimatch": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-            "dev": true,
-            "license": "ISC",
-            "dependencies": {
-                "brace-expansion": "^1.1.7"
-            },
-            "engines": {
-                "node": "*"
-            }
-        },
         "node_modules/eslint-plugin-n": {
             "version": "17.10.2",
             "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.2.tgz",
@@ -5041,35 +4595,6 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "node_modules/function.prototype.name": {
-            "version": "1.1.6",
-            "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
-            "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.2",
-                "define-properties": "^1.2.0",
-                "es-abstract": "^1.22.1",
-                "functions-have-names": "^1.2.3"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/functions-have-names": {
-            "version": "1.2.3",
-            "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
-            "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
-            "dev": true,
-            "license": "MIT",
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/gensync": {
             "version": "1.0.0-beta.2",
             "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -5121,24 +4646,6 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/get-symbol-description": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
-            "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.5",
-                "es-errors": "^1.3.0",
-                "get-intrinsic": "^1.2.4"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/get-tsconfig": {
             "version": "4.7.6",
             "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
@@ -5198,23 +4705,6 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/globalthis": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
-            "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "define-properties": "^1.2.1",
-                "gopd": "^1.0.1"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/google-protobuf": {
             "version": "3.21.4",
             "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.4.tgz",
@@ -5271,16 +4761,6 @@
             "dev": true,
             "license": "MIT"
         },
-        "node_modules/has-bigints": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
-            "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
-            "dev": true,
-            "license": "MIT",
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/has-flag": {
             "version": "3.0.0",
             "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@@ -5542,21 +5022,6 @@
                 "node": ">=10"
             }
         },
-        "node_modules/internal-slot": {
-            "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
-            "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "es-errors": "^1.3.0",
-                "hasown": "^2.0.0",
-                "side-channel": "^1.0.4"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            }
-        },
         "node_modules/ip-address": {
             "version": "9.0.5",
             "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
@@ -5592,53 +5057,6 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "node_modules/is-array-buffer": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
-            "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.2",
-                "get-intrinsic": "^1.2.1"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/is-bigint": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
-            "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "has-bigints": "^1.0.1"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/is-boolean-object": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
-            "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.2",
-                "has-tostringtag": "^1.0.0"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/is-callable": {
             "version": "1.2.7",
             "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
@@ -5666,38 +5084,6 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "node_modules/is-data-view": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
-            "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "is-typed-array": "^1.1.13"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/is-date-object": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
-            "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "has-tostringtag": "^1.0.0"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/is-extglob": {
             "version": "2.1.1",
             "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -5751,35 +5137,6 @@
             "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
             "license": "MIT"
         },
-        "node_modules/is-negative-zero": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
-            "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/is-number-object": {
-            "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
-            "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "has-tostringtag": "^1.0.0"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/is-path-inside": {
             "version": "3.0.3",
             "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
@@ -5790,39 +5147,6 @@
                 "node": ">=8"
             }
         },
-        "node_modules/is-regex": {
-            "version": "1.1.4",
-            "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
-            "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.2",
-                "has-tostringtag": "^1.0.0"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/is-shared-array-buffer": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
-            "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.7"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/is-stream": {
             "version": "2.0.1",
             "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
@@ -5835,38 +5159,6 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/is-string": {
-            "version": "1.0.7",
-            "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
-            "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "has-tostringtag": "^1.0.0"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/is-symbol": {
-            "version": "1.0.4",
-            "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
-            "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "has-symbols": "^1.0.2"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/is-typed-array": {
             "version": "1.1.13",
             "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
@@ -5882,19 +5174,6 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "node_modules/is-weakref": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
-            "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.2"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/isarray": {
             "version": "1.0.0",
             "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -6601,144 +5880,50 @@
                 "semver": "^7.3.5"
             },
             "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm-pick-manifest/node_modules/semver": {
-            "version": "7.6.3",
-            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-            "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
-            "license": "ISC",
-            "bin": {
-                "semver": "bin/semver.js"
-            },
-            "engines": {
-                "node": ">=10"
-            }
-        },
-        "node_modules/npm-registry-fetch": {
-            "version": "17.1.0",
-            "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz",
-            "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==",
-            "license": "ISC",
-            "dependencies": {
-                "@npmcli/redact": "^2.0.0",
-                "jsonparse": "^1.3.1",
-                "make-fetch-happen": "^13.0.0",
-                "minipass": "^7.0.2",
-                "minipass-fetch": "^3.0.0",
-                "minizlib": "^2.1.2",
-                "npm-package-arg": "^11.0.0",
-                "proc-log": "^4.0.0"
-            },
-            "engines": {
-                "node": "^16.14.0 || >=18.0.0"
-            }
-        },
-        "node_modules/npm-run-path": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
-            "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
-            "license": "MIT",
-            "dependencies": {
-                "path-key": "^3.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
-        "node_modules/object-inspect": {
-            "version": "1.13.2",
-            "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
-            "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/object-keys": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-            "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">= 0.4"
-            }
-        },
-        "node_modules/object.assign": {
-            "version": "4.1.5",
-            "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
-            "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.5",
-                "define-properties": "^1.2.1",
-                "has-symbols": "^1.0.3",
-                "object-keys": "^1.1.1"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/object.fromentries": {
-            "version": "2.0.8",
-            "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
-            "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.7",
-                "define-properties": "^1.2.1",
-                "es-abstract": "^1.23.2",
-                "es-object-atoms": "^1.0.0"
+        "node_modules/npm-pick-manifest/node_modules/semver": {
+            "version": "7.6.3",
+            "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+            "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+            "license": "ISC",
+            "bin": {
+                "semver": "bin/semver.js"
             },
             "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
+                "node": ">=10"
             }
         },
-        "node_modules/object.groupby": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
-            "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
-            "dev": true,
-            "license": "MIT",
+        "node_modules/npm-registry-fetch": {
+            "version": "17.1.0",
+            "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz",
+            "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==",
+            "license": "ISC",
             "dependencies": {
-                "call-bind": "^1.0.7",
-                "define-properties": "^1.2.1",
-                "es-abstract": "^1.23.2"
+                "@npmcli/redact": "^2.0.0",
+                "jsonparse": "^1.3.1",
+                "make-fetch-happen": "^13.0.0",
+                "minipass": "^7.0.2",
+                "minipass-fetch": "^3.0.0",
+                "minizlib": "^2.1.2",
+                "npm-package-arg": "^11.0.0",
+                "proc-log": "^4.0.0"
             },
             "engines": {
-                "node": ">= 0.4"
+                "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/object.values": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
-            "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
-            "dev": true,
+        "node_modules/npm-run-path": {
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+            "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
             "license": "MIT",
             "dependencies": {
-                "call-bind": "^1.0.7",
-                "define-properties": "^1.2.1",
-                "es-object-atoms": "^1.0.0"
+                "path-key": "^3.0.0"
             },
             "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
+                "node": ">=8"
             }
         },
         "node_modules/once": {
@@ -7301,25 +6486,6 @@
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/regexp.prototype.flags": {
-            "version": "1.5.2",
-            "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
-            "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.6",
-                "define-properties": "^1.2.1",
-                "es-errors": "^1.3.0",
-                "set-function-name": "^2.0.1"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/require-directory": {
             "version": "2.1.1",
             "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -7514,50 +6680,6 @@
                 "queue-microtask": "^1.2.2"
             }
         },
-        "node_modules/safe-array-concat": {
-            "version": "1.1.2",
-            "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
-            "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.7",
-                "get-intrinsic": "^1.2.4",
-                "has-symbols": "^1.0.3",
-                "isarray": "^2.0.5"
-            },
-            "engines": {
-                "node": ">=0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/safe-array-concat/node_modules/isarray": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
-            "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
-            "dev": true,
-            "license": "MIT"
-        },
-        "node_modules/safe-regex-test": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
-            "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.6",
-                "es-errors": "^1.3.0",
-                "is-regex": "^1.1.4"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/safer-buffer": {
             "version": "2.1.2",
             "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -7598,22 +6720,6 @@
                 "node": ">= 0.4"
             }
         },
-        "node_modules/set-function-name": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
-            "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "define-data-property": "^1.1.4",
-                "es-errors": "^1.3.0",
-                "functions-have-names": "^1.2.3",
-                "has-property-descriptors": "^1.0.2"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            }
-        },
         "node_modules/shebang-command": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -7641,25 +6747,6 @@
             "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==",
             "license": "BSD-2-Clause"
         },
-        "node_modules/side-channel": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
-            "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.7",
-                "es-errors": "^1.3.0",
-                "get-intrinsic": "^1.2.4",
-                "object-inspect": "^1.13.1"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/signal-exit": {
             "version": "3.0.7",
             "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
@@ -7855,58 +6942,6 @@
                 "url": "https://github.com/chalk/strip-ansi?sponsor=1"
             }
         },
-        "node_modules/string.prototype.trim": {
-            "version": "1.2.9",
-            "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
-            "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.7",
-                "define-properties": "^1.2.1",
-                "es-abstract": "^1.23.0",
-                "es-object-atoms": "^1.0.0"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/string.prototype.trimend": {
-            "version": "1.0.8",
-            "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
-            "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.7",
-                "define-properties": "^1.2.1",
-                "es-object-atoms": "^1.0.0"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/string.prototype.trimstart": {
-            "version": "1.0.8",
-            "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
-            "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.7",
-                "define-properties": "^1.2.1",
-                "es-object-atoms": "^1.0.0"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/strip-ansi": {
             "version": "6.0.1",
             "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
@@ -7932,16 +6967,6 @@
                 "node": ">=8"
             }
         },
-        "node_modules/strip-bom": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-            "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=4"
-            }
-        },
         "node_modules/strip-final-newline": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
@@ -8115,32 +7140,6 @@
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/tsconfig-paths": {
-            "version": "3.15.0",
-            "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
-            "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "@types/json5": "^0.0.29",
-                "json5": "^1.0.2",
-                "minimist": "^1.2.6",
-                "strip-bom": "^3.0.0"
-            }
-        },
-        "node_modules/tsconfig-paths/node_modules/json5": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-            "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "minimist": "^1.2.0"
-            },
-            "bin": {
-                "json5": "lib/cli.js"
-            }
-        },
         "node_modules/tslib": {
             "version": "2.6.3",
             "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
@@ -8187,99 +7186,6 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/typed-array-buffer": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
-            "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.7",
-                "es-errors": "^1.3.0",
-                "is-typed-array": "^1.1.13"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            }
-        },
-        "node_modules/typed-array-byte-length": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
-            "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.7",
-                "for-each": "^0.3.3",
-                "gopd": "^1.0.1",
-                "has-proto": "^1.0.3",
-                "is-typed-array": "^1.1.13"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/typed-array-byte-offset": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
-            "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "available-typed-arrays": "^1.0.7",
-                "call-bind": "^1.0.7",
-                "for-each": "^0.3.3",
-                "gopd": "^1.0.1",
-                "has-proto": "^1.0.3",
-                "is-typed-array": "^1.1.13"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/typed-array-length": {
-            "version": "1.0.6",
-            "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
-            "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.7",
-                "for-each": "^0.3.3",
-                "gopd": "^1.0.1",
-                "has-proto": "^1.0.3",
-                "is-typed-array": "^1.1.13",
-                "possible-typed-array-names": "^1.0.0"
-            },
-            "engines": {
-                "node": ">= 0.4"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
-        "node_modules/unbox-primitive": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
-            "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "call-bind": "^1.0.2",
-                "has-bigints": "^1.0.2",
-                "has-symbols": "^1.0.3",
-                "which-boxed-primitive": "^1.0.2"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/undici-types": {
             "version": "6.19.6",
             "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.6.tgz",
@@ -8450,23 +7356,6 @@
                 "node": "^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/which-boxed-primitive": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
-            "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "is-bigint": "^1.0.1",
-                "is-boolean-object": "^1.1.0",
-                "is-number-object": "^1.0.4",
-                "is-string": "^1.0.5",
-                "is-symbol": "^1.0.3"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/which-typed-array": {
             "version": "1.1.15",
             "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 1478270348..f1d0bbad67 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -22,7 +22,6 @@
         "@types/node": "20.16.1",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
-        "eslint-plugin-import": "2.29.1",
         "eslint-plugin-n": "17.10.2",
         "eslint-plugin-prettier": "5.2.1",
         "eslint-plugin-promise": "7.1.0",

From a26f3fa9adc3b91ed04141b5f5ffe89ac008370d Mon Sep 17 00:00:00 2001
From: Manuel Meister <news.manuelsworld@gmail.com>
Date: Sun, 25 Aug 2024 00:31:29 +0200
Subject: [PATCH 136/273] Use title instead of name in CampCreate

---
 frontend/src/components/campCreate/CampCreate.vue      | 2 +-
 frontend/src/components/campCreate/CampCreateStep2.vue | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/frontend/src/components/campCreate/CampCreate.vue b/frontend/src/components/campCreate/CampCreate.vue
index 64ca7ba151..0337dbcf21 100644
--- a/frontend/src/components/campCreate/CampCreate.vue
+++ b/frontend/src/components/campCreate/CampCreate.vue
@@ -43,8 +43,8 @@ export default {
     return {
       step: 1,
       camp: {
-        name: '',
         title: '',
+        organizer: '',
         motto: '',
         periods: [
           {
diff --git a/frontend/src/components/campCreate/CampCreateStep2.vue b/frontend/src/components/campCreate/CampCreateStep2.vue
index faf239976c..8f8a7594b3 100644
--- a/frontend/src/components/campCreate/CampCreateStep2.vue
+++ b/frontend/src/components/campCreate/CampCreateStep2.vue
@@ -175,7 +175,7 @@ export default {
         .camps({ isPrototype: true })
         .items.map((ct) => ({
           value: ct._meta.self,
-          text: this.$tc(ct.name),
+          text: this.$tc(ct.title),
           object: ct,
         }))
     },

From 6642e98be8ca8a14a8f448e999ac5e249a8c1be5 Mon Sep 17 00:00:00 2001
From: Manuel Meister <news.manuelsworld@gmail.com>
Date: Sun, 25 Aug 2024 00:35:01 +0200
Subject: [PATCH 137/273] Fix german grammar/spelling mistakes

---
 common/helpers/campShortTitle.js | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/common/helpers/campShortTitle.js b/common/helpers/campShortTitle.js
index 605674fc70..7ec667ee6a 100644
--- a/common/helpers/campShortTitle.js
+++ b/common/helpers/campShortTitle.js
@@ -10,7 +10,7 @@ const ADDITIONAL_SHORTNERS = [
   { regex: /Abteilungslager/gi, text: 'AbLa' },
   { regex: /Klassenlager/gi, text: 'KlaLa' },
   {
-    regex: /(Bez)irks(So|Ab|Au|Auf|He|Pfi)La|(Ka)ntonslager|(Bu)ndeslager/gi,
+    regex: /(Bez)irks?(So|Ab|Au|Auf|He|Pfi)La|(Ka)ntonslager|(Bu)ndeslager/gi,
     text: '$1$2$3$4La',
   },
   {
@@ -19,10 +19,10 @@ const ADDITIONAL_SHORTNERS = [
     text: '$<start>$<camp>$<year>$<middle>$<end>',
   },
   { regex: /(Pfadi|Pio|Rover)stufe(?!n)/g, text: '$1s' },
-  { regex: /(B)ieberstufe(?!n)/g, text: '$1ieberli' },
+  { regex: /(B)ie?berstufe(?!n)/g, text: '$1iberli' },
   { regex: /(W)olfs?stufe(?!n)/g, text: '$1ölfli' },
   {
-    regex: /(Bieber|Wolfs|Pfadi|Pio|Rover)stufen(So|Ab|Au|Auf|He|Pfi)La/gi,
+    regex: /(Bie?ber|Wolfs?|Pfadi|Pio|Rover)stufen(So|Ab|Au|Auf|He|Pfi)La/gi,
     text: '$1$2La',
   },
   { regex: /\bund\b/g, text: '&' },

From 54f5b46ff9b92f15b443aeab40ddbf7c249b095c Mon Sep 17 00:00:00 2001
From: Manuel Meister <news.manuelsworld@gmail.com>
Date: Sun, 25 Aug 2024 00:38:45 +0200
Subject: [PATCH 138/273] Remove commented line to reduce the length of the
 shortTitle

---
 api/migrations/schema/Version20240817112552.php | 1 -
 1 file changed, 1 deletion(-)

diff --git a/api/migrations/schema/Version20240817112552.php b/api/migrations/schema/Version20240817112552.php
index 591c0e1c84..48661f82b3 100644
--- a/api/migrations/schema/Version20240817112552.php
+++ b/api/migrations/schema/Version20240817112552.php
@@ -20,7 +20,6 @@ public function up(Schema $schema): void {
         $this->addSql('ALTER TABLE camp ALTER shortTitle DROP NOT NULL, ALTER shortTitle TYPE TEXT');
         $this->addSql('UPDATE camp SET shortTitle = null WHERE shortTitle = title');
         $this->addSql('UPDATE camp SET shortTitle = title, title = shortTitle WHERE char_length(shortTitle) > 16 AND char_length(title) < char_length(shortTitle);');
-        // $this->addSql('UPDATE camp SET shortTitle = left(shortTitle, 16) WHERE char_length(shortTitle) > 16;');
     }
 
     public function down(Schema $schema): void {

From 080c79ec6187e08d7fece47102fc49e70cf8a514 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 25 Aug 2024 10:37:53 +0000
Subject: [PATCH 139/273] chore(deps): update dependency @nuxtjs/i18n to v8.5.1

---
 print/package-lock.json | 8 ++++----
 print/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index d85b376d75..bdc1363738 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -26,7 +26,7 @@
         "@eslint/js": "9.9.1",
         "@nuxt/eslint-config": "0.5.2",
         "@nuxtjs/eslint-module": "4.1.0",
-        "@nuxtjs/i18n": "8.5.0",
+        "@nuxtjs/i18n": "8.5.1",
         "@nuxtjs/tailwindcss": "6.12.1",
         "@tailwindcss/typography": "0.5.14",
         "@typescript-eslint/eslint-plugin": "8.2.0",
@@ -2234,9 +2234,9 @@
       }
     },
     "node_modules/@nuxtjs/i18n": {
-      "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.5.0.tgz",
-      "integrity": "sha512-FMdVUzsbTWu3FOCQsUt5aDyc6ffPAowo1MfPmuFwDIgqWgzMnayDEaQM2c2D1Hyn1pjYYI46IVsJ9+aJqp+SHQ==",
+      "version": "8.5.1",
+      "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.5.1.tgz",
+      "integrity": "sha512-rU+cGwX1lr5Jyd8lS1ulyTf0adGk6Q+G308Ig0SCrOTV07rHClkoUMpqAAo1Lc85C3Bgea2bFmseLYSfnVMm1A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/print/package.json b/print/package.json
index 4c03ac2338..d8863c8bd1 100644
--- a/print/package.json
+++ b/print/package.json
@@ -35,7 +35,7 @@
     "@eslint/js": "9.9.1",
     "@nuxt/eslint-config": "0.5.2",
     "@nuxtjs/eslint-module": "4.1.0",
-    "@nuxtjs/i18n": "8.5.0",
+    "@nuxtjs/i18n": "8.5.1",
     "@nuxtjs/tailwindcss": "6.12.1",
     "@tailwindcss/typography": "0.5.14",
     "@typescript-eslint/eslint-plugin": "8.2.0",

From 637df2620eee9b132ae137094fb23d5e2a7eb547 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 25 Aug 2024 12:20:55 +0000
Subject: [PATCH 140/273] chore(deps): update dependency jsdom to v24.1.3

---
 frontend/package-lock.json | 8 ++++----
 frontend/package.json      | 2 +-
 pdf/package-lock.json      | 8 ++++----
 pdf/package.json           | 2 +-
 print/package-lock.json    | 8 ++++----
 print/package.json         | 2 +-
 6 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 9e3afa9fae..a41eed07bd 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -98,7 +98,7 @@
         "flush-promises": "1.0.2",
         "globals": "15.9.0",
         "jest-serializer-vue-tjw": "3.20.0",
-        "jsdom": "24.1.1",
+        "jsdom": "24.1.3",
         "lint-staged": "15.2.9",
         "prettier": "3.3.3",
         "sass": "1.32.13",
@@ -9209,9 +9209,9 @@
       }
     },
     "node_modules/jsdom": {
-      "version": "24.1.1",
-      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.1.tgz",
-      "integrity": "sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==",
+      "version": "24.1.3",
+      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.3.tgz",
+      "integrity": "sha512-MyL55p3Ut3cXbeBEG7Hcv0mVM8pp8PBNWxRqchZnSfAiES1v1mRnMeFfaHWIPULpwsYfvO+ZmMZz5tGCnjzDUQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/frontend/package.json b/frontend/package.json
index 956b27b04b..cc65fbfb88 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -110,7 +110,7 @@
     "flush-promises": "1.0.2",
     "globals": "15.9.0",
     "jest-serializer-vue-tjw": "3.20.0",
-    "jsdom": "24.1.1",
+    "jsdom": "24.1.3",
     "lint-staged": "15.2.9",
     "prettier": "3.3.3",
     "sass": "1.32.13",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index a6a5980fb3..56592f7a48 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -33,7 +33,7 @@
         "eslint-plugin-local-rules": "3.0.2",
         "eslint-plugin-vue": "9.27.0",
         "globals": "15.9.0",
-        "jsdom": "24.1.1",
+        "jsdom": "24.1.3",
         "prettier": "3.3.3",
         "url-template": "3.1.1",
         "vite": "5.4.2",
@@ -5988,9 +5988,9 @@
       }
     },
     "node_modules/jsdom": {
-      "version": "24.1.1",
-      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.1.tgz",
-      "integrity": "sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==",
+      "version": "24.1.3",
+      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.3.tgz",
+      "integrity": "sha512-MyL55p3Ut3cXbeBEG7Hcv0mVM8pp8PBNWxRqchZnSfAiES1v1mRnMeFfaHWIPULpwsYfvO+ZmMZz5tGCnjzDUQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/pdf/package.json b/pdf/package.json
index ebca6da40c..5bd1826611 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -53,7 +53,7 @@
     "eslint-plugin-local-rules": "3.0.2",
     "eslint-plugin-vue": "9.27.0",
     "globals": "15.9.0",
-    "jsdom": "24.1.1",
+    "jsdom": "24.1.3",
     "prettier": "3.3.3",
     "url-template": "3.1.1",
     "vite": "5.4.2",
diff --git a/print/package-lock.json b/print/package-lock.json
index bdc1363738..d85b376d75 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -26,7 +26,7 @@
         "@eslint/js": "9.9.1",
         "@nuxt/eslint-config": "0.5.2",
         "@nuxtjs/eslint-module": "4.1.0",
-        "@nuxtjs/i18n": "8.5.1",
+        "@nuxtjs/i18n": "8.5.0",
         "@nuxtjs/tailwindcss": "6.12.1",
         "@tailwindcss/typography": "0.5.14",
         "@typescript-eslint/eslint-plugin": "8.2.0",
@@ -2234,9 +2234,9 @@
       }
     },
     "node_modules/@nuxtjs/i18n": {
-      "version": "8.5.1",
-      "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.5.1.tgz",
-      "integrity": "sha512-rU+cGwX1lr5Jyd8lS1ulyTf0adGk6Q+G308Ig0SCrOTV07rHClkoUMpqAAo1Lc85C3Bgea2bFmseLYSfnVMm1A==",
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.5.0.tgz",
+      "integrity": "sha512-FMdVUzsbTWu3FOCQsUt5aDyc6ffPAowo1MfPmuFwDIgqWgzMnayDEaQM2c2D1Hyn1pjYYI46IVsJ9+aJqp+SHQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/print/package.json b/print/package.json
index d8863c8bd1..4c03ac2338 100644
--- a/print/package.json
+++ b/print/package.json
@@ -35,7 +35,7 @@
     "@eslint/js": "9.9.1",
     "@nuxt/eslint-config": "0.5.2",
     "@nuxtjs/eslint-module": "4.1.0",
-    "@nuxtjs/i18n": "8.5.1",
+    "@nuxtjs/i18n": "8.5.0",
     "@nuxtjs/tailwindcss": "6.12.1",
     "@tailwindcss/typography": "0.5.14",
     "@typescript-eslint/eslint-plugin": "8.2.0",

From 7ef8c7469ab0fb8bbd93265d367cb43153207835 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 25 Aug 2024 13:18:01 +0000
Subject: [PATCH 141/273] chore(deps): update dependency @nuxtjs/i18n to v8.5.1

---
 print/package-lock.json | 8 ++++----
 print/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index d85b376d75..bdc1363738 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -26,7 +26,7 @@
         "@eslint/js": "9.9.1",
         "@nuxt/eslint-config": "0.5.2",
         "@nuxtjs/eslint-module": "4.1.0",
-        "@nuxtjs/i18n": "8.5.0",
+        "@nuxtjs/i18n": "8.5.1",
         "@nuxtjs/tailwindcss": "6.12.1",
         "@tailwindcss/typography": "0.5.14",
         "@typescript-eslint/eslint-plugin": "8.2.0",
@@ -2234,9 +2234,9 @@
       }
     },
     "node_modules/@nuxtjs/i18n": {
-      "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.5.0.tgz",
-      "integrity": "sha512-FMdVUzsbTWu3FOCQsUt5aDyc6ffPAowo1MfPmuFwDIgqWgzMnayDEaQM2c2D1Hyn1pjYYI46IVsJ9+aJqp+SHQ==",
+      "version": "8.5.1",
+      "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.5.1.tgz",
+      "integrity": "sha512-rU+cGwX1lr5Jyd8lS1ulyTf0adGk6Q+G308Ig0SCrOTV07rHClkoUMpqAAo1Lc85C3Bgea2bFmseLYSfnVMm1A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/print/package.json b/print/package.json
index 4c03ac2338..d8863c8bd1 100644
--- a/print/package.json
+++ b/print/package.json
@@ -35,7 +35,7 @@
     "@eslint/js": "9.9.1",
     "@nuxt/eslint-config": "0.5.2",
     "@nuxtjs/eslint-module": "4.1.0",
-    "@nuxtjs/i18n": "8.5.0",
+    "@nuxtjs/i18n": "8.5.1",
     "@nuxtjs/tailwindcss": "6.12.1",
     "@tailwindcss/typography": "0.5.14",
     "@typescript-eslint/eslint-plugin": "8.2.0",

From 9d5265a385f93c66468482c0b65327fd37b2f2cb Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 25 Aug 2024 13:18:31 +0000
Subject: [PATCH 142/273] chore(deps): update dependency jsdom to v25

---
 frontend/package-lock.json | 8 ++++----
 frontend/package.json      | 2 +-
 pdf/package-lock.json      | 8 ++++----
 pdf/package.json           | 2 +-
 4 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index a41eed07bd..fde4651084 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -98,7 +98,7 @@
         "flush-promises": "1.0.2",
         "globals": "15.9.0",
         "jest-serializer-vue-tjw": "3.20.0",
-        "jsdom": "24.1.3",
+        "jsdom": "25.0.0",
         "lint-staged": "15.2.9",
         "prettier": "3.3.3",
         "sass": "1.32.13",
@@ -9209,9 +9209,9 @@
       }
     },
     "node_modules/jsdom": {
-      "version": "24.1.3",
-      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.3.tgz",
-      "integrity": "sha512-MyL55p3Ut3cXbeBEG7Hcv0mVM8pp8PBNWxRqchZnSfAiES1v1mRnMeFfaHWIPULpwsYfvO+ZmMZz5tGCnjzDUQ==",
+      "version": "25.0.0",
+      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.0.tgz",
+      "integrity": "sha512-OhoFVT59T7aEq75TVw9xxEfkXgacpqAhQaYgP9y/fDqWQCMB/b1H66RfmPm/MaeaAIU9nDwMOVTlPN51+ao6CQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/frontend/package.json b/frontend/package.json
index cc65fbfb88..c17061b5bd 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -110,7 +110,7 @@
     "flush-promises": "1.0.2",
     "globals": "15.9.0",
     "jest-serializer-vue-tjw": "3.20.0",
-    "jsdom": "24.1.3",
+    "jsdom": "25.0.0",
     "lint-staged": "15.2.9",
     "prettier": "3.3.3",
     "sass": "1.32.13",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index 56592f7a48..3d5fc58be1 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -33,7 +33,7 @@
         "eslint-plugin-local-rules": "3.0.2",
         "eslint-plugin-vue": "9.27.0",
         "globals": "15.9.0",
-        "jsdom": "24.1.3",
+        "jsdom": "25.0.0",
         "prettier": "3.3.3",
         "url-template": "3.1.1",
         "vite": "5.4.2",
@@ -5988,9 +5988,9 @@
       }
     },
     "node_modules/jsdom": {
-      "version": "24.1.3",
-      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.3.tgz",
-      "integrity": "sha512-MyL55p3Ut3cXbeBEG7Hcv0mVM8pp8PBNWxRqchZnSfAiES1v1mRnMeFfaHWIPULpwsYfvO+ZmMZz5tGCnjzDUQ==",
+      "version": "25.0.0",
+      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.0.tgz",
+      "integrity": "sha512-OhoFVT59T7aEq75TVw9xxEfkXgacpqAhQaYgP9y/fDqWQCMB/b1H66RfmPm/MaeaAIU9nDwMOVTlPN51+ao6CQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/pdf/package.json b/pdf/package.json
index 5bd1826611..cbd39ba95c 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -53,7 +53,7 @@
     "eslint-plugin-local-rules": "3.0.2",
     "eslint-plugin-vue": "9.27.0",
     "globals": "15.9.0",
-    "jsdom": "24.1.3",
+    "jsdom": "25.0.0",
     "prettier": "3.3.3",
     "url-template": "3.1.1",
     "vite": "5.4.2",

From 037de55ccc6647c8b9ce113949e76d3fb497b2b4 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 26 Aug 2024 14:53:33 +0000
Subject: [PATCH 143/273] chore(deps): update dependency
 friendsofphp/php-cs-fixer to v3.63.1

---
 api/composer.json |  2 +-
 api/composer.lock | 14 +++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 8f3f81f2a9..0bdcbb340c 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -52,7 +52,7 @@
     },
     "require-dev": {
         "brianium/paratest": "^7.4",
-        "friendsofphp/php-cs-fixer": "3.62.0",
+        "friendsofphp/php-cs-fixer": "3.63.1",
         "hautelook/alice-bundle": "2.13.0",
         "justinrainbow/json-schema": "6.0.0",
         "php-coveralls/php-coveralls": "2.7.0",
diff --git a/api/composer.lock b/api/composer.lock
index e76fdd2dca..4f741000c2 100644
--- a/api/composer.lock
+++ b/api/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": "e2a179284549c0d918ceef74f75943c3",
+    "content-hash": "84c296d33facb73dbdf47f91a147ebde",
     "packages": [
         {
             "name": "api-platform/core",
@@ -11081,16 +11081,16 @@
         },
         {
             "name": "friendsofphp/php-cs-fixer",
-            "version": "v3.62.0",
+            "version": "v3.63.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
-                "reference": "627692f794d35c43483f34b01d94740df2a73507"
+                "reference": "ee3cc2e1fbfbddf98c17d4615db574a2a311c1ea"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/627692f794d35c43483f34b01d94740df2a73507",
-                "reference": "627692f794d35c43483f34b01d94740df2a73507",
+                "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/ee3cc2e1fbfbddf98c17d4615db574a2a311c1ea",
+                "reference": "ee3cc2e1fbfbddf98c17d4615db574a2a311c1ea",
                 "shasum": ""
             },
             "require": {
@@ -11172,7 +11172,7 @@
             ],
             "support": {
                 "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
-                "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.62.0"
+                "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.63.1"
             },
             "funding": [
                 {
@@ -11180,7 +11180,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-07T17:03:09+00:00"
+            "time": "2024-08-26T14:03:20+00:00"
         },
         {
             "name": "hautelook/alice-bundle",

From 7ff2531cdd71ffad49ba124053b949fee2e79b6a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 26 Aug 2024 14:54:00 +0000
Subject: [PATCH 144/273] fix(deps): update dependency emoji-regex to v10.4.0

---
 frontend/package-lock.json | 8 ++++----
 frontend/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index a41eed07bd..2ef362ad89 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -45,7 +45,7 @@
         "comlink": "4.4.1",
         "dayjs": "1.11.13",
         "deepmerge": "4.3.1",
-        "emoji-regex": "10.3.0",
+        "emoji-regex": "10.4.0",
         "file-saver": "2.0.5",
         "hal-json-vuex": "2.0.0-alpha.16",
         "inter-ui": "3.19.3",
@@ -6555,9 +6555,9 @@
       "license": "ISC"
     },
     "node_modules/emoji-regex": {
-      "version": "10.3.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
-      "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
+      "version": "10.4.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
+      "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
       "license": "MIT"
     },
     "node_modules/encoding-sniffer": {
diff --git a/frontend/package.json b/frontend/package.json
index cc65fbfb88..ce7e3f2d5b 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -57,7 +57,7 @@
     "comlink": "4.4.1",
     "dayjs": "1.11.13",
     "deepmerge": "4.3.1",
-    "emoji-regex": "10.3.0",
+    "emoji-regex": "10.4.0",
     "file-saver": "2.0.5",
     "hal-json-vuex": "2.0.0-alpha.16",
     "inter-ui": "3.19.3",

From 66f66dd8a1094fe314c830060a1fa2e92e6d087c Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 26 Aug 2024 19:21:36 +0000
Subject: [PATCH 145/273] chore(deps): update dependency
 @typescript-eslint/eslint-plugin to v8.3.0

---
 print/package-lock.json | 210 ++++++++++++++++++----------------------
 print/package.json      |   2 +-
 2 files changed, 96 insertions(+), 116 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index d85b376d75..4ace1983c3 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -29,7 +29,7 @@
         "@nuxtjs/i18n": "8.5.0",
         "@nuxtjs/tailwindcss": "6.12.1",
         "@tailwindcss/typography": "0.5.14",
-        "@typescript-eslint/eslint-plugin": "8.2.0",
+        "@typescript-eslint/eslint-plugin": "8.3.0",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/compiler-dom": "3.4.38",
         "@vue/compiler-sfc": "3.4.38",
@@ -4054,17 +4054,17 @@
       }
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.2.0.tgz",
-      "integrity": "sha512-02tJIs655em7fvt9gps/+4k4OsKULYGtLBPJfOsmOq1+3cdClYiF0+d6mHu6qDnTcg88wJBkcPLpQhq7FyDz0A==",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.3.0.tgz",
+      "integrity": "sha512-FLAIn63G5KH+adZosDYiutqkOkYEx0nvcwNNfJAf+c7Ae/H35qWwTYvPZUKFj5AS+WfHG/WJJfWnDnyNUlp8UA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.2.0",
-        "@typescript-eslint/type-utils": "8.2.0",
-        "@typescript-eslint/utils": "8.2.0",
-        "@typescript-eslint/visitor-keys": "8.2.0",
+        "@typescript-eslint/scope-manager": "8.3.0",
+        "@typescript-eslint/type-utils": "8.3.0",
+        "@typescript-eslint/utils": "8.3.0",
+        "@typescript-eslint/visitor-keys": "8.3.0",
         "graphemer": "^1.4.0",
         "ignore": "^5.3.1",
         "natural-compare": "^1.4.0",
@@ -4088,14 +4088,14 @@
       }
     },
     "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz",
-      "integrity": "sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.3.0.tgz",
+      "integrity": "sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.2.0",
-        "@typescript-eslint/visitor-keys": "8.2.0"
+        "@typescript-eslint/types": "8.3.0",
+        "@typescript-eslint/visitor-keys": "8.3.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4105,14 +4105,28 @@
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.3.0.tgz",
+      "integrity": "sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
     "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz",
-      "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz",
+      "integrity": "sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.2.0",
+        "@typescript-eslint/types": "8.3.0",
         "eslint-visitor-keys": "^3.4.3"
       },
       "engines": {
@@ -4307,14 +4321,14 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.2.0.tgz",
-      "integrity": "sha512-g1CfXGFMQdT5S+0PSO0fvGXUaiSkl73U1n9LTK5aRAFnPlJ8dLKkXr4AaLFvPedW8lVDoMgLLE3JN98ZZfsj0w==",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.3.0.tgz",
+      "integrity": "sha512-wrV6qh//nLbfXZQoj32EXKmwHf4b7L+xXLrP3FZ0GOUU72gSvLjeWUl5J5Ue5IwRxIV1TfF73j/eaBapxx99Lg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "8.2.0",
-        "@typescript-eslint/utils": "8.2.0",
+        "@typescript-eslint/typescript-estree": "8.3.0",
+        "@typescript-eslint/utils": "8.3.0",
         "debug": "^4.3.4",
         "ts-api-utils": "^1.3.0"
       },
@@ -4331,17 +4345,31 @@
         }
       }
     },
+    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.3.0.tgz",
+      "integrity": "sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
     "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz",
-      "integrity": "sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.3.0.tgz",
+      "integrity": "sha512-Mq7FTHl0R36EmWlCJWojIC1qn/ZWo2YiWYc1XVtasJ7FIgjo0MVv9rZWXEE7IK2CGrtwe1dVOxWwqXUdNgfRCA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "@typescript-eslint/types": "8.2.0",
-        "@typescript-eslint/visitor-keys": "8.2.0",
+        "@typescript-eslint/types": "8.3.0",
+        "@typescript-eslint/visitor-keys": "8.3.0",
         "debug": "^4.3.4",
-        "globby": "^11.1.0",
+        "fast-glob": "^3.3.2",
         "is-glob": "^4.0.3",
         "minimatch": "^9.0.4",
         "semver": "^7.6.0",
@@ -4361,13 +4389,13 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz",
-      "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz",
+      "integrity": "sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.2.0",
+        "@typescript-eslint/types": "8.3.0",
         "eslint-visitor-keys": "^3.4.3"
       },
       "engines": {
@@ -4391,37 +4419,6 @@
         "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/@typescript-eslint/type-utils/node_modules/globby": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-union": "^2.1.0",
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.9",
-        "ignore": "^5.2.0",
-        "merge2": "^1.4.1",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils/node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/@typescript-eslint/types": {
       "version": "8.2.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.2.0.tgz",
@@ -4511,16 +4508,16 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.2.0.tgz",
-      "integrity": "sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg==",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.3.0.tgz",
+      "integrity": "sha512-F77WwqxIi/qGkIGOGXNBLV7nykwfjLsdauRB/DOFPdv6LTF3BHHkBpq81/b5iMPSF055oO2BiivDJV4ChvNtXA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "8.2.0",
-        "@typescript-eslint/types": "8.2.0",
-        "@typescript-eslint/typescript-estree": "8.2.0"
+        "@typescript-eslint/scope-manager": "8.3.0",
+        "@typescript-eslint/types": "8.3.0",
+        "@typescript-eslint/typescript-estree": "8.3.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4534,14 +4531,14 @@
       }
     },
     "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz",
-      "integrity": "sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.3.0.tgz",
+      "integrity": "sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.2.0",
-        "@typescript-eslint/visitor-keys": "8.2.0"
+        "@typescript-eslint/types": "8.3.0",
+        "@typescript-eslint/visitor-keys": "8.3.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4551,17 +4548,31 @@
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
+    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.3.0.tgz",
+      "integrity": "sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
     "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz",
-      "integrity": "sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.3.0.tgz",
+      "integrity": "sha512-Mq7FTHl0R36EmWlCJWojIC1qn/ZWo2YiWYc1XVtasJ7FIgjo0MVv9rZWXEE7IK2CGrtwe1dVOxWwqXUdNgfRCA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "@typescript-eslint/types": "8.2.0",
-        "@typescript-eslint/visitor-keys": "8.2.0",
+        "@typescript-eslint/types": "8.3.0",
+        "@typescript-eslint/visitor-keys": "8.3.0",
         "debug": "^4.3.4",
-        "globby": "^11.1.0",
+        "fast-glob": "^3.3.2",
         "is-glob": "^4.0.3",
         "minimatch": "^9.0.4",
         "semver": "^7.6.0",
@@ -4581,13 +4592,13 @@
       }
     },
     "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz",
-      "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz",
+      "integrity": "sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.2.0",
+        "@typescript-eslint/types": "8.3.0",
         "eslint-visitor-keys": "^3.4.3"
       },
       "engines": {
@@ -4611,37 +4622,6 @@
         "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/@typescript-eslint/utils/node_modules/globby": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-union": "^2.1.0",
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.9",
-        "ignore": "^5.2.0",
-        "merge2": "^1.4.1",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/@typescript-eslint/visitor-keys": {
       "version": "7.18.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
diff --git a/print/package.json b/print/package.json
index 4c03ac2338..cc41881f70 100644
--- a/print/package.json
+++ b/print/package.json
@@ -38,7 +38,7 @@
     "@nuxtjs/i18n": "8.5.0",
     "@nuxtjs/tailwindcss": "6.12.1",
     "@tailwindcss/typography": "0.5.14",
-    "@typescript-eslint/eslint-plugin": "8.2.0",
+    "@typescript-eslint/eslint-plugin": "8.3.0",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/compiler-dom": "3.4.38",
     "@vue/compiler-sfc": "3.4.38",

From 8cfe90938464070a30ae8f6d21480435cb2eeb9d Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Mon, 26 Aug 2024 22:47:01 +0200
Subject: [PATCH 146/273] simplify test user login

---
 frontend/src/views/auth/Login.vue | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/frontend/src/views/auth/Login.vue b/frontend/src/views/auth/Login.vue
index 812706e984..7a0a3310dc 100644
--- a/frontend/src/views/auth/Login.vue
+++ b/frontend/src/views/auth/Login.vue
@@ -21,6 +21,21 @@
         <i18n :path="infoTextKey">
           <template #br><br /></template>
         </i18n>
+        <div class="text-right" style="margin-top: -26px">
+          <v-btn
+            color="warning"
+            height="32px"
+            @click="
+              () => {
+                email = 'test@example.com'
+                password = 'test'
+                login()
+              }
+            "
+          >
+            Login
+          </v-btn>
+        </div>
       </div>
     </v-alert>
     <v-alert v-if="error" outlined text border="left" type="error">

From ecf4c31547e0bb6b231fc252e16cbda141e71f41 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 27 Aug 2024 02:09:49 +0000
Subject: [PATCH 147/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.38

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 4367a654ac..31deb92209 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.37
+    image: amazon/aws-cli:2.17.38
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From 7bf4168a866d8a61737021684a9d17205b1460f0 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 27 Aug 2024 02:10:19 +0000
Subject: [PATCH 148/273] chore(deps): update dependency @nuxt/eslint-config to
 v0.5.3

---
 print/package-lock.json | 566 +++-------------------------------------
 print/package.json      |   2 +-
 2 files changed, 44 insertions(+), 524 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index fdfbeae9e4..df5c58b644 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -24,7 +24,7 @@
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.1",
-        "@nuxt/eslint-config": "0.5.2",
+        "@nuxt/eslint-config": "0.5.3",
         "@nuxtjs/eslint-module": "4.1.0",
         "@nuxtjs/i18n": "8.5.1",
         "@nuxtjs/tailwindcss": "6.12.1",
@@ -2027,21 +2027,21 @@
       }
     },
     "node_modules/@nuxt/eslint-config": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.2.tgz",
-      "integrity": "sha512-InlT4s6dUaO7YGxz0J2yaW3pRiCbIPBH4Mc3OxUPFT5+BYYXASm/Os+Ssc0Ia/UDAjiofLwd0Ov+QforPOeQUg==",
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.3.tgz",
+      "integrity": "sha512-V/z6pvNLiUwh4Y2goaqIDA91rmglWujYyUTfm6e0uKillJPKyUXjPwlQyxtvfEtUyyaR/RnUswjzluL6xcZt2g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@eslint/js": "^9.9.0",
-        "@nuxt/eslint-plugin": "0.5.2",
+        "@eslint/js": "^9.9.1",
+        "@nuxt/eslint-plugin": "0.5.3",
         "@rushstack/eslint-patch": "^1.10.4",
         "@stylistic/eslint-plugin": "^2.6.4",
-        "@typescript-eslint/eslint-plugin": "^8.1.0",
-        "@typescript-eslint/parser": "^8.1.0",
+        "@typescript-eslint/eslint-plugin": "^8.3.0",
+        "@typescript-eslint/parser": "^8.3.0",
         "eslint-config-flat-gitignore": "^0.1.8",
         "eslint-flat-config-utils": "^0.3.1",
-        "eslint-plugin-import-x": "^3.1.0",
+        "eslint-plugin-import-x": "^4.0.0",
         "eslint-plugin-jsdoc": "^50.2.2",
         "eslint-plugin-regexp": "^2.6.0",
         "eslint-plugin-unicorn": "^55.0.0",
@@ -2049,7 +2049,7 @@
         "globals": "^15.9.0",
         "local-pkg": "^0.5.0",
         "pathe": "^1.1.2",
-        "tslib": "^2.6.3",
+        "tslib": "^2.7.0",
         "vue-eslint-parser": "^9.4.3"
       },
       "peerDependencies": {
@@ -2057,14 +2057,14 @@
       }
     },
     "node_modules/@nuxt/eslint-plugin": {
-      "version": "0.5.2",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.2.tgz",
-      "integrity": "sha512-Z7v+mVJp6ertuwyYSU5NQbPzAEjvNDI3W88jcRr6cM94SzlJCJWfgZgZtxumbISGT2SAIO4TqNC++wFxDC5Jgw==",
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.3.tgz",
+      "integrity": "sha512-Qcm33Jv+BIQNreSyG0Rold64iL0VBTaL6s+dh2/88UwKknnb5GWnkP19Op7+w1xkl74okky6LIPkHPSJq3Ue7A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "^8.1.0",
-        "@typescript-eslint/utils": "^8.1.0"
+        "@typescript-eslint/types": "^8.3.0",
+        "@typescript-eslint/utils": "^8.3.0"
       },
       "peerDependencies": {
         "eslint": "^8.57.0 || ^9.0.0"
@@ -4087,80 +4087,17 @@
         }
       }
     },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.3.0.tgz",
-      "integrity": "sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.3.0",
-        "@typescript-eslint/visitor-keys": "8.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.3.0.tgz",
-      "integrity": "sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz",
-      "integrity": "sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.3.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
     "node_modules/@typescript-eslint/parser": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.2.0.tgz",
-      "integrity": "sha512-j3Di+o0lHgPrb7FxL3fdEy6LJ/j2NE8u+AP/5cQ9SKb+JLH6V6UHDqJ+e0hXBkHP1wn1YDFjYCS9LBQsZDlDEg==",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.3.0.tgz",
+      "integrity": "sha512-h53RhVyLu6AtpUzVCYLPhZGL5jzTD9fZL+SYf/+hYOx2bDkyQXztXSc4tbvKYHzfMXExMLiL9CWqJmVz6+78IQ==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "@typescript-eslint/scope-manager": "8.2.0",
-        "@typescript-eslint/types": "8.2.0",
-        "@typescript-eslint/typescript-estree": "8.2.0",
-        "@typescript-eslint/visitor-keys": "8.2.0",
+        "@typescript-eslint/scope-manager": "8.3.0",
+        "@typescript-eslint/types": "8.3.0",
+        "@typescript-eslint/typescript-estree": "8.3.0",
+        "@typescript-eslint/visitor-keys": "8.3.0",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -4179,141 +4116,18 @@
         }
       }
     },
-    "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz",
-      "integrity": "sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.2.0",
-        "@typescript-eslint/visitor-keys": "8.2.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz",
-      "integrity": "sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "@typescript-eslint/types": "8.2.0",
-        "@typescript-eslint/visitor-keys": "8.2.0",
-        "debug": "^4.3.4",
-        "globby": "^11.1.0",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^1.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz",
-      "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.2.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/parser/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/parser/node_modules/globby": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-union": "^2.1.0",
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.9",
-        "ignore": "^5.2.0",
-        "merge2": "^1.4.1",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@typescript-eslint/parser/node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
-      "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.3.0.tgz",
+      "integrity": "sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/visitor-keys": "7.18.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "@typescript-eslint/types": "8.3.0",
+        "@typescript-eslint/visitor-keys": "8.3.0"
       },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
-      "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
-      "dev": true,
-      "license": "MIT",
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "type": "opencollective",
@@ -4345,7 +4159,7 @@
         }
       }
     },
-    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
+    "node_modules/@typescript-eslint/types": {
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.3.0.tgz",
       "integrity": "sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==",
@@ -4359,7 +4173,7 @@
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
+    "node_modules/@typescript-eslint/typescript-estree": {
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.3.0.tgz",
       "integrity": "sha512-Mq7FTHl0R36EmWlCJWojIC1qn/ZWo2YiWYc1XVtasJ7FIgjo0MVv9rZWXEE7IK2CGrtwe1dVOxWwqXUdNgfRCA==",
@@ -4388,125 +4202,6 @@
         }
       }
     },
-    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz",
-      "integrity": "sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.3.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/types": {
-      "version": "8.2.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.2.0.tgz",
-      "integrity": "sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz",
-      "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/visitor-keys": "7.18.0",
-        "debug": "^4.3.4",
-        "globby": "^11.1.0",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^1.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || >=20.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/types": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
-      "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || >=20.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": {
-      "version": "11.1.0",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
-      "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "array-union": "^2.1.0",
-        "dir-glob": "^3.0.1",
-        "fast-glob": "^3.2.9",
-        "ignore": "^5.2.0",
-        "merge2": "^1.4.1",
-        "slash": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-      "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/@typescript-eslint/utils": {
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.3.0.tgz",
@@ -4530,68 +4225,7 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.3.0.tgz",
-      "integrity": "sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.3.0",
-        "@typescript-eslint/visitor-keys": "8.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.3.0.tgz",
-      "integrity": "sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.3.0.tgz",
-      "integrity": "sha512-Mq7FTHl0R36EmWlCJWojIC1qn/ZWo2YiWYc1XVtasJ7FIgjo0MVv9rZWXEE7IK2CGrtwe1dVOxWwqXUdNgfRCA==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "@typescript-eslint/types": "8.3.0",
-        "@typescript-eslint/visitor-keys": "8.3.0",
-        "debug": "^4.3.4",
-        "fast-glob": "^3.3.2",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^1.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
+    "node_modules/@typescript-eslint/visitor-keys": {
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz",
       "integrity": "sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==",
@@ -4609,51 +4243,6 @@
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/utils/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
-      "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "7.18.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^18.18.0 || >=20.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
-      "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || >=20.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
     "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
       "version": "3.4.3",
       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
@@ -5840,16 +5429,6 @@
       "dev": true,
       "license": "Python-2.0"
     },
-    "node_modules/array-union": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
-      "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/assertion-error": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
@@ -7502,29 +7081,6 @@
         "node": ">=0.3.1"
       }
     },
-    "node_modules/dir-glob": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
-      "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "path-type": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/dir-glob/node_modules/path-type": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
-      "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/dlv": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
@@ -8014,65 +7570,29 @@
       }
     },
     "node_modules/eslint-plugin-import-x": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-3.1.0.tgz",
-      "integrity": "sha512-/UbPA+bYY7nIxcjL3kpcDY3UNdoLHFhyBFzHox2M0ypcUoueTn6woZUUmzzi5et/dXChksasYYFeKE2wshOrhg==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.0.0.tgz",
+      "integrity": "sha512-5bWZ+2p3DKlpLSP830cAUmRUoYEnnvuBmSOSlURffEUuXL68uQUX0v2JpoXxyoDRIQWApzbqhnFeHA0XoQWosA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/utils": "^7.4.0",
+        "@typescript-eslint/typescript-estree": "^8.1.0",
+        "@typescript-eslint/utils": "^8.1.0",
         "debug": "^4.3.4",
         "doctrine": "^3.0.0",
         "eslint-import-resolver-node": "^0.3.9",
         "get-tsconfig": "^4.7.3",
         "is-glob": "^4.0.3",
         "minimatch": "^9.0.3",
-        "semver": "^7.6.0",
+        "semver": "^7.6.3",
         "stable-hash": "^0.0.4",
-        "tslib": "^2.6.2"
-      },
-      "engines": {
-        "node": ">=16"
+        "tslib": "^2.6.3"
       },
-      "peerDependencies": {
-        "eslint": "^8.56.0 || ^9.0.0-0"
-      }
-    },
-    "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/types": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
-      "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
-      "dev": true,
-      "license": "MIT",
       "engines": {
-        "node": "^18.18.0 || >=20.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/utils": {
-      "version": "7.18.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
-      "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "7.18.0",
-        "@typescript-eslint/types": "7.18.0",
-        "@typescript-eslint/typescript-estree": "7.18.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || >=20.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "peerDependencies": {
-        "eslint": "^8.56.0"
+        "eslint": "^8.57.0 || ^9.0.0"
       }
     },
     "node_modules/eslint-plugin-jsdoc": {
@@ -16290,9 +15810,9 @@
       "license": "Apache-2.0"
     },
     "node_modules/tslib": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
-      "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
+      "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
       "license": "0BSD"
     },
     "node_modules/tsscmp": {
diff --git a/print/package.json b/print/package.json
index cda57b2856..858f218ed2 100644
--- a/print/package.json
+++ b/print/package.json
@@ -33,7 +33,7 @@
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
     "@eslint/js": "9.9.1",
-    "@nuxt/eslint-config": "0.5.2",
+    "@nuxt/eslint-config": "0.5.3",
     "@nuxtjs/eslint-module": "4.1.0",
     "@nuxtjs/i18n": "8.5.1",
     "@nuxtjs/tailwindcss": "6.12.1",

From d1c84fe06507bbc62b5207268759ba5aac1cb744 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 27 Aug 2024 10:01:24 +0000
Subject: [PATCH 149/273] chore(deps): update dependency phpstan/phpstan to
 v1.12.0

---
 api/composer.json |  2 +-
 api/composer.lock | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 0bdcbb340c..de5fac252c 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -57,7 +57,7 @@
         "justinrainbow/json-schema": "6.0.0",
         "php-coveralls/php-coveralls": "2.7.0",
         "phpspec/prophecy-phpunit": "2.2",
-        "phpstan/phpstan": "1.11.11",
+        "phpstan/phpstan": "1.12.0",
         "phpunit/phpunit": "10.5.30",
         "rector/rector": "1.2.4",
         "spatie/phpunit-snapshot-assertions": "5.1.6",
diff --git a/api/composer.lock b/api/composer.lock
index 4f741000c2..5089860f29 100644
--- a/api/composer.lock
+++ b/api/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": "84c296d33facb73dbdf47f91a147ebde",
+    "content-hash": "3fcabb8987c45d9cf27f5f7e78ead0a0",
     "packages": [
         {
             "name": "api-platform/core",
@@ -12169,16 +12169,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.11.11",
+            "version": "1.12.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "707c2aed5d8d0075666e673a5e71440c1d01a5a3"
+                "reference": "384af967d35b2162f69526c7276acadce534d0e1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/707c2aed5d8d0075666e673a5e71440c1d01a5a3",
-                "reference": "707c2aed5d8d0075666e673a5e71440c1d01a5a3",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/384af967d35b2162f69526c7276acadce534d0e1",
+                "reference": "384af967d35b2162f69526c7276acadce534d0e1",
                 "shasum": ""
             },
             "require": {
@@ -12223,7 +12223,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-19T14:37:29+00:00"
+            "time": "2024-08-27T09:18:05+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",

From 2c5359b3e2dd81efe6ab4df4a2b1160182c7a44d Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 27 Aug 2024 12:14:49 +0000
Subject: [PATCH 150/273] fix(deps): update dependency isomorphic-dompurify to
 v2.15.0

---
 print/package-lock.json | 16 ++++++++--------
 print/package.json      |  2 +-
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index df5c58b644..5e967abb1a 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -14,7 +14,7 @@
         "dayjs": "1.11.13",
         "deepmerge": "4.3.1",
         "hal-json-vuex": "3.0.0-alpha.1",
-        "isomorphic-dompurify": "2.14.0",
+        "isomorphic-dompurify": "2.15.0",
         "lodash": "4.17.21",
         "puppeteer-core": "22.15.0",
         "runes": "0.4.3",
@@ -9587,14 +9587,14 @@
       "license": "ISC"
     },
     "node_modules/isomorphic-dompurify": {
-      "version": "2.14.0",
-      "resolved": "https://registry.npmjs.org/isomorphic-dompurify/-/isomorphic-dompurify-2.14.0.tgz",
-      "integrity": "sha512-7xyjuzBf3P/HBt0PbOpmv5LuV38TmfvidBFvgyuSWVMLwCGDITBPHWsBZ/L1a8DpcGz5PEintBeGdlrKzUqt5A==",
+      "version": "2.15.0",
+      "resolved": "https://registry.npmjs.org/isomorphic-dompurify/-/isomorphic-dompurify-2.15.0.tgz",
+      "integrity": "sha512-RDHlyeVmwEDAPZuX1VaaBzSn9RrsfvswxH7faEQK9cTHC1dXeNuK6ElUeSr7locFyeLguut8ASfhQWxHB4Ttug==",
       "license": "MIT",
       "dependencies": {
         "@types/dompurify": "^3.0.5",
         "dompurify": "^3.1.6",
-        "jsdom": "^24.1.1"
+        "jsdom": "^25.0.0"
       },
       "engines": {
         "node": ">=18"
@@ -9815,9 +9815,9 @@
       }
     },
     "node_modules/jsdom": {
-      "version": "24.1.1",
-      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.1.tgz",
-      "integrity": "sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==",
+      "version": "25.0.0",
+      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.0.tgz",
+      "integrity": "sha512-OhoFVT59T7aEq75TVw9xxEfkXgacpqAhQaYgP9y/fDqWQCMB/b1H66RfmPm/MaeaAIU9nDwMOVTlPN51+ao6CQ==",
       "license": "MIT",
       "dependencies": {
         "cssstyle": "^4.0.1",
diff --git a/print/package.json b/print/package.json
index 858f218ed2..59c82d98ba 100644
--- a/print/package.json
+++ b/print/package.json
@@ -23,7 +23,7 @@
     "dayjs": "1.11.13",
     "deepmerge": "4.3.1",
     "hal-json-vuex": "3.0.0-alpha.1",
-    "isomorphic-dompurify": "2.14.0",
+    "isomorphic-dompurify": "2.15.0",
     "lodash": "4.17.21",
     "puppeteer-core": "22.15.0",
     "runes": "0.4.3",

From c2fe2452faaa2eb582034159991a2e24c18e9aa4 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 27 Aug 2024 15:03:28 +0000
Subject: [PATCH 151/273] fix(deps): update sentry-javascript monorepo to
 v8.27.0

---
 frontend/package-lock.json | 114 ++++++++++++++++++-------------------
 frontend/package.json      |   4 +-
 print/package-lock.json    |  60 +++++++++----------
 print/package.json         |   2 +-
 4 files changed, 90 insertions(+), 90 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 5244ffd75d..063816a208 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -14,8 +14,8 @@
         "@react-pdf/pdfkit": "3.1.10",
         "@react-pdf/primitives": "3.1.1",
         "@react-pdf/render": "3.4.4",
-        "@sentry/browser": "8.26.0",
-        "@sentry/vue": "8.26.0",
+        "@sentry/browser": "8.27.0",
+        "@sentry/vue": "8.27.0",
         "@tiptap/extension-bold": "2.6.6",
         "@tiptap/extension-bubble-menu": "2.6.6",
         "@tiptap/extension-bullet-list": "2.6.6",
@@ -3302,58 +3302,58 @@
       ]
     },
     "node_modules/@sentry-internal/browser-utils": {
-      "version": "8.26.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.26.0.tgz",
-      "integrity": "sha512-O2Tj+WK33/ZVp5STnz6ZL0OO+/Idk2KqsH0ITQkQmyZ2z0kdzWOeqK7s7q3/My6rB1GfPcyqPcBBv4dVv92FYQ==",
+      "version": "8.27.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.27.0.tgz",
+      "integrity": "sha512-YTIwQ1GM1NTRXgN4DvpFSQ2x4pjlqQ0FQAyHW5x2ZYv4z7VmqG4Xkid1P/srQUipECk6nxkebfD4WR19nLsvnQ==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/core": "8.26.0",
-        "@sentry/types": "8.26.0",
-        "@sentry/utils": "8.26.0"
+        "@sentry/core": "8.27.0",
+        "@sentry/types": "8.27.0",
+        "@sentry/utils": "8.27.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry-internal/feedback": {
-      "version": "8.26.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.26.0.tgz",
-      "integrity": "sha512-hQtw1gg8n6ERK1UH47F7ZI1zOsbhu0J2VX+TrnkpaQR2FgxDW1oe9Ja6oCV4CQKuR4w+1ZI/Kj4imSt0K33kEw==",
+      "version": "8.27.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.27.0.tgz",
+      "integrity": "sha512-b71PQc9aK1X9b/SO1DiJlrnAEx4n0MzPZQ/tKd9oRWDyGit6pJWZfQns9r2rvc96kJPMOTxFAa/upXRCkA723A==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/core": "8.26.0",
-        "@sentry/types": "8.26.0",
-        "@sentry/utils": "8.26.0"
+        "@sentry/core": "8.27.0",
+        "@sentry/types": "8.27.0",
+        "@sentry/utils": "8.27.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry-internal/replay": {
-      "version": "8.26.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.26.0.tgz",
-      "integrity": "sha512-JDY7W2bswlp5c3483lKP4kcb75fHNwGNfwD8x8FsY9xMjv7nxeXjLpR5cCEk1XqPq2+n6w4j7mJOXhEXGiUIKg==",
+      "version": "8.27.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.27.0.tgz",
+      "integrity": "sha512-Ofucncaon98dvlxte2L//hwuG9yILSxNrTz/PmO0k+HzB9q+oBic4667QF+azWR2qv4oKSWpc+vEovP3hVqveA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry-internal/browser-utils": "8.26.0",
-        "@sentry/core": "8.26.0",
-        "@sentry/types": "8.26.0",
-        "@sentry/utils": "8.26.0"
+        "@sentry-internal/browser-utils": "8.27.0",
+        "@sentry/core": "8.27.0",
+        "@sentry/types": "8.27.0",
+        "@sentry/utils": "8.27.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry-internal/replay-canvas": {
-      "version": "8.26.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.26.0.tgz",
-      "integrity": "sha512-2CFQW6f9aJHIo/DqmqYa9PaYoLn1o36ywc0h8oyGrD4oPCbrnE5F++PmTdc71GBODu41HBn/yoCTLmxOD+UjpA==",
+      "version": "8.27.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.27.0.tgz",
+      "integrity": "sha512-uuEfiWbjwugB9M4KxXxovHYiKRqg/R6U4EF8xM/Ub4laUuEcWsfRp7lQ3MxL3qYojbca8ncIFic2bIoKMPeejA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry-internal/replay": "8.26.0",
-        "@sentry/core": "8.26.0",
-        "@sentry/types": "8.26.0",
-        "@sentry/utils": "8.26.0"
+        "@sentry-internal/replay": "8.27.0",
+        "@sentry/core": "8.27.0",
+        "@sentry/types": "8.27.0",
+        "@sentry/utils": "8.27.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3370,18 +3370,18 @@
       }
     },
     "node_modules/@sentry/browser": {
-      "version": "8.26.0",
-      "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.26.0.tgz",
-      "integrity": "sha512-e5s6eKlwLZWzTwQcBwqyAGZMMuQROW9Z677VzwkSyREWAIkKjfH2VBxHATnNGc0IVkNHjD7iH3ixo3C0rLKM3w==",
+      "version": "8.27.0",
+      "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.27.0.tgz",
+      "integrity": "sha512-eL1eaHwoYUGkp4mpeYesH6WtCrm+0u9jYCW5Lm0MAeTmpx22BZKEmj0OljuUJXGnJwFbvPDlRjyz6QG11m8kZA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry-internal/browser-utils": "8.26.0",
-        "@sentry-internal/feedback": "8.26.0",
-        "@sentry-internal/replay": "8.26.0",
-        "@sentry-internal/replay-canvas": "8.26.0",
-        "@sentry/core": "8.26.0",
-        "@sentry/types": "8.26.0",
-        "@sentry/utils": "8.26.0"
+        "@sentry-internal/browser-utils": "8.27.0",
+        "@sentry-internal/feedback": "8.27.0",
+        "@sentry-internal/replay": "8.27.0",
+        "@sentry-internal/replay-canvas": "8.27.0",
+        "@sentry/core": "8.27.0",
+        "@sentry/types": "8.27.0",
+        "@sentry/utils": "8.27.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3560,34 +3560,34 @@
       }
     },
     "node_modules/@sentry/core": {
-      "version": "8.26.0",
-      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.26.0.tgz",
-      "integrity": "sha512-g/tVmTZD4GNbLFf++hKJfBpcCAtduFEMLnbfa9iT/QEZjlmP+EzY+GsH9bafM5VsNe8DiOUp+kJKWtShzlVdBA==",
+      "version": "8.27.0",
+      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.27.0.tgz",
+      "integrity": "sha512-4frlXluHT3Du+Omw91K04jpvbfMtydvg4Bxj2+gt/DT19Swhm/fbEpzdUjgbAd3Jinj/n0qk/jFRXjr9JZKFjg==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.26.0",
-        "@sentry/utils": "8.26.0"
+        "@sentry/types": "8.27.0",
+        "@sentry/utils": "8.27.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/types": {
-      "version": "8.26.0",
-      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.26.0.tgz",
-      "integrity": "sha512-zKmh6SWsJh630rpt7a9vP4Cm4m1C2gDTUqUiH565CajCL/4cePpNWYrNwalSqsOSL7B9OrczA1+n6a6XvND+ng==",
+      "version": "8.27.0",
+      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.27.0.tgz",
+      "integrity": "sha512-B6lrP46+m2x0lfqWc9F4VcUbN893mVGnPEd7KIMRk95mPzkFJ3sNxggTQF5/ZfNO7lDQYQb22uysB5sj/BqFiw==",
       "license": "MIT",
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/utils": {
-      "version": "8.26.0",
-      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.26.0.tgz",
-      "integrity": "sha512-xvlPU9Hd2BlyT+FhWHGNwnxWqdVRk2AHnDtVcW4Ma0Ri5EwS+uy4Jeik5UkSv8C5RVb9VlxFmS8LN3I1MPJsLw==",
+      "version": "8.27.0",
+      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.27.0.tgz",
+      "integrity": "sha512-gyJM3SyLQe0A3mkQVVNdKYvk3ZoikkYgyA/D+5StFNLKdyUgEbJgXOGXrQSSYPF7BSX6Sc5b0KHCglPII0KuKw==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.26.0"
+        "@sentry/types": "8.27.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3608,15 +3608,15 @@
       }
     },
     "node_modules/@sentry/vue": {
-      "version": "8.26.0",
-      "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-8.26.0.tgz",
-      "integrity": "sha512-KLFHgINX4OWKPMZ/aHOojT8QjPLwoMPt99gbgtsGrRx9vjHOp1JLTGXCVl3VMs8Vl3Uo5jNKq0hE1Lqufy1luw==",
+      "version": "8.27.0",
+      "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-8.27.0.tgz",
+      "integrity": "sha512-kCjrdKCQk9ZgE7HirVaT/hvyBhoryEHickiWQET7fzyEo6Zs7/KoFnNiXzGuZ+XJcZ8R76wlog+awBBmZBuBsQ==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/browser": "8.26.0",
-        "@sentry/core": "8.26.0",
-        "@sentry/types": "8.26.0",
-        "@sentry/utils": "8.26.0"
+        "@sentry/browser": "8.27.0",
+        "@sentry/core": "8.27.0",
+        "@sentry/types": "8.27.0",
+        "@sentry/utils": "8.27.0"
       },
       "engines": {
         "node": ">=14.18"
diff --git a/frontend/package.json b/frontend/package.json
index 23e5ff1755..f03ec9a59c 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -26,8 +26,8 @@
     "@react-pdf/pdfkit": "3.1.10",
     "@react-pdf/primitives": "3.1.1",
     "@react-pdf/render": "3.4.4",
-    "@sentry/browser": "8.26.0",
-    "@sentry/vue": "8.26.0",
+    "@sentry/browser": "8.27.0",
+    "@sentry/vue": "8.27.0",
     "@tiptap/extension-bold": "2.6.6",
     "@tiptap/extension-bubble-menu": "2.6.6",
     "@tiptap/extension-bullet-list": "2.6.6",
diff --git a/print/package-lock.json b/print/package-lock.json
index df5c58b644..6f35cc38db 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -8,7 +8,7 @@
       "dependencies": {
         "@jamescoyle/vue-icon": "0.1.2",
         "@mdi/js": "7.4.47",
-        "@sentry/node": "8.26.0",
+        "@sentry/node": "8.27.0",
         "axios": "1.7.5",
         "colorjs.io": "0.5.2",
         "dayjs": "1.11.13",
@@ -3077,9 +3077,9 @@
       "license": "MIT"
     },
     "node_modules/@prisma/instrumentation": {
-      "version": "5.17.0",
-      "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-5.17.0.tgz",
-      "integrity": "sha512-c1Sle4ji8aasMcYfBBHFM56We4ljfenVtRmS8aY06BllS7SoU6SmJBwG7vil+GHiR0Yrh+t9iBwt4AY0Jr4KNQ==",
+      "version": "5.18.0",
+      "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-5.18.0.tgz",
+      "integrity": "sha512-r074avGkpPXItk+josQPhufZEmGhUCb16PQx4ITPS40vWTpTPET4VsgCBZB2alIN6SS7pRFod2vz2M2HHEEylQ==",
       "license": "Apache-2.0",
       "dependencies": {
         "@opentelemetry/api": "^1.8",
@@ -3617,22 +3617,22 @@
       "license": "MIT"
     },
     "node_modules/@sentry/core": {
-      "version": "8.26.0",
-      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.26.0.tgz",
-      "integrity": "sha512-g/tVmTZD4GNbLFf++hKJfBpcCAtduFEMLnbfa9iT/QEZjlmP+EzY+GsH9bafM5VsNe8DiOUp+kJKWtShzlVdBA==",
+      "version": "8.27.0",
+      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.27.0.tgz",
+      "integrity": "sha512-4frlXluHT3Du+Omw91K04jpvbfMtydvg4Bxj2+gt/DT19Swhm/fbEpzdUjgbAd3Jinj/n0qk/jFRXjr9JZKFjg==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.26.0",
-        "@sentry/utils": "8.26.0"
+        "@sentry/types": "8.27.0",
+        "@sentry/utils": "8.27.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/node": {
-      "version": "8.26.0",
-      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.26.0.tgz",
-      "integrity": "sha512-N9mNLzicnfGgsq6P10ckPdTzEFusjTC7gpqPopwq5eEMF7g798hH8CcE5o6FZ4iAAR3vWliAR/jgccdoMmJMpQ==",
+      "version": "8.27.0",
+      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.27.0.tgz",
+      "integrity": "sha512-nE2VPSHOW/tzH/lB6CoBtYkmXqXncUuWMC56RLRiPyHEXDktZx8oFp364/3m117iKOjO0XHP57Kl5cdb90IM7g==",
       "license": "MIT",
       "dependencies": {
         "@opentelemetry/api": "^1.9.0",
@@ -3658,11 +3658,11 @@
         "@opentelemetry/resources": "^1.25.1",
         "@opentelemetry/sdk-trace-base": "^1.25.1",
         "@opentelemetry/semantic-conventions": "^1.25.1",
-        "@prisma/instrumentation": "5.17.0",
-        "@sentry/core": "8.26.0",
-        "@sentry/opentelemetry": "8.26.0",
-        "@sentry/types": "8.26.0",
-        "@sentry/utils": "8.26.0",
+        "@prisma/instrumentation": "5.18.0",
+        "@sentry/core": "8.27.0",
+        "@sentry/opentelemetry": "8.27.0",
+        "@sentry/types": "8.27.0",
+        "@sentry/utils": "8.27.0",
         "import-in-the-middle": "^1.11.0"
       },
       "engines": {
@@ -3673,14 +3673,14 @@
       }
     },
     "node_modules/@sentry/opentelemetry": {
-      "version": "8.26.0",
-      "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.26.0.tgz",
-      "integrity": "sha512-HBDheM/+ysfIz8R1OH4bBIxdgD7ZbQkKLJAUXkdAbBcfbpK/CTtwcplbauF5wY7Q+GYvwL/ShuDwvXRfW+gFyQ==",
+      "version": "8.27.0",
+      "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.27.0.tgz",
+      "integrity": "sha512-FRz7ApnyZYDFmi2CWUhKBux2N/0WswRLHwHDZ31FYCajujw7vQKucgdsxDW2RIRPWDwcMxHY1kvt6EzM1hIsxQ==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/core": "8.26.0",
-        "@sentry/types": "8.26.0",
-        "@sentry/utils": "8.26.0"
+        "@sentry/core": "8.27.0",
+        "@sentry/types": "8.27.0",
+        "@sentry/utils": "8.27.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3694,21 +3694,21 @@
       }
     },
     "node_modules/@sentry/types": {
-      "version": "8.26.0",
-      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.26.0.tgz",
-      "integrity": "sha512-zKmh6SWsJh630rpt7a9vP4Cm4m1C2gDTUqUiH565CajCL/4cePpNWYrNwalSqsOSL7B9OrczA1+n6a6XvND+ng==",
+      "version": "8.27.0",
+      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.27.0.tgz",
+      "integrity": "sha512-B6lrP46+m2x0lfqWc9F4VcUbN893mVGnPEd7KIMRk95mPzkFJ3sNxggTQF5/ZfNO7lDQYQb22uysB5sj/BqFiw==",
       "license": "MIT",
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/utils": {
-      "version": "8.26.0",
-      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.26.0.tgz",
-      "integrity": "sha512-xvlPU9Hd2BlyT+FhWHGNwnxWqdVRk2AHnDtVcW4Ma0Ri5EwS+uy4Jeik5UkSv8C5RVb9VlxFmS8LN3I1MPJsLw==",
+      "version": "8.27.0",
+      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.27.0.tgz",
+      "integrity": "sha512-gyJM3SyLQe0A3mkQVVNdKYvk3ZoikkYgyA/D+5StFNLKdyUgEbJgXOGXrQSSYPF7BSX6Sc5b0KHCglPII0KuKw==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.26.0"
+        "@sentry/types": "8.27.0"
       },
       "engines": {
         "node": ">=14.18"
diff --git a/print/package.json b/print/package.json
index 858f218ed2..04cf0984e8 100644
--- a/print/package.json
+++ b/print/package.json
@@ -17,7 +17,7 @@
   "dependencies": {
     "@jamescoyle/vue-icon": "0.1.2",
     "@mdi/js": "7.4.47",
-    "@sentry/node": "8.26.0",
+    "@sentry/node": "8.27.0",
     "axios": "1.7.5",
     "colorjs.io": "0.5.2",
     "dayjs": "1.11.13",

From f6408f1a369416c046dd130ad31ca9e6f684bca1 Mon Sep 17 00:00:00 2001
From: Manuel Meister <news.manuelsworld@gmail.com>
Date: Tue, 27 Aug 2024 19:28:40 +0200
Subject: [PATCH 152/273] =?UTF-8?q?Add=20shortTitle=20support=20for=20fran?=
 =?UTF-8?q?=C3=A7ais=20and=20italiano?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../helpers/__tests__/campShortTitle.spec.js  |  9 +++++++
 common/helpers/campShortTitle.js              | 25 ++++++++++++++++---
 2 files changed, 30 insertions(+), 4 deletions(-)

diff --git a/common/helpers/__tests__/campShortTitle.spec.js b/common/helpers/__tests__/campShortTitle.spec.js
index 9f9dd11640..5fb78dbf65 100644
--- a/common/helpers/__tests__/campShortTitle.spec.js
+++ b/common/helpers/__tests__/campShortTitle.spec.js
@@ -21,6 +21,15 @@ describe('campShortTitle', () => {
     [{ shortTitle: null, title: 'Pio Bezirkspfila 2024' }, 'Pio BezPfiLa24'],
     [{ shortTitle: null, title: 'Piostufensola 12.12.2026' }, 'PioSoLa26 12.12.'],
 
+    [{ shortTitle: null, title: "Camp d'été à Thun 2024" }, 'été à Thun 2024'],
+    [{ shortTitle: null, title: "Campo di Pentecoste 2024" }, 'Pentecoste 2024'],
+    [{ shortTitle: null, title: "Camp d'hiver PiCos 2025" }, "hiver PiCos 2025"],
+    [{ shortTitle: null, title: "Camp d'automne Eclais 2025" }, "Aut Eclais 2025"],
+    [{ shortTitle: null, title: "Camp de pâques 2025 louveteaux" }, "Pâq25louveteaux"],
+    [{ shortTitle: null, title: "Campo di primavera 2025 esploratori" }, "Prim 2025 esplos"],
+    [{ shortTitle: null, title: "Campo autunnale 2028" }, "autunnale 2028"],
+    [{ shortTitle: null, title: "Campo dell'Ascensione 2025 Esploratori" }, "Asc 2025 Esplos"],
+
     [{ shortTitle: 'Pfila 2024', title: 'Pfingstlager 2024' }, 'Pfila 2024'],
     [{ shortTitle: 'Pfila 2024', title: null }, 'Pfila 2024'],
     [{ shortTitle: null, title: null }, ''],
diff --git a/common/helpers/campShortTitle.js b/common/helpers/campShortTitle.js
index 7ec667ee6a..85f69cb63e 100644
--- a/common/helpers/campShortTitle.js
+++ b/common/helpers/campShortTitle.js
@@ -15,17 +15,34 @@ const ADDITIONAL_SHORTNERS = [
   },
   {
     regex:
-      /(?<start>.*?\b)?(?<camp>[a-z]{2,}La(?:ger)?)(?<middle>(?:\s(?!19|20))|.*?)\s?(?:(?:19|20)(?<year>\d{2}))(?<end>.*)/gi,
+      /(?<start>.*?\b)?(?<camp>(?:[A-Za-z]{2,}La)|(?:[A-Za-z]{2,}lager))(?<middle>(?:\s(?!19|20))|.*?)\s?(?:(?:19|20)(?<year>\d{2}))(?<end>.*)/g,
     text: '$<start>$<camp>$<year>$<middle>$<end>',
   },
   { regex: /(Pfadi|Pio|Rover)stufe(?!n)/g, text: '$1s' },
-  { regex: /(B)ie?berstufe(?!n)/g, text: '$1iberli' },
-  { regex: /(W)olfs?stufe(?!n)/g, text: '$1ölfli' },
+  { regex: /(B)ie?berstufe(?!n)/gi, text: '$1iberli' },
+  { regex: /(W)olfs?stufe(?!n)/gi, text: '$1ölfli' },
+  { regex: /(E)sploratori/gi, text: '$1splos' },
   {
     regex: /(Bie?ber|Wolfs?|Pfadi|Pio|Rover)stufen(So|Ab|Au|Auf|He|Pfi)La/gi,
     text: '$1$2La',
   },
-  { regex: /\bund\b/g, text: '&' },
+  {
+    regex: /Campo? (.*? ?)(?:(?: ?d[ei] )?(Pentec[ôo]te|Pentecoste|primavera|printemps|p[âa]ques|pasqua)|(?:d')?([ée]t[eé]|automne|hiver)|(estivo|autunnale|invernale)|(?:de[l ]l[' ])?(Ascensione?))? (.*? ?)*?((?:19|20)\d{2})?/gi,
+    text: '$2$3$4$5 $1$6$7',
+  },
+  { regex: /\bPrintemps/gi, text: 'Prt', },
+  { regex: /\bPrimavera/gi, text: 'Prim', },
+  { regex: /\bP[aâ]ques/gi, text: 'Pâq', },
+  { regex: /\bPasqua/gi, text: 'Pas', },
+  { regex: /\bAutomne/gi, text: 'Aut', },
+  { regex: /\bAutunno/gi, text: 'Aut', },
+  { regex: /\bHiver/gi, text: 'Hiv', },
+  { regex: /\bInverno/gi, text: 'Inv', },
+  { regex: /\bPentec[oô]s?te/gi, text: 'Pent', },
+  { regex: /\bAscensione?/gi, text: 'Asc', },
+  { regex: /\bEstate/gi, text: 'Est', },
+
+  { regex: /\b(?:und|et?)\b/g, text: '&' },
   { regex: /\b(?:19|20)(\d{2})\b/g, text: '$1' },
   { regex: /\s/g, text: '' },
 ]

From 6cce6066201f31017a0975bb950ed51295e67b4c Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Sun, 9 Jun 2024 00:21:47 +0200
Subject: [PATCH 153/273] Entity Checklist

---
 .../schema/Version20240608215345.php          |  33 +++++
 api/src/Entity/Camp.php                       |  44 +++++++
 api/src/Entity/Checklist.php                  | 114 ++++++++++++++++++
 api/src/Repository/ChecklistRepository.php    |  29 +++++
 api/src/State/ChecklistCreateProcessor.php    |  31 +++++
 5 files changed, 251 insertions(+)
 create mode 100644 api/migrations/schema/Version20240608215345.php
 create mode 100644 api/src/Entity/Checklist.php
 create mode 100644 api/src/Repository/ChecklistRepository.php
 create mode 100644 api/src/State/ChecklistCreateProcessor.php

diff --git a/api/migrations/schema/Version20240608215345.php b/api/migrations/schema/Version20240608215345.php
new file mode 100644
index 0000000000..f5addee3d0
--- /dev/null
+++ b/api/migrations/schema/Version20240608215345.php
@@ -0,0 +1,33 @@
+<?php
+
+declare(strict_types=1);
+
+namespace DoctrineMigrations;
+
+use Doctrine\DBAL\Schema\Schema;
+use Doctrine\Migrations\AbstractMigration;
+
+/**
+ * Auto-generated Migration: Please modify to your needs!
+ */
+final class Version20240608215345 extends AbstractMigration {
+    public function getDescription(): string {
+        return '';
+    }
+
+    public function up(Schema $schema): void {
+        // this up() migration is auto-generated, please modify it to your needs
+        $this->addSql('CREATE TABLE checklist (id VARCHAR(16) NOT NULL, createTime TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, updateTime TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, name TEXT NOT NULL, campId VARCHAR(16) NOT NULL, PRIMARY KEY(id))');
+        $this->addSql('CREATE INDEX IDX_5C696D2F6D299429 ON checklist (campId)');
+        $this->addSql('CREATE INDEX IDX_5C696D2F9D468A55 ON checklist (createTime)');
+        $this->addSql('CREATE INDEX IDX_5C696D2F55AA53E2 ON checklist (updateTime)');
+        $this->addSql('ALTER TABLE checklist ADD CONSTRAINT FK_5C696D2F6D299429 FOREIGN KEY (campId) REFERENCES camp (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE');
+    }
+
+    public function down(Schema $schema): void {
+        // this down() migration is auto-generated, please modify it to your needs
+        $this->addSql('CREATE SCHEMA public');
+        $this->addSql('ALTER TABLE checklist DROP CONSTRAINT FK_5C696D2F6D299429');
+        $this->addSql('DROP TABLE checklist');
+    }
+}
diff --git a/api/src/Entity/Camp.php b/api/src/Entity/Camp.php
index eea7559c5e..88a895869c 100644
--- a/api/src/Entity/Camp.php
+++ b/api/src/Entity/Camp.php
@@ -136,6 +136,15 @@ class Camp extends BaseEntity implements BelongsToCampInterface, CopyFromPrototy
     #[ORM\OneToMany(targetEntity: MaterialList::class, mappedBy: 'camp', orphanRemoval: true, cascade: ['persist'])]
     public Collection $materialLists;
 
+    /**
+     * List of all Checklists of this Camp.
+     * Each Checklist is a List of ChecklistItems.
+     */
+    #[ApiProperty(writable: false, example: '["/checklists/1a2b3c4d"]')]
+    #[Groups(['read'])]
+    #[ORM\OneToMany(targetEntity: Checklist::class, mappedBy: 'camp', orphanRemoval: true, cascade: ['persist'])]
+    public Collection $checklists;
+
     /**
      * List all CampRootContentNodes of this Camp;
      * Calculated by the View view_camp_root_content_node.
@@ -378,6 +387,7 @@ public function __construct() {
         $this->progressLabels = new ArrayCollection();
         $this->activities = new ArrayCollection();
         $this->materialLists = new ArrayCollection();
+        $this->checklists = new ArrayCollection();
         $this->campRootContentNodes = new ArrayCollection();
     }
 
@@ -591,6 +601,32 @@ public function removeMaterialList(MaterialList $materialList): self {
         return $this;
     }
 
+    /**
+     * @return Checklist[]
+     */
+    public function getChecklists(): array {
+        return $this->checklists->getValues();
+    }
+
+    public function addChecklist(Checklist $checklist): self {
+        if (!$this->checklists->contains($checklist)) {
+            $this->checklists[] = $checklist;
+            $checklist->camp = $this;
+        }
+
+        return $this;
+    }
+
+    public function removeChecklist(Checklist $checklist): self {
+        if ($this->checklists->removeElement($checklist)) {
+            if ($checklist->camp === $this) {
+                $checklist->camp = null;
+            }
+        }
+
+        return $this;
+    }
+
     /**
      * @param Camp      $prototype
      * @param EntityMap $entityMap
@@ -608,6 +644,14 @@ public function copyFromPrototype($prototype, $entityMap): void {
             $materialList->copyFromPrototype($materialListPrototype, $entityMap);
         }
 
+        // copy Checklists
+        foreach ($prototype->getChecklists() as $checklistPrototype) {
+            $checklist = new Checklist();
+            $this->addChecklist($checklist);
+
+            $checklist->copyFromPrototype($checklistPrototype, $entityMap);
+        }
+
         // copy Categories
         foreach ($prototype->getCategories() as $categoryPrototype) {
             $category = new Category();
diff --git a/api/src/Entity/Checklist.php b/api/src/Entity/Checklist.php
new file mode 100644
index 0000000000..5b839f2ff5
--- /dev/null
+++ b/api/src/Entity/Checklist.php
@@ -0,0 +1,114 @@
+<?php
+
+namespace App\Entity;
+
+use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
+use ApiPlatform\Metadata\ApiFilter;
+use ApiPlatform\Metadata\ApiProperty;
+use ApiPlatform\Metadata\ApiResource;
+use ApiPlatform\Metadata\Delete;
+use ApiPlatform\Metadata\Get;
+use ApiPlatform\Metadata\GetCollection;
+use ApiPlatform\Metadata\Link;
+use ApiPlatform\Metadata\Patch;
+use ApiPlatform\Metadata\Post;
+use App\InputFilter;
+use App\Repository\ChecklistRepository;
+use App\State\ChecklistCreateProcessor;
+use App\Util\EntityMap;
+use Doctrine\ORM\Mapping as ORM;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+
+/**
+ * A Checklist
+ * Tree-Structure with ChecklistItems.
+ */
+#[ApiResource(
+    operations: [
+        new Get(
+            security: 'is_granted("CAMP_COLLABORATOR", object) or is_granted("CAMP_IS_PROTOTYPE", object)'
+        ),
+        new Patch(
+            security: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)'
+        ),
+        new Delete(
+            security: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)',
+            validate: true,
+            validationContext: ['groups' => ['delete']]
+        ),
+        new GetCollection(
+            security: 'is_authenticated()'
+        ),
+        new Post(
+            processor: ChecklistCreateProcessor::class,
+            denormalizationContext: ['groups' => ['write', 'create']],
+            securityPostDenormalize: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)'
+        ),
+        new GetCollection(
+            name: 'BelongsToCamp_App\Entity\Checklist_get_collection',
+            uriTemplate: self::CAMP_SUBRESOURCE_URI_TEMPLATE,
+            uriVariables: [
+                'campId' => new Link(
+                    fromClass: Camp::class,
+                    toProperty: 'camp',
+                    security: 'is_granted("CAMP_COLLABORATOR", camp) or is_granted("CAMP_IS_PROTOTYPE", camp)'
+                ),
+            ],
+        ),
+    ],
+    denormalizationContext: ['groups' => ['write']],
+    normalizationContext: ['groups' => ['read']],
+    order: ['camp.id', 'name'],
+)]
+#[ApiFilter(filterClass: SearchFilter::class, properties: ['camp'])]
+#[ORM\Entity(repositoryClass: ChecklistRepository::class)]
+class Checklist extends BaseEntity implements BelongsToCampInterface, CopyFromPrototypeInterface {
+    public const CAMP_SUBRESOURCE_URI_TEMPLATE = '/camps/{campId}/checklists.{_format}';
+
+    /**
+     * The camp this checklist belongs to.
+     */
+    #[ApiProperty(example: '/camps/1a2b3c4d')]
+    #[Groups(['read', 'create'])]
+    #[ORM\ManyToOne(targetEntity: Camp::class, inversedBy: 'checklists')]
+    #[ORM\JoinColumn(nullable: false, onDelete: 'cascade')]
+    public ?Camp $camp = null;
+
+    /**
+     * Copy contents from this source checklist.
+     */
+    #[ApiProperty(example: '/checklists/1a2b3c4d')]
+    #[Groups(['create'])]
+    public ?Checklist $copyChecklistSource;
+
+    /**
+     * The human readable name of the checklist.
+     */
+    #[ApiProperty(example: 'PBS Ausbildungsziele')]
+    #[Groups(['read', 'write'])]
+    #[InputFilter\Trim]
+    #[InputFilter\CleanText]
+    #[Assert\NotBlank]
+    #[Assert\Length(max: 32)]
+    #[ORM\Column(type: 'text')]
+    public ?string $name = null;
+
+    public function __construct() {
+        parent::__construct();
+    }
+
+    public function getCamp(): ?Camp {
+        return $this->camp;
+    }
+
+    /**
+     * @param Checklist $prototype
+     * @param EntityMap $entityMap
+     */
+    public function copyFromPrototype($prototype, $entityMap): void {
+        $entityMap->add($prototype, $this);
+
+        $this->name = $prototype->name;
+    }
+}
diff --git a/api/src/Repository/ChecklistRepository.php b/api/src/Repository/ChecklistRepository.php
new file mode 100644
index 0000000000..4325bb3a5a
--- /dev/null
+++ b/api/src/Repository/ChecklistRepository.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace App\Repository;
+
+use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
+use App\Entity\Checklist;
+use App\Entity\User;
+use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
+use Doctrine\ORM\QueryBuilder;
+use Doctrine\Persistence\ManagerRegistry;
+
+/**
+ * @method null|Checklist find($id, $lockMode = null, $lockVersion = null)
+ * @method null|Checklist findOneBy(array $criteria, array $orderBy = null)
+ * @method Checklist[]    findAll()
+ * @method Checklist[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
+ */
+class ChecklistRepository extends ServiceEntityRepository implements CanFilterByUserInterface {
+    use FiltersByCampCollaboration;
+
+    public function __construct(ManagerRegistry $registry) {
+        parent::__construct($registry, Checklist::class);
+    }
+
+    public function filterByUser(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, User $user): void {
+        $rootAlias = $queryBuilder->getRootAliases()[0];
+        $this->filterByCampCollaboration($queryBuilder, $user, "{$rootAlias}.camp");
+    }
+}
diff --git a/api/src/State/ChecklistCreateProcessor.php b/api/src/State/ChecklistCreateProcessor.php
new file mode 100644
index 0000000000..bbac6635f5
--- /dev/null
+++ b/api/src/State/ChecklistCreateProcessor.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace App\State;
+
+use ApiPlatform\Metadata\Operation;
+use ApiPlatform\State\ProcessorInterface;
+use App\Entity\Checklist;
+use App\State\Util\AbstractPersistProcessor;
+use App\Util\EntityMap;
+
+/**
+ * @template-extends AbstractPersistProcessor<Checklist>
+ */
+class ChecklistCreateProcessor extends AbstractPersistProcessor {
+    public function __construct(ProcessorInterface $decorated) {
+        parent::__construct($decorated);
+    }
+
+    /**
+     * @param Checklist $data
+     */
+    public function onBefore($data, Operation $operation, array $uriVariables = [], array $context = []): Checklist {
+        if (isset($data->copyChecklistSource)) {
+            // CopyChecklist Source is set -> copy it's content
+            $entityMap = new EntityMap();
+            $data->copyFromPrototype($data->copyChecklistSource, $entityMap);
+        }
+
+        return $data;
+    }
+}

From c814d64e2117b559c773961e7e25b4c789d2f033 Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Mon, 10 Jun 2024 19:48:55 +0200
Subject: [PATCH 154/273] add checklist-fixtures

---
 api/fixtures/checklists.yml                  | 16 ++++++++++++++++
 api/fixtures/performance_test/checklists.yml | 10 ++++++++++
 2 files changed, 26 insertions(+)
 create mode 100644 api/fixtures/checklists.yml
 create mode 100644 api/fixtures/performance_test/checklists.yml

diff --git a/api/fixtures/checklists.yml b/api/fixtures/checklists.yml
new file mode 100644
index 0000000000..e4515cedbd
--- /dev/null
+++ b/api/fixtures/checklists.yml
@@ -0,0 +1,16 @@
+App\Entity\Checklist:
+  checklist1:
+    camp: '@camp1'
+    name: 'J+S Ausbildungsziele'
+  checklist2WithNoItems:
+    camp: '@camp1'
+    name: 'PBS Ausbildungsziele'
+  checklist1camp2:
+    camp: '@camp2'
+    name: 'J+S Ausbildungsziele'
+  checklist1campUnrelated:
+    camp: '@campUnrelated'
+    name: 'J+S Ausbildungsziele'
+  checklist1campPrototype:
+    camp: '@campPrototype'
+    name: 'J+S Ausbildungsziele'
diff --git a/api/fixtures/performance_test/checklists.yml b/api/fixtures/performance_test/checklists.yml
new file mode 100644
index 0000000000..43a5cd4d59
--- /dev/null
+++ b/api/fixtures/performance_test/checklists.yml
@@ -0,0 +1,10 @@
+App\Entity\Checklist:
+  additional_checklist1_{1..400}:
+    camp: '@additionalCamp_<current()>'
+    name: 'J+S Ausbildungsziele'
+  additional_checklist2_{1..400}:
+    camp: '@additionalCamp_<current()>'
+    name: 'PBS Ausbildungsziele'
+  additional_checklist_camp1_{1..12}:
+    camp: '@camp1'
+    name: <name()>

From cac5d9b455afea5a9c4ebe69dd509ec60bd4274c Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Mon, 10 Jun 2024 20:50:02 +0200
Subject: [PATCH 155/273] fix unittests

fix unittest
---
 .../ListCampCollaborationsTest.php            |   2 +-
 .../ReadCampCollaborationTest.php             |   2 +-
 .../Api/SnapshotTests/ReadItemFixtureMap.php  |   1 +
 ... with data set camp_collaborations__1.json |  36 +
 ...tchesStructure with data set camps__1.json |   9 +
 ...Structure with data set checklists__1.json |  74 ++
 ... with data set camp_collaborations__1.json |   3 +
 ...tchesStructure with data set camps__1.json |   3 +
 ...Structure with data set checklists__1.json |  12 +
 ...hesStructure with data set periods__1.json |   3 +
 ...est__testOpenApiSpecMatchesSnapshot__1.yml | 917 ++++++++++++++++--
 ...t__testRootEndpointMatchesSnapshot__1.json |   4 +
 ...manceDidNotChangeForStableEndpoints__1.yml |  16 +-
 13 files changed, 977 insertions(+), 105 deletions(-)
 create mode 100644 api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklists__1.json
 create mode 100644 api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklists__1.json

diff --git a/api/tests/Api/CampCollaborations/ListCampCollaborationsTest.php b/api/tests/Api/CampCollaborations/ListCampCollaborationsTest.php
index 06975241fe..8ce744e353 100644
--- a/api/tests/Api/CampCollaborations/ListCampCollaborationsTest.php
+++ b/api/tests/Api/CampCollaborations/ListCampCollaborationsTest.php
@@ -114,6 +114,6 @@ public function testSqlQueryCount() {
         $client->enableProfiler();
         $client->request('GET', '/camp_collaborations');
 
-        $this->assertSqlQueryCount($client, 22);
+        $this->assertSqlQueryCount($client, 25);
     }
 }
diff --git a/api/tests/Api/CampCollaborations/ReadCampCollaborationTest.php b/api/tests/Api/CampCollaborations/ReadCampCollaborationTest.php
index a9916e6211..8c9eaf027f 100644
--- a/api/tests/Api/CampCollaborations/ReadCampCollaborationTest.php
+++ b/api/tests/Api/CampCollaborations/ReadCampCollaborationTest.php
@@ -126,6 +126,6 @@ public function testSqlQueryCount() {
         $client->enableProfiler();
         $client->request('GET', '/camp_collaborations/'.$campCollaboration->getId());
 
-        $this->assertSqlQueryCount($client, 14);
+        $this->assertSqlQueryCount($client, 15);
     }
 }
diff --git a/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php b/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php
index 3a799e428b..d2c4738057 100644
--- a/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php
+++ b/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php
@@ -11,6 +11,7 @@ public static function get(string $collectionEndpoint, array $fixtures): mixed {
             '/camp_collaborations' => $fixtures['campCollaboration1manager'],
             '/camps' => $fixtures['camp1'],
             '/categories' => $fixtures['category1'],
+            '/checklists' => $fixtures['checklist1'],
             '/content_node/column_layouts' => $fixtures['columnLayout2'],
             '/content_node/responsive_layouts' => $fixtures['responsiveLayout1'],
             '/content_types' => $fixtures['contentTypeSafetyConsiderations'],
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camp_collaborations__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camp_collaborations__1.json
index e2ff2cbcd4..e347c3664d 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camp_collaborations__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camp_collaborations__1.json	
@@ -14,6 +14,9 @@
                             "categories": {
                                 "href": "escaped_value"
                             },
+                            "checklists": {
+                                "href": "escaped_value"
+                            },
                             "creator": {
                                 "href": "escaped_value"
                             },
@@ -81,6 +84,9 @@
                             "categories": {
                                 "href": "escaped_value"
                             },
+                            "checklists": {
+                                "href": "escaped_value"
+                            },
                             "creator": {
                                 "href": "escaped_value"
                             },
@@ -163,6 +169,9 @@
                             "categories": {
                                 "href": "escaped_value"
                             },
+                            "checklists": {
+                                "href": "escaped_value"
+                            },
                             "creator": {
                                 "href": "escaped_value"
                             },
@@ -245,6 +254,9 @@
                             "categories": {
                                 "href": "escaped_value"
                             },
+                            "checklists": {
+                                "href": "escaped_value"
+                            },
                             "creator": {
                                 "href": "escaped_value"
                             },
@@ -327,6 +339,9 @@
                             "categories": {
                                 "href": "escaped_value"
                             },
+                            "checklists": {
+                                "href": "escaped_value"
+                            },
                             "creator": {
                                 "href": "escaped_value"
                             },
@@ -409,6 +424,9 @@
                             "categories": {
                                 "href": "escaped_value"
                             },
+                            "checklists": {
+                                "href": "escaped_value"
+                            },
                             "creator": {
                                 "href": "escaped_value"
                             },
@@ -491,6 +509,9 @@
                             "categories": {
                                 "href": "escaped_value"
                             },
+                            "checklists": {
+                                "href": "escaped_value"
+                            },
                             "creator": {
                                 "href": "escaped_value"
                             },
@@ -573,6 +594,9 @@
                             "categories": {
                                 "href": "escaped_value"
                             },
+                            "checklists": {
+                                "href": "escaped_value"
+                            },
                             "creator": {
                                 "href": "escaped_value"
                             },
@@ -655,6 +679,9 @@
                             "categories": {
                                 "href": "escaped_value"
                             },
+                            "checklists": {
+                                "href": "escaped_value"
+                            },
                             "creator": {
                                 "href": "escaped_value"
                             },
@@ -737,6 +764,9 @@
                             "categories": {
                                 "href": "escaped_value"
                             },
+                            "checklists": {
+                                "href": "escaped_value"
+                            },
                             "creator": {
                                 "href": "escaped_value"
                             },
@@ -819,6 +849,9 @@
                             "categories": {
                                 "href": "escaped_value"
                             },
+                            "checklists": {
+                                "href": "escaped_value"
+                            },
                             "creator": {
                                 "href": "escaped_value"
                             },
@@ -901,6 +934,9 @@
                             "categories": {
                                 "href": "escaped_value"
                             },
+                            "checklists": {
+                                "href": "escaped_value"
+                            },
                             "creator": {
                                 "href": "escaped_value"
                             },
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camps__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camps__1.json
index 2fa972bec6..567ab885bd 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camps__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set camps__1.json	
@@ -12,6 +12,9 @@
                     "categories": {
                         "href": "escaped_value"
                     },
+                    "checklists": {
+                        "href": "escaped_value"
+                    },
                     "creator": {
                         "href": "escaped_value"
                     },
@@ -59,6 +62,9 @@
                     "categories": {
                         "href": "escaped_value"
                     },
+                    "checklists": {
+                        "href": "escaped_value"
+                    },
                     "creator": {
                         "href": "escaped_value"
                     },
@@ -106,6 +112,9 @@
                     "categories": {
                         "href": "escaped_value"
                     },
+                    "checklists": {
+                        "href": "escaped_value"
+                    },
                     "creator": {
                         "href": "escaped_value"
                     },
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklists__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklists__1.json
new file mode 100644
index 0000000000..16ae186f1b
--- /dev/null
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklists__1.json	
@@ -0,0 +1,74 @@
+{
+    "_embedded": {
+        "items": [
+            {
+                "_links": {
+                    "camp": {
+                        "href": "escaped_value"
+                    },
+                    "self": {
+                        "href": "escaped_value"
+                    }
+                },
+                "id": "escaped_value",
+                "name": "escaped_value"
+            },
+            {
+                "_links": {
+                    "camp": {
+                        "href": "escaped_value"
+                    },
+                    "self": {
+                        "href": "escaped_value"
+                    }
+                },
+                "id": "escaped_value",
+                "name": "escaped_value"
+            },
+            {
+                "_links": {
+                    "camp": {
+                        "href": "escaped_value"
+                    },
+                    "self": {
+                        "href": "escaped_value"
+                    }
+                },
+                "id": "escaped_value",
+                "name": "escaped_value"
+            },
+            {
+                "_links": {
+                    "camp": {
+                        "href": "escaped_value"
+                    },
+                    "self": {
+                        "href": "escaped_value"
+                    }
+                },
+                "id": "escaped_value",
+                "name": "escaped_value"
+            }
+        ]
+    },
+    "_links": {
+        "items": [
+            {
+                "href": "escaped_value"
+            },
+            {
+                "href": "escaped_value"
+            },
+            {
+                "href": "escaped_value"
+            },
+            {
+                "href": "escaped_value"
+            }
+        ],
+        "self": {
+            "href": "escaped_value"
+        }
+    },
+    "totalItems": "escaped_value"
+}
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camp_collaborations__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camp_collaborations__1.json
index c84f1c605b..5867857e14 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camp_collaborations__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camp_collaborations__1.json	
@@ -11,6 +11,9 @@
                 "categories": {
                     "href": "escaped_value"
                 },
+                "checklists": {
+                    "href": "escaped_value"
+                },
                 "creator": {
                     "href": "escaped_value"
                 },
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camps__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camps__1.json
index 9afc1cba01..d7d5123b20 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camps__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set camps__1.json	
@@ -402,6 +402,9 @@
         "categories": {
             "href": "escaped_value"
         },
+        "checklists": {
+            "href": "escaped_value"
+        },
         "creator": {
             "href": "escaped_value"
         },
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklists__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklists__1.json
new file mode 100644
index 0000000000..39e7e3d07f
--- /dev/null
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklists__1.json	
@@ -0,0 +1,12 @@
+{
+    "_links": {
+        "camp": {
+            "href": "escaped_value"
+        },
+        "self": {
+            "href": "escaped_value"
+        }
+    },
+    "id": "escaped_value",
+    "name": "escaped_value"
+}
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set periods__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set periods__1.json
index 2075727cda..e8083f1bbd 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set periods__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set periods__1.json	
@@ -11,6 +11,9 @@
                 "categories": {
                     "href": "escaped_value"
                 },
+                "checklists": {
+                    "href": "escaped_value"
+                },
                 "creator": {
                     "href": "escaped_value"
                 },
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
index 86a06c6ca9..abc9872fce 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
@@ -2333,6 +2333,15 @@ components:
           format: iri-reference
           readOnly: true
           type: string
+        checklists:
+          description: 'List of all Checklists of this Camp.'
+          example: '["/checklists/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -2460,6 +2469,7 @@ components:
         - activities
         - campCollaborations
         - categories
+        - checklists
         - materialLists
         - name
         - periods
@@ -2526,6 +2536,15 @@ components:
           format: iri-reference
           readOnly: true
           type: string
+        checklists:
+          description: 'List of all Checklists of this Camp.'
+          example: '["/checklists/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -2646,6 +2665,7 @@ components:
         - activities
         - campCollaborations
         - categories
+        - checklists
         - materialLists
         - name
         - periods
@@ -2708,6 +2728,15 @@ components:
           format: iri-reference
           readOnly: true
           type: string
+        checklists:
+          description: 'List of all Checklists of this Camp.'
+          example: '["/checklists/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -2835,6 +2864,7 @@ components:
         - activities
         - campCollaborations
         - categories
+        - checklists
         - materialLists
         - name
         - periods
@@ -2897,6 +2927,15 @@ components:
           format: iri-reference
           readOnly: true
           type: string
+        checklists:
+          description: 'List of all Checklists of this Camp.'
+          example: '["/checklists/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -3024,6 +3063,7 @@ components:
         - activities
         - campCollaborations
         - categories
+        - checklists
         - materialLists
         - name
         - periods
@@ -3368,6 +3408,8 @@ components:
                   properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } }
                 categories:
                   properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } }
+                checklists:
+                  properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } }
                 creator:
                   properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } }
                 materialLists:
@@ -3380,6 +3422,7 @@ components:
                 - activities
                 - campCollaborations
                 - categories
+                - checklists
                 - materialLists
                 - periods
                 - progressLabels
@@ -3410,6 +3453,8 @@ components:
                 $ref: '#/components/schemas/CampCollaboration.jsonapi'
               -
                 $ref: '#/components/schemas/CampCollaboration.jsonapi'
+              -
+                $ref: '#/components/schemas/CampCollaboration.jsonapi'
           readOnly: true
           type: array
         periods:
@@ -3493,6 +3538,15 @@ components:
           format: iri-reference
           readOnly: true
           type: string
+        checklists:
+          description: 'List of all Checklists of this Camp.'
+          example: '["/checklists/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -3620,6 +3674,7 @@ components:
         - activities
         - campCollaborations
         - categories
+        - checklists
         - materialLists
         - name
         - periods
@@ -3695,6 +3750,15 @@ components:
           format: iri-reference
           readOnly: true
           type: string
+        checklists:
+          description: 'List of all Checklists of this Camp.'
+          example: '["/checklists/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -3815,6 +3879,7 @@ components:
         - activities
         - campCollaborations
         - categories
+        - checklists
         - materialLists
         - name
         - periods
@@ -3886,6 +3951,15 @@ components:
           format: iri-reference
           readOnly: true
           type: string
+        checklists:
+          description: 'List of all Checklists of this Camp.'
+          example: '["/checklists/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -4013,6 +4087,7 @@ components:
         - activities
         - campCollaborations
         - categories
+        - checklists
         - materialLists
         - name
         - periods
@@ -4084,6 +4159,15 @@ components:
           format: iri-reference
           readOnly: true
           type: string
+        checklists:
+          description: 'List of all Checklists of this Camp.'
+          example: '["/checklists/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -4211,6 +4295,7 @@ components:
         - activities
         - campCollaborations
         - categories
+        - checklists
         - materialLists
         - name
         - periods
@@ -4429,6 +4514,15 @@ components:
           format: iri-reference
           readOnly: true
           type: string
+        checklists:
+          description: 'List of all Checklists of this Camp.'
+          example: '["/checklists/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -4556,6 +4650,7 @@ components:
         - activities
         - campCollaborations
         - categories
+        - checklists
         - materialLists
         - name
         - periods
@@ -4645,6 +4740,15 @@ components:
           format: iri-reference
           readOnly: true
           type: string
+        checklists:
+          description: 'List of all Checklists of this Camp.'
+          example: '["/checklists/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -4765,6 +4869,7 @@ components:
         - activities
         - campCollaborations
         - categories
+        - checklists
         - materialLists
         - name
         - periods
@@ -4850,6 +4955,15 @@ components:
           format: iri-reference
           readOnly: true
           type: string
+        checklists:
+          description: 'List of all Checklists of this Camp.'
+          example: '["/checklists/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -4977,6 +5091,7 @@ components:
         - activities
         - campCollaborations
         - categories
+        - checklists
         - materialLists
         - name
         - periods
@@ -5062,6 +5177,15 @@ components:
           format: iri-reference
           readOnly: true
           type: string
+        checklists:
+          description: 'List of all Checklists of this Camp.'
+          example: '["/checklists/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -5189,6 +5313,7 @@ components:
         - activities
         - campCollaborations
         - categories
+        - checklists
         - materialLists
         - name
         - periods
@@ -7487,128 +7612,392 @@ components:
         - preferredContentTypes
         - short
       type: object
-    ColumnLayout-read:
+    Checklist-read:
       deprecated: false
-      description: ''
+      description: |-
+        A Checklist
+        Tree-Structure with ChecklistItems.
       properties:
-        children:
-          description: 'All content nodes that are direct children of this content node.'
-          example: '["/content_nodes/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
-          readOnly: true
-          type: array
-        contentType:
-          description: |-
-            Defines the type of this content node. There is a fixed list of types that are implemented
-            in eCamp. Depending on the type, different content data and different slots may be allowed
-            in a content node. The content type may not be changed once the content node is created.
-          example: /content_types/1a2b3c4d
+        camp:
+          description: 'The camp this checklist belongs to.'
+          example: /camps/1a2b3c4d
           format: iri-reference
           type: string
-        contentTypeName:
-          description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConsiderations
-          readOnly: true
-          type: string
-        data:
-          default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}'
-          description: |-
-            Holds the actual data of the content node
-            (overridden from abstract class in order to add specific validation).
-          example:
-            columns:
-              -
-                slot: '1'
-                width: 12
-          items:
-            type: string
-          type:
-            - array
-            - 'null'
         id:
           description: 'An internal, unique, randomly generated identifier of this entity.'
           example: 1a2b3c4d
           maxLength: 16
           readOnly: true
           type: string
-        instanceName:
-          description: |-
-            An optional name for this content node. This is useful when planning e.g. an alternative
-            version of the programme suited for bad weather, in addition to the normal version.
-          example: Schlechtwetterprogramm
+        name:
+          description: 'The human readable name of the checklist.'
+          example: 'PBS Ausbildungsziele'
           maxLength: 32
-          type:
-            - 'null'
-            - string
-        parent:
-          description: |-
-            The parent to which this content node belongs. Is null in case this content node is the
-            root of a content node tree. For non-root content nodes, the parent can be changed, as long
-            as the new parent is in the same camp as the old one.
-          example: /content_nodes/1a2b3c4d
+          type: string
+      required:
+        - camp
+        - name
+      type: object
+    Checklist-write:
+      deprecated: false
+      description: |-
+        A Checklist
+        Tree-Structure with ChecklistItems.
+      properties:
+        name:
+          description: 'The human readable name of the checklist.'
+          example: 'PBS Ausbildungsziele'
+          maxLength: 32
+          type: string
+      required:
+        - name
+      type: object
+    Checklist-write_create:
+      deprecated: false
+      description: |-
+        A Checklist
+        Tree-Structure with ChecklistItems.
+      properties:
+        camp:
+          description: 'The camp this checklist belongs to.'
+          example: /camps/1a2b3c4d
           format: iri-reference
-          type:
-            - 'null'
-            - string
-        position:
-          default: -1
-          description: |-
-            A whole number used for ordering multiple content nodes that are in the same slot of the
-            same parent. The API does not guarantee the uniqueness of parent+slot+position.
-          example: -1
-          type: integer
-        root:
-          description: |-
-            The content node that is the root of the content node tree. Refers to itself in case this
-            content node is the root.
-          example: /content_nodes/1a2b3c4d
+          type: string
+        copyChecklistSource:
+          description: 'Copy contents from this source checklist.'
+          example: /checklists/1a2b3c4d
           format: iri-reference
-          readOnly: true
           type:
             - 'null'
             - string
-        slot:
-          description: |-
-            The name of the slot in the parent in which this content node resides. The valid slot names
-            are defined by the content type of the parent.
-          example: '1'
+        name:
+          description: 'The human readable name of the checklist.'
+          example: 'PBS Ausbildungsziele'
           maxLength: 32
-          type:
-            - 'null'
-            - string
+          type: string
       required:
-        - children
-        - contentType
-        - data
-        - position
+        - camp
+        - name
       type: object
-    ColumnLayout-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries:
+    Checklist.jsonapi:
       deprecated: false
-      description: ''
+      description: |-
+        A Checklist
+        Tree-Structure with ChecklistItems.
       properties:
-        children:
-          description: 'All content nodes that are direct children of this content node.'
-          example: '["/content_nodes/1a2b3c4d"]'
+        data:
+          properties:
+            attributes:
+              properties:
+                _id:
+                  description: 'An internal, unique, randomly generated identifier of this entity.'
+                  example: 1a2b3c4d
+                  maxLength: 16
+                  readOnly: true
+                  type: string
+                name:
+                  description: 'The human readable name of the checklist.'
+                  example: 'PBS Ausbildungsziele'
+                  maxLength: 32
+                  type: string
+              required:
+                - name
+              type: object
+            id:
+              type: string
+            relationships:
+              properties:
+                camp:
+                  properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } }
+              required:
+                - camp
+              type: object
+            type:
+              type: string
+          required:
+            - id
+            - type
+          type: object
+        included:
+          description: 'Related resources requested via the "include" query parameter.'
+          externalDocs:
+            url: 'https://jsonapi.org/format/#fetching-includes'
           items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+            anyOf:
+              -
+                $ref: '#/components/schemas/Checklist.jsonapi'
           readOnly: true
           type: array
-        contentType:
-          description: |-
-            Defines the type of this content node. There is a fixed list of types that are implemented
-            in eCamp. Depending on the type, different content data and different slots may be allowed
-            in a content node. The content type may not be changed once the content node is created.
-          example: /content_types/1a2b3c4d
+      type: object
+    Checklist.jsonhal-read:
+      deprecated: false
+      description: |-
+        A Checklist
+        Tree-Structure with ChecklistItems.
+      properties:
+        _links:
+          properties:
+            self:
+              properties:
+                href:
+                  format: iri-reference
+                  type: string
+              type: object
+          type: object
+        camp:
+          description: 'The camp this checklist belongs to.'
+          example: /camps/1a2b3c4d
           format: iri-reference
           type: string
-        contentTypeName:
-          description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConsiderations
+        id:
+          description: 'An internal, unique, randomly generated identifier of this entity.'
+          example: 1a2b3c4d
+          maxLength: 16
+          readOnly: true
+          type: string
+        name:
+          description: 'The human readable name of the checklist.'
+          example: 'PBS Ausbildungsziele'
+          maxLength: 32
+          type: string
+      required:
+        - camp
+        - name
+      type: object
+    Checklist.jsonhal-write_create:
+      deprecated: false
+      description: |-
+        A Checklist
+        Tree-Structure with ChecklistItems.
+      properties:
+        _links:
+          properties:
+            self:
+              properties:
+                href:
+                  format: iri-reference
+                  type: string
+              type: object
+          type: object
+        camp:
+          description: 'The camp this checklist belongs to.'
+          example: /camps/1a2b3c4d
+          format: iri-reference
+          type: string
+        copyChecklistSource:
+          description: 'Copy contents from this source checklist.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        name:
+          description: 'The human readable name of the checklist.'
+          example: 'PBS Ausbildungsziele'
+          maxLength: 32
+          type: string
+      required:
+        - camp
+        - name
+      type: object
+    Checklist.jsonld-read:
+      deprecated: false
+      description: |-
+        A Checklist
+        Tree-Structure with ChecklistItems.
+      properties:
+        '@context':
+          oneOf:
+            -
+              additionalProperties: true
+              properties:
+                '@vocab':
+                  type: string
+                hydra:
+                  enum: ['http://www.w3.org/ns/hydra/core#']
+                  type: string
+              required:
+                - '@vocab'
+                - hydra
+              type: object
+            -
+              type: string
+          readOnly: true
+        '@id':
+          readOnly: true
+          type: string
+        '@type':
+          readOnly: true
+          type: string
+        camp:
+          description: 'The camp this checklist belongs to.'
+          example: /camps/1a2b3c4d
+          format: iri-reference
+          type: string
+        id:
+          description: 'An internal, unique, randomly generated identifier of this entity.'
+          example: 1a2b3c4d
+          maxLength: 16
+          readOnly: true
+          type: string
+        name:
+          description: 'The human readable name of the checklist.'
+          example: 'PBS Ausbildungsziele'
+          maxLength: 32
+          type: string
+      required:
+        - camp
+        - name
+      type: object
+    Checklist.jsonld-write_create:
+      deprecated: false
+      description: |-
+        A Checklist
+        Tree-Structure with ChecklistItems.
+      properties:
+        camp:
+          description: 'The camp this checklist belongs to.'
+          example: /camps/1a2b3c4d
+          format: iri-reference
+          type: string
+        copyChecklistSource:
+          description: 'Copy contents from this source checklist.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        name:
+          description: 'The human readable name of the checklist.'
+          example: 'PBS Ausbildungsziele'
+          maxLength: 32
+          type: string
+      required:
+        - camp
+        - name
+      type: object
+    ColumnLayout-read:
+      deprecated: false
+      description: ''
+      properties:
+        children:
+          description: 'All content nodes that are direct children of this content node.'
+          example: '["/content_nodes/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
+        contentType:
+          description: |-
+            Defines the type of this content node. There is a fixed list of types that are implemented
+            in eCamp. Depending on the type, different content data and different slots may be allowed
+            in a content node. The content type may not be changed once the content node is created.
+          example: /content_types/1a2b3c4d
+          format: iri-reference
+          type: string
+        contentTypeName:
+          description: 'The name of the content type of this content node. Read-only, for convenience.'
+          example: SafetyConsiderations
+          readOnly: true
+          type: string
+        data:
+          default: '{"columns":[{"slot":"1","width":6},{"slot":"2","width":6}]}'
+          description: |-
+            Holds the actual data of the content node
+            (overridden from abstract class in order to add specific validation).
+          example:
+            columns:
+              -
+                slot: '1'
+                width: 12
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        id:
+          description: 'An internal, unique, randomly generated identifier of this entity.'
+          example: 1a2b3c4d
+          maxLength: 16
+          readOnly: true
+          type: string
+        instanceName:
+          description: |-
+            An optional name for this content node. This is useful when planning e.g. an alternative
+            version of the programme suited for bad weather, in addition to the normal version.
+          example: Schlechtwetterprogramm
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+        parent:
+          description: |-
+            The parent to which this content node belongs. Is null in case this content node is the
+            root of a content node tree. For non-root content nodes, the parent can be changed, as long
+            as the new parent is in the same camp as the old one.
+          example: /content_nodes/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: |-
+            A whole number used for ordering multiple content nodes that are in the same slot of the
+            same parent. The API does not guarantee the uniqueness of parent+slot+position.
+          example: -1
+          type: integer
+        root:
+          description: |-
+            The content node that is the root of the content node tree. Refers to itself in case this
+            content node is the root.
+          example: /content_nodes/1a2b3c4d
+          format: iri-reference
+          readOnly: true
+          type:
+            - 'null'
+            - string
+        slot:
+          description: |-
+            The name of the slot in the parent in which this content node resides. The valid slot names
+            are defined by the content type of the parent.
+          example: '1'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+      required:
+        - children
+        - contentType
+        - data
+        - position
+      type: object
+    ColumnLayout-read_Activity.ActivityProgressLabel_Activity.ActivityResponsibles_Activity.ScheduleEntries:
+      deprecated: false
+      description: ''
+      properties:
+        children:
+          description: 'All content nodes that are direct children of this content node.'
+          example: '["/content_nodes/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
+        contentType:
+          description: |-
+            Defines the type of this content node. There is a fixed list of types that are implemented
+            in eCamp. Depending on the type, different content data and different slots may be allowed
+            in a content node. The content type may not be changed once the content node is created.
+          example: /content_types/1a2b3c4d
+          format: iri-reference
+          type: string
+        contentTypeName:
+          description: 'The name of the content type of this content node. Read-only, for convenience.'
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -22748,6 +23137,93 @@ paths:
       summary: 'Retrieves the collection of Category resources.'
       tags:
         - Category
+  '/camps/{campId}/checklists':
+    get:
+      deprecated: false
+      description: 'Retrieves the collection of Checklist resources.'
+      operationId: BelongsToCamp_App\Entity\Checklist_get_collection
+      parameters:
+        -
+          allowEmptyValue: false
+          allowReserved: false
+          deprecated: false
+          description: 'Checklist identifier'
+          explode: false
+          in: path
+          name: campId
+          required: true
+          schema:
+            type: string
+          style: simple
+        -
+          allowEmptyValue: true
+          allowReserved: false
+          deprecated: false
+          description: ''
+          explode: false
+          in: query
+          name: camp
+          required: false
+          schema:
+            type: string
+          style: form
+        -
+          allowEmptyValue: true
+          allowReserved: false
+          deprecated: false
+          description: ''
+          explode: true
+          in: query
+          name: 'camp[]'
+          required: false
+          schema:
+            items:
+              type: string
+            type: array
+          style: form
+      responses:
+        200:
+          content:
+            application/hal+json:
+              schema:
+                properties:
+                  _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Checklist.jsonhal-read' }, type: array } }, type: object }, { type: object }] }
+                  _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object }
+                  itemsPerPage: { minimum: 0, type: integer }
+                  totalItems: { minimum: 0, type: integer }
+                required:
+                  - _embedded
+                  - _links
+                type: object
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Checklist-read'
+                type: array
+            application/ld+json:
+              schema:
+                properties:
+                  'hydra:member': { items: { $ref: '#/components/schemas/Checklist.jsonld-read' }, type: array }
+                  'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object }
+                  'hydra:totalItems': { minimum: 0, type: integer }
+                  'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object }
+                required:
+                  - 'hydra:member'
+                type: object
+            application/vnd.api+json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Checklist.jsonapi'
+                type: array
+            text/html:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Checklist-read'
+                type: array
+          description: 'Checklist collection'
+      summary: 'Retrieves the collection of Checklist resources.'
+      tags:
+        - Checklist
   '/camps/{id}':
     delete:
       deprecated: false
@@ -23120,6 +23596,255 @@ paths:
       summary: 'Updates the Category resource.'
       tags:
         - Category
+  /checklists:
+    get:
+      deprecated: false
+      description: 'Retrieves the collection of Checklist resources.'
+      operationId: api_checklists_get_collection
+      parameters:
+        -
+          allowEmptyValue: true
+          allowReserved: false
+          deprecated: false
+          description: ''
+          explode: false
+          in: query
+          name: camp
+          required: false
+          schema:
+            type: string
+          style: form
+        -
+          allowEmptyValue: true
+          allowReserved: false
+          deprecated: false
+          description: ''
+          explode: true
+          in: query
+          name: 'camp[]'
+          required: false
+          schema:
+            items:
+              type: string
+            type: array
+          style: form
+      responses:
+        200:
+          content:
+            application/hal+json:
+              schema:
+                properties:
+                  _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Checklist.jsonhal-read' }, type: array } }, type: object }, { type: object }] }
+                  _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object }
+                  itemsPerPage: { minimum: 0, type: integer }
+                  totalItems: { minimum: 0, type: integer }
+                required:
+                  - _embedded
+                  - _links
+                type: object
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Checklist-read'
+                type: array
+            application/ld+json:
+              schema:
+                properties:
+                  'hydra:member': { items: { $ref: '#/components/schemas/Checklist.jsonld-read' }, type: array }
+                  'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object }
+                  'hydra:totalItems': { minimum: 0, type: integer }
+                  'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object }
+                required:
+                  - 'hydra:member'
+                type: object
+            application/vnd.api+json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Checklist.jsonapi'
+                type: array
+            text/html:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Checklist-read'
+                type: array
+          description: 'Checklist collection'
+      summary: 'Retrieves the collection of Checklist resources.'
+      tags:
+        - Checklist
+    post:
+      deprecated: false
+      description: 'Creates a Checklist resource.'
+      operationId: api_checklists_post
+      parameters: []
+      requestBody:
+        content:
+          application/hal+json:
+            schema:
+              $ref: '#/components/schemas/Checklist.jsonhal-write_create'
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Checklist-write_create'
+          application/ld+json:
+            schema:
+              $ref: '#/components/schemas/Checklist.jsonld-write_create'
+          application/vnd.api+json:
+            schema:
+              $ref: '#/components/schemas/Checklist.jsonapi'
+          text/html:
+            schema:
+              $ref: '#/components/schemas/Checklist-write_create'
+        description: 'The new Checklist resource'
+        required: true
+      responses:
+        201:
+          content:
+            application/hal+json:
+              schema:
+                $ref: '#/components/schemas/Checklist.jsonhal-read'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Checklist-read'
+            application/ld+json:
+              schema:
+                $ref: '#/components/schemas/Checklist.jsonld-read'
+            application/vnd.api+json:
+              schema:
+                $ref: '#/components/schemas/Checklist.jsonapi'
+            text/html:
+              schema:
+                $ref: '#/components/schemas/Checklist-read'
+          description: 'Checklist resource created'
+          links: []
+        400:
+          description: 'Invalid input'
+        422:
+          description: 'Unprocessable entity'
+      summary: 'Creates a Checklist resource.'
+      tags:
+        - Checklist
+  '/checklists/{id}':
+    delete:
+      deprecated: false
+      description: 'Removes the Checklist resource.'
+      operationId: api_checklists_id_delete
+      parameters:
+        -
+          allowEmptyValue: false
+          allowReserved: false
+          deprecated: false
+          description: 'Checklist identifier'
+          explode: false
+          in: path
+          name: id
+          required: true
+          schema:
+            type: string
+          style: simple
+      responses:
+        204:
+          description: 'Checklist resource deleted'
+        404:
+          description: 'Resource not found'
+      summary: 'Removes the Checklist resource.'
+      tags:
+        - Checklist
+    get:
+      deprecated: false
+      description: 'Retrieves a Checklist resource.'
+      operationId: api_checklists_id_get
+      parameters:
+        -
+          allowEmptyValue: false
+          allowReserved: false
+          deprecated: false
+          description: 'Checklist identifier'
+          explode: false
+          in: path
+          name: id
+          required: true
+          schema:
+            type: string
+          style: simple
+      responses:
+        200:
+          content:
+            application/hal+json:
+              schema:
+                $ref: '#/components/schemas/Checklist.jsonhal-read'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Checklist-read'
+            application/ld+json:
+              schema:
+                $ref: '#/components/schemas/Checklist.jsonld-read'
+            application/vnd.api+json:
+              schema:
+                $ref: '#/components/schemas/Checklist.jsonapi'
+            text/html:
+              schema:
+                $ref: '#/components/schemas/Checklist-read'
+          description: 'Checklist resource'
+        404:
+          description: 'Resource not found'
+      summary: 'Retrieves a Checklist resource.'
+      tags:
+        - Checklist
+    patch:
+      deprecated: false
+      description: 'Updates the Checklist resource.'
+      operationId: api_checklists_id_patch
+      parameters:
+        -
+          allowEmptyValue: false
+          allowReserved: false
+          deprecated: false
+          description: 'Checklist identifier'
+          explode: false
+          in: path
+          name: id
+          required: true
+          schema:
+            type: string
+          style: simple
+      requestBody:
+        content:
+          application/merge-patch+json:
+            schema:
+              $ref: '#/components/schemas/Checklist-write'
+          application/vnd.api+json:
+            schema:
+              $ref: '#/components/schemas/Checklist.jsonapi'
+        description: 'The updated Checklist resource'
+        required: true
+      responses:
+        200:
+          content:
+            application/hal+json:
+              schema:
+                $ref: '#/components/schemas/Checklist.jsonhal-read'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Checklist-read'
+            application/ld+json:
+              schema:
+                $ref: '#/components/schemas/Checklist.jsonld-read'
+            application/vnd.api+json:
+              schema:
+                $ref: '#/components/schemas/Checklist.jsonapi'
+            text/html:
+              schema:
+                $ref: '#/components/schemas/Checklist-read'
+          description: 'Checklist resource updated'
+          links: []
+        400:
+          description: 'Invalid input'
+        404:
+          description: 'Resource not found'
+        422:
+          description: 'Unprocessable entity'
+      summary: 'Updates the Checklist resource.'
+      tags:
+        - Checklist
   /content_node/column_layouts:
     get:
       deprecated: false
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json
index 69c3aebd5f..84921e20f9 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json
@@ -24,6 +24,10 @@
             "href": "\/categories{\/id}{?camp,camp[]}",
             "templated": true
         },
+        "checklists": {
+            "href": "\/checklists{\/id}{?camp,camp[]}",
+            "templated": true
+        },
         "columnLayouts": {
             "href": "\/content_node\/column_layouts{\/id}{?contentType,contentType[],root,root[],period}",
             "templated": true
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
index 1e0924898b..71b7a0fd66 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
@@ -4,12 +4,14 @@
 /activity_progress_labels/item: 7
 /activity_responsibles: 6
 /activity_responsibles/item: 8
-/camps: 26
-/camps/item: 21
-/camp_collaborations: 22
-/camp_collaborations/item: 14
+/camps: 29
+/camps/item: 22
+/camp_collaborations: 25
+/camp_collaborations/item: 15
 /categories: 11
 /categories/item: 9
+/checklists: 6
+/checklists/item: 7
 /content_types: 6
 /content_types/item: 6
 /days: 26
@@ -21,7 +23,7 @@
 /material_lists: 6
 /material_lists/item: 7
 /periods: 6
-/periods/item: 17
+/periods/item: 18
 /profiles: 6
 /profiles/item: 6
 /schedule_entries: 23
@@ -30,8 +32,8 @@
 '/activities?camp=': 13
 '/activity_progress_labels?camp=': 6
 '/activity_responsibles?activity.camp=': 6
-'/camp_collaborations?camp=': 12
-'/camp_collaborations?activityResponsibles.activity=': 14
+'/camp_collaborations?camp=': 13
+'/camp_collaborations?activityResponsibles.activity=': 15
 '/categories?camp=': 9
 '/content_types?categories=': 6
 '/day_responsibles?day.period=': 6

From 93f9d4b49446063ada5fe864b294498a5a7a4532 Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Sat, 15 Jun 2024 17:49:12 +0200
Subject: [PATCH 156/273] add Unittests

---
 .../Api/Checklists/CreateChecklistTest.php    | 311 ++++++++++++++++++
 .../Api/Checklists/DeleteChecklistTest.php    |  87 +++++
 .../Api/Checklists/ListChecklistTest.php      | 125 +++++++
 .../Api/Checklists/ReadChecklistTest.php      | 108 ++++++
 .../Api/Checklists/UpdateChecklistTest.php    | 220 +++++++++++++
 5 files changed, 851 insertions(+)
 create mode 100644 api/tests/Api/Checklists/CreateChecklistTest.php
 create mode 100644 api/tests/Api/Checklists/DeleteChecklistTest.php
 create mode 100644 api/tests/Api/Checklists/ListChecklistTest.php
 create mode 100644 api/tests/Api/Checklists/ReadChecklistTest.php
 create mode 100644 api/tests/Api/Checklists/UpdateChecklistTest.php

diff --git a/api/tests/Api/Checklists/CreateChecklistTest.php b/api/tests/Api/Checklists/CreateChecklistTest.php
new file mode 100644
index 0000000000..12392aca9d
--- /dev/null
+++ b/api/tests/Api/Checklists/CreateChecklistTest.php
@@ -0,0 +1,311 @@
+<?php
+
+namespace App\Tests\Api\Checklists;
+
+use ApiPlatform\Metadata\Get;
+use ApiPlatform\Metadata\Post;
+use App\Entity\Checklist;
+use App\Tests\Api\ECampApiTestCase;
+use App\Tests\Constraints\CompatibleHalResponse;
+use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
+use Symfony\Contracts\HttpClient\Exception\DecodingExceptionInterface;
+use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
+use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
+use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
+
+use function PHPUnit\Framework\assertThat;
+
+/**
+ * @internal
+ */
+class CreateChecklistTest extends ECampApiTestCase {
+    public function testCreateChecklistIsDeniedForAnonymousUser() {
+        static::createBasicClient()->request('POST', '/checklists', ['json' => $this->getExampleWritePayload()]);
+
+        $this->assertResponseStatusCodeSame(401);
+        $this->assertJsonContains([
+            'code' => 401,
+            'message' => 'JWT Token not found',
+        ]);
+    }
+
+    public function testCreateChecklistIsNotPossibleForUnrelatedUserBecauseCampIsNotReadable() {
+        static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()])
+            ->request('POST', '/checklists', ['json' => $this->getExampleWritePayload()])
+        ;
+
+        $this->assertResponseStatusCodeSame(400);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Item not found for "'.$this->getIriFor('camp1').'".',
+        ]);
+    }
+
+    public function testCreateChecklistIsNotPossibleForInactiveCollaboratorBecauseCampIsNotReadable() {
+        static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()])
+            ->request('POST', '/checklists', ['json' => $this->getExampleWritePayload()])
+        ;
+
+        $this->assertResponseStatusCodeSame(400);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Item not found for "'.$this->getIriFor('camp1').'".',
+        ]);
+    }
+
+    public function testCreateChecklistIsDeniedForGuest() {
+        static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()])
+            ->request('POST', '/checklists', ['json' => $this->getExampleWritePayload()])
+        ;
+
+        $this->assertResponseStatusCodeSame(403);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Access Denied.',
+        ]);
+    }
+
+    public function testCreateChecklistIsAllowedForMember() {
+        static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()])
+            ->request('POST', '/checklists', ['json' => $this->getExampleWritePayload()])
+        ;
+
+        $this->assertResponseStatusCodeSame(201);
+        $this->assertJsonContains($this->getExampleReadPayload());
+    }
+
+    public function testCreateChecklistIsAllowedForManager() {
+        static::createClientWithCredentials()->request('POST', '/checklists', ['json' => $this->getExampleWritePayload()]);
+
+        $this->assertResponseStatusCodeSame(201);
+        $this->assertJsonContains($this->getExampleReadPayload());
+    }
+
+    public function testCreateChecklistInCampPrototypeIsDeniedForUnrelatedUser() {
+        static::createClientWithCredentials()->request('POST', '/checklists', ['json' => $this->getExampleWritePayload([
+            'camp' => $this->getIriFor('campPrototype'),
+        ])]);
+
+        $this->assertResponseStatusCodeSame(403);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Access Denied.',
+        ]);
+    }
+
+    public function testCreateChecklistValidatesMissingCamp() {
+        static::createClientWithCredentials()->request('POST', '/checklists', ['json' => $this->getExampleWritePayload([], ['camp'])]);
+
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'violations' => [
+                [
+                    'propertyPath' => 'camp',
+                    'message' => 'This value should not be null.',
+                ],
+            ],
+        ]);
+    }
+
+    public function testCreateChecklistValidatesMissingName() {
+        static::createClientWithCredentials()->request('POST', '/checklists', ['json' => $this->getExampleWritePayload([], ['name'])]);
+
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'violations' => [
+                [
+                    'propertyPath' => 'name',
+                    'message' => 'This value should not be blank.',
+                ],
+            ],
+        ]);
+    }
+
+    public function testCreateChecklistValidatesBlankName() {
+        static::createClientWithCredentials()->request(
+            'POST',
+            '/checklists',
+            [
+                'json' => $this->getExampleWritePayload(
+                    [
+                        'name' => '',
+                    ]
+                ),
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'violations' => [
+                [
+                    'propertyPath' => 'name',
+                    'message' => 'This value should not be blank.',
+                ],
+            ],
+        ]);
+    }
+
+    public function testCreateChecklistValidatesTooLongName() {
+        static::createClientWithCredentials()->request(
+            'POST',
+            '/checklists',
+            [
+                'json' => $this->getExampleWritePayload(
+                    [
+                        'name' => str_repeat('l', 33),
+                    ]
+                ),
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'violations' => [
+                [
+                    'propertyPath' => 'name',
+                    'message' => 'This value is too long. It should have 32 characters or less.',
+                ],
+            ],
+        ]);
+    }
+
+    public function testCreateChecklistTrimsName() {
+        static::createClientWithCredentials()->request(
+            'POST',
+            '/checklists',
+            [
+                'json' => $this->getExampleWritePayload(
+                    [
+                        'name' => "  \t Ausbildungsziele\t ",
+                    ]
+                ),
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(201);
+        $this->assertJsonContains($this->getExampleReadPayload(
+            [
+                'name' => 'Ausbildungsziele',
+            ]
+        ));
+    }
+
+    public function testCreateChecklistCleansForbiddenCharactersFromName() {
+        static::createClientWithCredentials()->request(
+            'POST',
+            '/checklists',
+            [
+                'json' => $this->getExampleWritePayload(
+                    [
+                        'name' => "\n\t<b>Ausbildungsziele",
+                    ]
+                ),
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(201);
+        $this->assertJsonContains($this->getExampleReadPayload(
+            [
+                'name' => '<b>Ausbildungsziele',
+            ]
+        ));
+    }
+
+    public function testCreateChecklistFromCopySourceValidatesAccess() {
+        static::createClientWithCredentials(['email' => static::$fixtures['user8memberOnlyInCamp2']->getEmail()])->request(
+            'POST',
+            '/checklists',
+            ['json' => $this->getExampleWritePayload(
+                [
+                    'camp' => $this->getIriFor('camp2'),
+                    'copyChecklistSource' => $this->getIriFor('checklist1'),
+                ]
+            )]
+        );
+
+        // No Access on checklist1 -> BadRequest
+        $this->assertResponseStatusCodeSame(400);
+    }
+
+    public function testCreateChecklistFromCopySourceWithinSameCamp() {
+        static::createClientWithCredentials()->request(
+            'POST',
+            '/checklists',
+            ['json' => $this->getExampleWritePayload(
+                [
+                    'camp' => $this->getIriFor('camp1'),
+                    'copyChecklistSource' => $this->getIriFor('checklist1'),
+                ],
+            )]
+        );
+
+        // Checklist created
+        $this->assertResponseStatusCodeSame(201);
+    }
+
+    public function testCreateChecklistFromCopySourceAcrossCamp() {
+        static::createClientWithCredentials()->request(
+            'POST',
+            '/checklists',
+            ['json' => $this->getExampleWritePayload(
+                [
+                    'camp' => $this->getIriFor('camp2'),
+                    'copyChecklistSource' => $this->getIriFor('checklist1'),
+                ],
+            )]
+        );
+
+        // Checklist created
+        $this->assertResponseStatusCodeSame(201);
+    }
+
+    /**
+     * @throws RedirectionExceptionInterface
+     * @throws DecodingExceptionInterface
+     * @throws ClientExceptionInterface
+     * @throws TransportExceptionInterface
+     * @throws ServerExceptionInterface
+     */
+    public function testCreateResponseStructureMatchesReadResponseStructure() {
+        $client = static::createClientWithCredentials();
+        $client->disableReboot();
+        $createResponse = $client->request(
+            'POST',
+            '/checklists',
+            [
+                'json' => $this->getExampleWritePayload(),
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(201);
+
+        $createArray = $createResponse->toArray();
+        $newItemLink = $createArray['_links']['self']['href'];
+        $getItemResponse = $client->request('GET', $newItemLink);
+
+        assertThat($createArray, CompatibleHalResponse::isHalCompatibleWith($getItemResponse->toArray()));
+    }
+
+    public function getExampleWritePayload($attributes = [], $except = []) {
+        return $this->getExamplePayload(
+            Checklist::class,
+            Post::class,
+            array_merge([
+                'copyChecklistSource' => null,
+                'camp' => $this->getIriFor('camp1'),
+            ], $attributes),
+            [],
+            $except
+        );
+    }
+
+    public function getExampleReadPayload($attributes = [], $except = []) {
+        return $this->getExamplePayload(
+            Checklist::class,
+            Get::class,
+            $attributes,
+            ['camp', 'preferredContentTypes'],
+            $except
+        );
+    }
+}
diff --git a/api/tests/Api/Checklists/DeleteChecklistTest.php b/api/tests/Api/Checklists/DeleteChecklistTest.php
new file mode 100644
index 0000000000..f2033769e3
--- /dev/null
+++ b/api/tests/Api/Checklists/DeleteChecklistTest.php
@@ -0,0 +1,87 @@
+<?php
+
+namespace App\Tests\Api\Checklists;
+
+use App\Entity\Checklist;
+use App\Tests\Api\ECampApiTestCase;
+
+/**
+ * @internal
+ */
+class DeleteChecklistTest extends ECampApiTestCase {
+    public function testDeleteChecklistIsDeniedForAnonymousUser() {
+        $checklist = static::getFixture('checklist2WithNoItems');
+        static::createBasicClient()->request('DELETE', '/checklists/'.$checklist->getId());
+        $this->assertResponseStatusCodeSame(401);
+        $this->assertJsonContains([
+            'code' => 401,
+            'message' => 'JWT Token not found',
+        ]);
+    }
+
+    public function testDeleteChecklistIsDeniedForUnrelatedUser() {
+        $Checklist = static::getFixture('checklist2WithNoItems');
+        static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()])
+            ->request('DELETE', '/checklists/'.$Checklist->getId())
+        ;
+
+        $this->assertResponseStatusCodeSame(404);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Not Found',
+        ]);
+    }
+
+    public function testDeleteChecklistIsDeniedForInactiveCollaborator() {
+        $Checklist = static::getFixture('checklist2WithNoItems');
+        static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()])
+            ->request('DELETE', '/checklists/'.$Checklist->getId())
+        ;
+
+        $this->assertResponseStatusCodeSame(404);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Not Found',
+        ]);
+    }
+
+    public function testDeleteChecklistIsDeniedForGuest() {
+        $Checklist = static::getFixture('checklist2WithNoItems');
+        static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()])
+            ->request('DELETE', '/checklists/'.$Checklist->getId())
+        ;
+
+        $this->assertResponseStatusCodeSame(403);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Access Denied.',
+        ]);
+    }
+
+    public function testDeleteChecklistIsAllowedForMember() {
+        $Checklist = static::getFixture('checklist2WithNoItems');
+        static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()])
+            ->request('DELETE', '/checklists/'.$Checklist->getId())
+        ;
+        $this->assertResponseStatusCodeSame(204);
+        $this->assertNull($this->getEntityManager()->getRepository(Checklist::class)->find($Checklist->getId()));
+    }
+
+    public function testDeleteChecklistIsAllowedForManager() {
+        $Checklist = static::getFixture('checklist2WithNoItems');
+        static::createClientWithCredentials()->request('DELETE', '/checklists/'.$Checklist->getId());
+        $this->assertResponseStatusCodeSame(204);
+        $this->assertNull($this->getEntityManager()->getRepository(Checklist::class)->find($Checklist->getId()));
+    }
+
+    public function testDeleteChecklistFromCampPrototypeIsDeniedForUnrelatedUser() {
+        $Checklist = static::getFixture('checklist1campPrototype');
+        static::createClientWithCredentials()->request('DELETE', '/checklists/'.$Checklist->getId());
+
+        $this->assertResponseStatusCodeSame(403);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Access Denied.',
+        ]);
+    }
+}
diff --git a/api/tests/Api/Checklists/ListChecklistTest.php b/api/tests/Api/Checklists/ListChecklistTest.php
new file mode 100644
index 0000000000..ef75a68b01
--- /dev/null
+++ b/api/tests/Api/Checklists/ListChecklistTest.php
@@ -0,0 +1,125 @@
+<?php
+
+namespace App\Tests\Api\Checklists;
+
+use App\Tests\Api\ECampApiTestCase;
+
+/**
+ * @internal
+ */
+class ListChecklistTest extends ECampApiTestCase {
+    public function testListChecklistsIsDeniedForAnonymousUser() {
+        $response = static::createBasicClient()->request('GET', '/checklists');
+        $this->assertResponseStatusCodeSame(401);
+        $this->assertJsonContains([
+            'code' => 401,
+            'message' => 'JWT Token not found',
+        ]);
+    }
+
+    public function testListChecklistsIsAllowedForLoggedInUserButFiltered() {
+        // precondition: There is a checklist that the user doesn't have access to
+        $this->assertNotEmpty(static::$fixtures['checklist1campUnrelated']);
+
+        $response = static::createClientWithCredentials()->request('GET', '/checklists');
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'totalItems' => 4,
+            '_links' => [
+                'items' => [],
+            ],
+            '_embedded' => [
+                'items' => [],
+            ],
+        ]);
+        $this->assertEqualsCanonicalizing([
+            ['href' => $this->getIriFor('checklist1')],
+            ['href' => $this->getIriFor('checklist2WithNoItems')],
+            ['href' => $this->getIriFor('checklist1camp2')],
+            ['href' => $this->getIriFor('checklist1campPrototype')],
+        ], $response->toArray()['_links']['items']);
+    }
+
+    public function testListChecklistsFilteredByCampIsAllowedForCollaborator() {
+        $camp = static::getFixture('camp1');
+        $response = static::createClientWithCredentials()->request('GET', '/checklists?camp=%2Fcamps%2F'.$camp->getId());
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'totalItems' => 2,
+            '_links' => [
+                'items' => [],
+            ],
+            '_embedded' => [
+                'items' => [],
+            ],
+        ]);
+        $this->assertEqualsCanonicalizing([
+            ['href' => $this->getIriFor('checklist1')],
+            ['href' => $this->getIriFor('checklist2WithNoItems')],
+        ], $response->toArray()['_links']['items']);
+    }
+
+    public function testListChecklistsFilteredByCampIsDeniedForUnrelatedUser() {
+        $camp = static::getFixture('camp1');
+        $response = static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()])
+            ->request('GET', '/checklists?camp=%2Fcamps%2F'.$camp->getId())
+        ;
+
+        $this->assertResponseStatusCodeSame(200);
+
+        $this->assertJsonContains(['totalItems' => 0]);
+        $this->assertArrayNotHasKey('items', $response->toArray()['_links']);
+    }
+
+    public function testListChecklistsFilteredByCampIsDeniedForInactiveCollaborator() {
+        $camp = static::getFixture('camp1');
+        $response = static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()])
+            ->request('GET', '/checklists?camp=%2Fcamps%2F'.$camp->getId())
+        ;
+
+        $this->assertResponseStatusCodeSame(200);
+
+        $this->assertJsonContains(['totalItems' => 0]);
+        $this->assertArrayNotHasKey('items', $response->toArray()['_links']);
+    }
+
+    public function testListChecklistsFilteredByCampPrototypeIsAllowedForUnrelatedUser() {
+        $camp = static::getFixture('campPrototype');
+        $response = static::createClientWithCredentials()->request('GET', '/checklists?camp=%2Fcamps%2F'.$camp->getId());
+
+        $this->assertResponseStatusCodeSame(200);
+
+        $this->assertJsonContains(['totalItems' => 1]);
+        $this->assertEqualsCanonicalizing([
+            ['href' => $this->getIriFor('checklist1campPrototype')],
+        ], $response->toArray()['_links']['items']);
+    }
+
+    public function testListChecklistsAsCampSubresourceIsAllowedForCollaborator() {
+        $camp = static::getFixture('camp1');
+        $response = static::createClientWithCredentials()->request('GET', '/camps/'.$camp->getId().'/checklists');
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'totalItems' => 2,
+            '_links' => [
+                'items' => [],
+            ],
+            '_embedded' => [
+                'items' => [],
+            ],
+        ]);
+        $this->assertEqualsCanonicalizing([
+            ['href' => $this->getIriFor('checklist1')],
+            ['href' => $this->getIriFor('checklist2WithNoItems')],
+        ], $response->toArray()['_links']['items']);
+    }
+
+    public function testListChecklistsAsCampSubresourceIsDeniedForUnrelatedUser() {
+        $camp = static::getFixture('camp1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()])
+            ->request('GET', '/camps/'.$camp->getId().'/checklists')
+        ;
+
+        $this->assertResponseStatusCodeSame(404);
+    }
+}
diff --git a/api/tests/Api/Checklists/ReadChecklistTest.php b/api/tests/Api/Checklists/ReadChecklistTest.php
new file mode 100644
index 0000000000..1857746c1c
--- /dev/null
+++ b/api/tests/Api/Checklists/ReadChecklistTest.php
@@ -0,0 +1,108 @@
+<?php
+
+namespace App\Tests\Api\Checklists;
+
+use App\Entity\Checklist;
+use App\Tests\Api\ECampApiTestCase;
+
+/**
+ * @internal
+ */
+class ReadChecklistTest extends ECampApiTestCase {
+    public function testGetSingleChecklistIsDeniedForAnonymousUser() {
+        /** @var Checklist $checklist */
+        $checklist = static::getFixture('checklist1');
+        static::createBasicClient()->request('GET', '/checklists/'.$checklist->getId());
+        $this->assertResponseStatusCodeSame(401);
+        $this->assertJsonContains([
+            'code' => 401,
+            'message' => 'JWT Token not found',
+        ]);
+    }
+
+    public function testGetSingleChecklistIsDeniedForUnrelatedUser() {
+        /** @var Checklist $checklist */
+        $checklist = static::getFixture('checklist1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()])
+            ->request('GET', '/checklists/'.$checklist->getId())
+        ;
+        $this->assertResponseStatusCodeSame(404);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Not Found',
+        ]);
+    }
+
+    public function testGetSingleChecklistIsDeniedForInactiveCollaborator() {
+        /** @var Checklist $checklist */
+        $checklist = static::getFixture('checklist1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()])
+            ->request('GET', '/checklists/'.$checklist->getId())
+        ;
+        $this->assertResponseStatusCodeSame(404);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Not Found',
+        ]);
+    }
+
+    public function testGetSingleChecklistIsAllowedForGuest() {
+        /** @var Checklist $checklist */
+        $checklist = static::getFixture('checklist1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()])
+            ->request('GET', '/checklists/'.$checklist->getId())
+        ;
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'id' => $checklist->getId(),
+            'name' => $checklist->name,
+            '_links' => [
+                'camp' => ['href' => $this->getIriFor('camp1')],
+            ],
+        ]);
+    }
+
+    public function testGetSingleChecklistIsAllowedForMember() {
+        /** @var Checklist $checklist */
+        $checklist = static::getFixture('checklist1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()])
+            ->request('GET', '/checklists/'.$checklist->getId())
+        ;
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'id' => $checklist->getId(),
+            'name' => $checklist->name,
+            '_links' => [
+                'camp' => ['href' => $this->getIriFor('camp1')],
+            ],
+        ]);
+    }
+
+    public function testGetSingleChecklistIsAllowedForManager() {
+        /** @var Checklist $checklist */
+        $checklist = static::getFixture('checklist1');
+        static::createClientWithCredentials()->request('GET', '/checklists/'.$checklist->getId());
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'id' => $checklist->getId(),
+            'name' => $checklist->name,
+            '_links' => [
+                'camp' => ['href' => $this->getIriFor('camp1')],
+            ],
+        ]);
+    }
+
+    public function testGetSingleChecklistFromCampPrototypeIsAllowedForUnrelatedUser() {
+        /** @var Checklist $checklist */
+        $checklist = static::getFixture('checklist1campPrototype');
+        static::createClientWithCredentials()->request('GET', '/checklists/'.$checklist->getId());
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'id' => $checklist->getId(),
+            'name' => $checklist->name,
+            '_links' => [
+                'camp' => ['href' => $this->getIriFor('campPrototype')],
+            ],
+        ]);
+    }
+}
diff --git a/api/tests/Api/Checklists/UpdateChecklistTest.php b/api/tests/Api/Checklists/UpdateChecklistTest.php
new file mode 100644
index 0000000000..3006e3a38e
--- /dev/null
+++ b/api/tests/Api/Checklists/UpdateChecklistTest.php
@@ -0,0 +1,220 @@
+<?php
+
+namespace App\Tests\Api\Checklists;
+
+use App\Tests\Api\ECampApiTestCase;
+
+/**
+ * @internal
+ */
+class UpdateChecklistTest extends ECampApiTestCase {
+    public function testPatchChecklistIsDeniedForAnonymousUser() {
+        $checklist = static::getFixture('checklist1');
+        static::createBasicClient()->request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [
+            'name' => 'ChecklistName',
+        ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
+        $this->assertResponseStatusCodeSame(401);
+        $this->assertJsonContains([
+            'code' => 401,
+            'message' => 'JWT Token not found',
+        ]);
+    }
+
+    public function testPatchChecklistIsDeniedForUnrelatedUser() {
+        $checklist = static::getFixture('checklist1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()])
+            ->request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [
+                'name' => 'ChecklistName',
+            ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
+        ;
+        $this->assertResponseStatusCodeSame(404);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Not Found',
+        ]);
+    }
+
+    public function testPatchChecklistIsDeniedForInactiveCollaborator() {
+        $checklist = static::getFixture('checklist1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()])
+            ->request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [
+                'name' => 'ChecklistName',
+            ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
+        ;
+        $this->assertResponseStatusCodeSame(404);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Not Found',
+        ]);
+    }
+
+    public function testPatchChecklistIsDeniedForGuest() {
+        $checklist = static::getFixture('checklist1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()])
+            ->request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [
+                'name' => 'ChecklistName',
+            ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
+        ;
+        $this->assertResponseStatusCodeSame(403);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Access Denied.',
+        ]);
+    }
+
+    public function testPatchChecklistIsAllowedForMember() {
+        $checklist = static::getFixture('checklist1');
+        $response = static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()])
+            ->request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [
+                'name' => 'ChecklistName',
+            ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
+        ;
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'name' => 'ChecklistName',
+        ]);
+    }
+
+    public function testPatchChecklistIsAllowedForManager() {
+        $checklist = static::getFixture('checklist1');
+        $response = static::createClientWithCredentials()->request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [
+            'name' => 'ChecklistName',
+        ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'name' => 'ChecklistName',
+        ]);
+    }
+
+    public function testPatchChecklistInCampPrototypeIsDeniedForUnrelatedUser() {
+        $checklist = static::getFixture('checklist1campPrototype');
+        $response = static::createClientWithCredentials()->request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [
+            'name' => 'ChecklistName',
+        ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
+        $this->assertResponseStatusCodeSame(403);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Access Denied.',
+        ]);
+    }
+
+    public function testPatchChecklistDisallowsChangingCamp() {
+        $checklist = static::getFixture('checklist1');
+        static::createClientWithCredentials()->request('PATCH', '/checklists/'.$checklist->getId(), ['json' => [
+            'camp' => $this->getIriFor('camp2'),
+        ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
+
+        $this->assertResponseStatusCodeSame(400);
+        $this->assertJsonContains([
+            'detail' => 'Extra attributes are not allowed ("camp" is unknown).',
+        ]);
+    }
+
+    public function testPatchChecklistValidatesNullName() {
+        $checklist = static::getFixture('checklist1');
+        static::createClientWithCredentials()->request(
+            'PATCH',
+            '/checklists/'.$checklist->getId(),
+            [
+                'json' => [
+                    'name' => null,
+                ],
+                'headers' => ['Content-Type' => 'application/merge-patch+json'],
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(400);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'The type of the "name" attribute must be "string", "NULL" given.',
+        ]);
+    }
+
+    public function testPatchChecklistValidatesBlankName() {
+        $checklist = static::getFixture('checklist1');
+        static::createClientWithCredentials()->request(
+            'PATCH',
+            '/checklists/'.$checklist->getId(),
+            [
+                'json' => [
+                    'name' => ' ',
+                ],
+                'headers' => ['Content-Type' => 'application/merge-patch+json'],
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'violations' => [
+                [
+                    'propertyPath' => 'name',
+                    'message' => 'This value should not be blank.',
+                ],
+            ],
+        ]);
+    }
+
+    public function testPatchChecklistValidatesTooLongName() {
+        $checklist = static::getFixture('checklist1');
+        static::createClientWithCredentials()->request(
+            'PATCH',
+            '/checklists/'.$checklist->getId(),
+            [
+                'json' => [
+                    'name' => str_repeat('l', 33),
+                ],
+                'headers' => ['Content-Type' => 'application/merge-patch+json'],
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'violations' => [
+                [
+                    'propertyPath' => 'name',
+                    'message' => 'This value is too long. It should have 32 characters or less.',
+                ],
+            ],
+        ]);
+    }
+
+    public function testPatchChecklistTrimsName() {
+        $checklist = static::getFixture('checklist1');
+        static::createClientWithCredentials()->request(
+            'PATCH',
+            '/checklists/'.$checklist->getId(),
+            [
+                'json' => [
+                    'name' => "  \t ChecklistName\t ",
+                ],
+                'headers' => ['Content-Type' => 'application/merge-patch+json'], ]
+        );
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains(
+            [
+                'name' => 'ChecklistName',
+            ]
+        );
+    }
+
+    public function testPatchChecklistCleansForbiddenCharactersFromName() {
+        $checklist = static::getFixture('checklist1');
+        $client = static::createClientWithCredentials();
+        $client->disableReboot();
+        $client->request(
+            'PATCH',
+            '/checklists/'.$checklist->getId(),
+            [
+                'json' => [
+                    'name' => "<b>Checklist</b>Name\n\t<a>",
+                ],
+                'headers' => ['Content-Type' => 'application/merge-patch+json'], ]
+        );
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains(
+            [
+                'name' => '<b>Checklist</b>Name<a>',
+            ]
+        );
+    }
+}

From c8317bf0c0b18a7489725a3bbe26eed9a4d34f41 Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Sat, 15 Jun 2024 20:34:05 +0200
Subject: [PATCH 157/273] Add ChecklistItem

---
 api/fixtures/checklistItems.yml               |   23 +
 .../performance_test/checklistItems.yml       |   10 +
 .../schema/Version20240615180024.php          |   36 +
 api/src/Entity/Checklist.php                  |   51 +
 api/src/Entity/ChecklistItem.php              |  181 +++
 .../Repository/ChecklistItemRepository.php    |   37 +
 .../AssertBelongsToChecklist.php              |   10 +
 .../AssertBelongsToChecklistValidator.php     |   39 +
 .../Validator/ChecklistItem/AssertNoLoop.php  |   10 +
 .../ChecklistItem/AssertNoLoopValidator.php   |   46 +
 .../Api/SnapshotTests/ReadItemFixtureMap.php  |    1 +
 ...ture with data set checklist_items__1.json |  110 ++
 ...Structure with data set checklists__1.json |   12 +
 ...ture with data set checklist_items__1.json |   15 +
 ...Structure with data set checklists__1.json |    3 +
 ...est__testOpenApiSpecMatchesSnapshot__1.yml | 1024 +++++++++++++++--
 ...t__testRootEndpointMatchesSnapshot__1.json |    4 +
 ...manceDidNotChangeForStableEndpoints__1.yml |    2 +
 18 files changed, 1489 insertions(+), 125 deletions(-)
 create mode 100644 api/fixtures/checklistItems.yml
 create mode 100644 api/fixtures/performance_test/checklistItems.yml
 create mode 100644 api/migrations/schema/Version20240615180024.php
 create mode 100644 api/src/Entity/ChecklistItem.php
 create mode 100644 api/src/Repository/ChecklistItemRepository.php
 create mode 100644 api/src/Validator/ChecklistItem/AssertBelongsToChecklist.php
 create mode 100644 api/src/Validator/ChecklistItem/AssertBelongsToChecklistValidator.php
 create mode 100644 api/src/Validator/ChecklistItem/AssertNoLoop.php
 create mode 100644 api/src/Validator/ChecklistItem/AssertNoLoopValidator.php
 create mode 100644 api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklist_items__1.json
 create mode 100644 api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklist_items__1.json

diff --git a/api/fixtures/checklistItems.yml b/api/fixtures/checklistItems.yml
new file mode 100644
index 0000000000..3892d00a43
--- /dev/null
+++ b/api/fixtures/checklistItems.yml
@@ -0,0 +1,23 @@
+App\Entity\ChecklistItem:
+  checklistItem1_1_1:
+    checklist: '@checklist1'
+    text: 'Camp1_List1_Item1'
+  checklistItem1_1_2:
+    checklist: '@checklist1'
+    text: 'Camp1_List1_Item2'
+  checklistItem1_1_2_3:
+    checklist: '@checklist1'
+    parent: '@checklistItem1_1_2'
+    text: 'Camp1_List1_Item2_Item3'
+# checklist2WithNoItems:
+#   checklist: '@checklist2WithNoItems'
+#   text: 'Camp1_List2_Item1'
+  checklistItem2_1_1:
+    checklist: '@checklist1camp2'
+    text: 'Camp2_List1_Item1'
+  checklistItemUnrelated_1_1:
+    checklist: '@checklist1campUnrelated'
+    text: 'CampUnrelated_List1_Item1'
+  checklistItemPrototype_1_1:
+    checklist: '@checklist1campPrototype'
+    text: 'CampPrototype_List1_Item1'
diff --git a/api/fixtures/performance_test/checklistItems.yml b/api/fixtures/performance_test/checklistItems.yml
new file mode 100644
index 0000000000..ea01fe011d
--- /dev/null
+++ b/api/fixtures/performance_test/checklistItems.yml
@@ -0,0 +1,10 @@
+App\Entity\ChecklistItem:
+  additional_checklistItem1_{1..400}:
+    checklist: '@additional_checklist1_<current()>'
+    text: 'Item_<current()>'
+  additional_checklistItem2_{1..400}:
+    checklist: '@additional_checklist2_<current()>'
+    text: 'Item_<current()>'
+  additional_checklistItem_camp1_{1..12}:
+    camp: '@additional_checklist_camp1_1'
+    text: 'Item_<current()>'
diff --git a/api/migrations/schema/Version20240615180024.php b/api/migrations/schema/Version20240615180024.php
new file mode 100644
index 0000000000..0b3570cb64
--- /dev/null
+++ b/api/migrations/schema/Version20240615180024.php
@@ -0,0 +1,36 @@
+<?php
+
+declare(strict_types=1);
+
+namespace DoctrineMigrations;
+
+use Doctrine\DBAL\Schema\Schema;
+use Doctrine\Migrations\AbstractMigration;
+
+/**
+ * Auto-generated Migration: Please modify to your needs!
+ */
+final class Version20240615180024 extends AbstractMigration {
+    public function getDescription(): string {
+        return 'Add checklist_item table';
+    }
+
+    public function up(Schema $schema): void {
+        // this up() migration is auto-generated, please modify it to your needs
+        $this->addSql('CREATE TABLE checklist_item (id VARCHAR(16) NOT NULL, createTime TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, updateTime TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, text TEXT NOT NULL, position INT NOT NULL, checklistId VARCHAR(16) NOT NULL, parentId VARCHAR(16) DEFAULT NULL, PRIMARY KEY(id))');
+        $this->addSql('CREATE INDEX IDX_99EB20F9BA23A13 ON checklist_item (checklistId)');
+        $this->addSql('CREATE INDEX IDX_99EB20F910EE4CEE ON checklist_item (parentId)');
+        $this->addSql('CREATE INDEX IDX_99EB20F99D468A55 ON checklist_item (createTime)');
+        $this->addSql('CREATE INDEX IDX_99EB20F955AA53E2 ON checklist_item (updateTime)');
+        $this->addSql('ALTER TABLE checklist_item ADD CONSTRAINT FK_99EB20F9BA23A13 FOREIGN KEY (checklistId) REFERENCES checklist (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE');
+        $this->addSql('ALTER TABLE checklist_item ADD CONSTRAINT FK_99EB20F910EE4CEE FOREIGN KEY (parentId) REFERENCES checklist_item (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE');
+    }
+
+    public function down(Schema $schema): void {
+        // this down() migration is auto-generated, please modify it to your needs
+        $this->addSql('CREATE SCHEMA public');
+        $this->addSql('ALTER TABLE checklist_item DROP CONSTRAINT FK_99EB20F9BA23A13');
+        $this->addSql('ALTER TABLE checklist_item DROP CONSTRAINT FK_99EB20F910EE4CEE');
+        $this->addSql('DROP TABLE checklist_item');
+    }
+}
diff --git a/api/src/Entity/Checklist.php b/api/src/Entity/Checklist.php
index 5b839f2ff5..9a5ba7fd2c 100644
--- a/api/src/Entity/Checklist.php
+++ b/api/src/Entity/Checklist.php
@@ -16,6 +16,8 @@
 use App\Repository\ChecklistRepository;
 use App\State\ChecklistCreateProcessor;
 use App\Util\EntityMap;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\Common\Collections\Collection;
 use Doctrine\ORM\Mapping as ORM;
 use Symfony\Component\Serializer\Annotation\Groups;
 use Symfony\Component\Validator\Constraints as Assert;
@@ -82,6 +84,14 @@ class Checklist extends BaseEntity implements BelongsToCampInterface, CopyFromPr
     #[Groups(['create'])]
     public ?Checklist $copyChecklistSource;
 
+    /**
+     * All ChecklistItems that belong to this Checklist.
+     */
+    #[ApiProperty(writable: false, example: '["/checklist_items/1a2b3c4d"]')]
+    #[Groups(['read'])]
+    #[ORM\OneToMany(targetEntity: ChecklistItem::class, mappedBy: 'checklist', cascade: ['persist'])]
+    public Collection $checklistItems;
+
     /**
      * The human readable name of the checklist.
      */
@@ -96,12 +106,40 @@ class Checklist extends BaseEntity implements BelongsToCampInterface, CopyFromPr
 
     public function __construct() {
         parent::__construct();
+        $this->checklistItems = new ArrayCollection();
     }
 
     public function getCamp(): ?Camp {
         return $this->camp;
     }
 
+    /**
+     * @return ChecklistItem[]
+     */
+    public function getChecklistItems(): array {
+        return $this->checklistItems->getValues();
+    }
+
+    public function addChecklistItem(ChecklistItem $checklistItem): self {
+        if (!$this->checklistItems->contains($checklistItem)) {
+            $this->checklistItems[] = $checklistItem;
+            $checklistItem->checklist = $this;
+        }
+
+        return $this;
+    }
+
+    public function removeChecklistItem(ChecklistItem $checklistItem): self {
+        if ($this->checklistItems->removeElement($checklistItem)) {
+            // set the owning side to null (unless already changed)
+            if ($checklistItem->checklist === $this) {
+                $checklistItem->checklist = null;
+            }
+        }
+
+        return $this;
+    }
+
     /**
      * @param Checklist $prototype
      * @param EntityMap $entityMap
@@ -109,6 +147,19 @@ public function getCamp(): ?Camp {
     public function copyFromPrototype($prototype, $entityMap): void {
         $entityMap->add($prototype, $this);
 
+        // copy Checklist base properties
         $this->name = $prototype->name;
+
+        // deep copy ChecklistItems
+        foreach ($prototype->getChecklistItems() as $checklistItemPrototype) {
+            // deep copy root ChecklistItems
+            // skip non-root ChecklistItems as these are copyed by there parent
+            if (null == $checklistItemPrototype->parent) {
+                $checklistItem = new ChecklistItem();
+                $this->addChecklistItem($checklistItem);
+
+                $checklistItem->copyFromPrototype($checklistItemPrototype, $entityMap);
+            }
+        }
     }
 }
diff --git a/api/src/Entity/ChecklistItem.php b/api/src/Entity/ChecklistItem.php
new file mode 100644
index 0000000000..aee087b9a6
--- /dev/null
+++ b/api/src/Entity/ChecklistItem.php
@@ -0,0 +1,181 @@
+<?php
+
+namespace App\Entity;
+
+use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
+use ApiPlatform\Metadata\ApiFilter;
+use ApiPlatform\Metadata\ApiProperty;
+use ApiPlatform\Metadata\ApiResource;
+use ApiPlatform\Metadata\Delete;
+use ApiPlatform\Metadata\Get;
+use ApiPlatform\Metadata\GetCollection;
+use ApiPlatform\Metadata\Link;
+use ApiPlatform\Metadata\Patch;
+use ApiPlatform\Metadata\Post;
+use App\InputFilter;
+use App\Repository\ChecklistItemRepository;
+use App\Util\EntityMap;
+use App\Validator\ChecklistItem\AssertBelongsToChecklist;
+use App\Validator\ChecklistItem\AssertNoLoop;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\Common\Collections\Collection;
+use Doctrine\ORM\Mapping as ORM;
+use Gedmo\Mapping\Annotation as Gedmo;
+use Symfony\Component\Serializer\Annotation\Groups;
+use Symfony\Component\Validator\Constraints as Assert;
+
+/**
+ * A ChecklistItem
+ * A Checklist contains a Tree-Structure of ChecklistItems.
+ */
+#[ApiResource(
+    operations: [
+        new Get(
+            security: 'is_granted("CAMP_COLLABORATOR", object) or is_granted("CAMP_IS_PROTOTYPE", object)'
+        ),
+        new Patch(
+            security: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)'
+        ),
+        new Delete(
+            security: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)',
+            validate: true,
+            validationContext: ['groups' => ['delete']]
+        ),
+        new GetCollection(
+            security: 'is_authenticated()'
+        ),
+        new Post(
+            denormalizationContext: ['groups' => ['write', 'create']],
+            securityPostDenormalize: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)'
+        ),
+        new GetCollection(
+            name: 'BelongsToChecklist_App\Entity\ChecklistItem_get_collection',
+            uriTemplate: self::CHECKLIST_SUBRESOURCE_URI_TEMPLATE,
+            uriVariables: [
+                'checklistId' => new Link(
+                    fromClass: Checklist::class,
+                    toProperty: 'checklist',
+                    security: 'is_granted("CAMP_COLLABORATOR", checklist) or is_granted("CAMP_IS_PROTOTYPE", checklist)'
+                ),
+            ],
+        ),
+    ],
+    denormalizationContext: ['groups' => ['write']],
+    normalizationContext: ['groups' => ['read']],
+    order: ['checklist.id', 'id'],
+)]
+#[ApiFilter(filterClass: SearchFilter::class, properties: ['checklist'])]
+#[ORM\Entity(repositoryClass: ChecklistItemRepository::class)]
+class ChecklistItem extends BaseEntity implements BelongsToCampInterface, CopyFromPrototypeInterface {
+    public const CHECKLIST_SUBRESOURCE_URI_TEMPLATE = '/checklists/{checklistId}/checklist_items.{_format}';
+
+    /**
+     * The Checklist this Item belongs to.
+     */
+    #[ApiProperty(example: '/checklists/1a2b3c4d')]
+    #[Groups(['read', 'create'])]
+    #[ORM\ManyToOne(targetEntity: Checklist::class, inversedBy: 'checklistItems')]
+    #[ORM\JoinColumn(nullable: false, onDelete: 'cascade')]
+    public ?Checklist $checklist = null;
+
+    /**
+     * The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the
+     * root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long
+     * as the new parent is in the same checklist as the old one.
+     */
+    #[AssertBelongsToChecklist(groups: ['update'])]
+    #[AssertNoLoop(groups: ['update'])]
+    #[ApiProperty(example: '/checklist_items/1a2b3c4d')]
+    #[Gedmo\SortableGroup]
+    #[Groups(['read', 'write'])]
+    #[ORM\ManyToOne(targetEntity: ChecklistItem::class, inversedBy: 'children')]
+    #[ORM\JoinColumn(onDelete: 'CASCADE')]
+    public ?ChecklistItem $parent = null;
+
+    /**
+     * All ChecklistItems that are direct children of this ChecklistItem.
+     */
+    #[ApiProperty(writable: false, example: '["/checklist_items/1a2b3c4d"]')]
+    #[Groups(['read'])]
+    #[ORM\OneToMany(targetEntity: ChecklistItem::class, mappedBy: 'parent', cascade: ['persist'])]
+    public Collection $children;
+
+    /**
+     * The human readable text of the checklist-item.
+     */
+    #[ApiProperty(example: 'Pfaditechnick')]
+    #[Groups(['read', 'write'])]
+    #[InputFilter\Trim]
+    #[InputFilter\CleanText]
+    #[Assert\NotBlank]
+    #[Assert\Length(max: 64)]
+    #[ORM\Column(type: 'text')]
+    public ?string $text = null;
+
+    /**
+     * A whole number used for ordering multiple checklist items that are in the same parent.
+     * The API does not guarantee the uniqueness of parent+position.
+     */
+    #[ApiProperty(example: '0')]
+    #[Gedmo\SortablePosition]
+    #[Groups(['read', 'write'])]
+    #[ORM\Column(type: 'integer', nullable: false)]
+    public int $position = -1;
+
+    public function __construct() {
+        parent::__construct();
+        $this->children = new ArrayCollection();
+    }
+
+    #[ApiProperty(readable: false)]
+    public function getCamp(): ?Camp {
+        return $this->checklist?->getCamp();
+    }
+
+    /**
+     * @return ChecklistItem[]
+     */
+    public function getChildren(): array {
+        return $this->children->getValues();
+    }
+
+    public function addChild(self $child): self {
+        if (!$this->children->contains($child)) {
+            $this->children[] = $child;
+            $child->parent = $this;
+        }
+
+        return $this;
+    }
+
+    public function removeChild(self $child): self {
+        if ($this->children->removeElement($child)) {
+            // set the owning side to null (unless already changed)
+            if ($child->parent === $this) {
+                $child->parent = null;
+            }
+        }
+
+        return $this;
+    }
+
+    /**
+     * @param ChecklistItem $prototype
+     * @param EntityMap     $entityMap
+     */
+    public function copyFromPrototype($prototype, $entityMap): void {
+        $entityMap->add($prototype, $this);
+
+        // copy ChecklistItem base properties
+        $this->text = $prototype->text;
+
+        // deep copy ChecklistItems
+        foreach ($prototype->getChildren() as $childPrototype) {
+            $child = new ChecklistItem();
+            $this->addChild($child);
+            $this->checklist->addChecklistItem($child);
+
+            $child->copyFromPrototype($childPrototype, $entityMap);
+        }
+    }
+}
diff --git a/api/src/Repository/ChecklistItemRepository.php b/api/src/Repository/ChecklistItemRepository.php
new file mode 100644
index 0000000000..b7e45f2d10
--- /dev/null
+++ b/api/src/Repository/ChecklistItemRepository.php
@@ -0,0 +1,37 @@
+<?php
+
+namespace App\Repository;
+
+use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
+use App\Entity\Checklist;
+use App\Entity\ChecklistItem;
+use App\Entity\User;
+use App\Entity\UserCamp;
+use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
+use Doctrine\ORM\Query\Expr\Join;
+use Doctrine\ORM\QueryBuilder;
+use Doctrine\Persistence\ManagerRegistry;
+
+/**
+ * @method null|ChecklistItem find($id, $lockMode = null, $lockVersion = null)
+ * @method null|ChecklistItem findOneBy(array $criteria, array $orderBy = null)
+ * @method ChecklistItem[]    findAll()
+ * @method ChecklistItem[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
+ */
+class ChecklistItemRepository extends ServiceEntityRepository implements CanFilterByUserInterface {
+    public function __construct(ManagerRegistry $registry) {
+        parent::__construct($registry, ChecklistItem::class);
+    }
+
+    public function filterByUser(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, User $user): void {
+        $checklistQry = $this->getEntityManager()->createQueryBuilder();
+        $checklistQry->select('c');
+        $checklistQry->from(Checklist::class, 'c');
+        $checklistQry->join(UserCamp::class, 'uc', Join::WITH, 'c.camp = uc.camp');
+        $checklistQry->where('uc.user = :current_user');
+
+        $rootAlias = $queryBuilder->getRootAliases()[0];
+        $queryBuilder->andWhere($queryBuilder->expr()->in("{$rootAlias}.checklist", $checklistQry->getDQL()));
+        $queryBuilder->setParameter('current_user', $user);
+    }
+}
diff --git a/api/src/Validator/ChecklistItem/AssertBelongsToChecklist.php b/api/src/Validator/ChecklistItem/AssertBelongsToChecklist.php
new file mode 100644
index 0000000000..ceb67ccc17
--- /dev/null
+++ b/api/src/Validator/ChecklistItem/AssertBelongsToChecklist.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace App\Validator\ChecklistItem;
+
+use Symfony\Component\Validator\Constraint;
+
+#[\Attribute]
+class AssertBelongsToChecklist extends Constraint {
+    public string $message = 'Must belong to the same checklist.';
+}
diff --git a/api/src/Validator/ChecklistItem/AssertBelongsToChecklistValidator.php b/api/src/Validator/ChecklistItem/AssertBelongsToChecklistValidator.php
new file mode 100644
index 0000000000..01aaa2fb76
--- /dev/null
+++ b/api/src/Validator/ChecklistItem/AssertBelongsToChecklistValidator.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace App\Validator\ChecklistItem;
+
+use App\Entity\ChecklistItem;
+use Symfony\Component\HttpFoundation\RequestStack;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+class AssertBelongsToChecklistValidator extends ConstraintValidator {
+    public function __construct(public RequestStack $requestStack) {}
+
+    public function validate($value, Constraint $constraint): void {
+        if (!$constraint instanceof AssertBelongsToChecklist) {
+            throw new UnexpectedTypeException($constraint, AssertBelongsToChecklist::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!$value instanceof ChecklistItem) {
+            throw new UnexpectedValueException($value, ChecklistItem::class);
+        }
+
+        $object = $this->context->getObject();
+        if (!$object instanceof ChecklistItem) {
+            throw new UnexpectedValueException($object, ChecklistItem::class);
+        }
+
+        if ($value->checklist->getId() !== $object->checklist->getId()) {
+            $this->context->buildViolation($constraint->message)
+                ->addViolation()
+            ;
+        }
+    }
+}
diff --git a/api/src/Validator/ChecklistItem/AssertNoLoop.php b/api/src/Validator/ChecklistItem/AssertNoLoop.php
new file mode 100644
index 0000000000..f60e2bba67
--- /dev/null
+++ b/api/src/Validator/ChecklistItem/AssertNoLoop.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace App\Validator\ChecklistItem;
+
+use Symfony\Component\Validator\Constraint;
+
+#[\Attribute]
+class AssertNoLoop extends Constraint {
+    public $message = 'Must not form a loop of parent-child relations.';
+}
diff --git a/api/src/Validator/ChecklistItem/AssertNoLoopValidator.php b/api/src/Validator/ChecklistItem/AssertNoLoopValidator.php
new file mode 100644
index 0000000000..2383a21172
--- /dev/null
+++ b/api/src/Validator/ChecklistItem/AssertNoLoopValidator.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace App\Validator\ChecklistItem;
+
+use App\Entity\ChecklistItem;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+class AssertNoLoopValidator extends ConstraintValidator {
+    public function validate($value, Constraint $constraint): void {
+        if (!$constraint instanceof AssertNoLoop) {
+            throw new UnexpectedTypeException($constraint, AssertNoLoop::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        $object = $this->context->getObject();
+        if (!$object instanceof ChecklistItem) {
+            throw new UnexpectedValueException($object, ChecklistItem::class);
+        }
+
+        /** @var ChecklistItem $parent */
+        $parent = $value;
+
+        // $seen keeps track of all parents that we have visited. This is for a safety
+        // bailout mechanism to avoid an infinite loop in case there is flawed data in the DB
+        $seen = [];
+
+        while (null !== $parent && !in_array($parent->getId(), $seen)) {
+            if ($parent->getId() === $object->getId()) {
+                $this->context->buildViolation($constraint->message)
+                    ->addViolation()
+                ;
+
+                return;
+            }
+
+            $seen[] = $parent->getId();
+            $parent = $parent->parent;
+        }
+    }
+}
diff --git a/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php b/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php
index d2c4738057..a07f974987 100644
--- a/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php
+++ b/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php
@@ -12,6 +12,7 @@ public static function get(string $collectionEndpoint, array $fixtures): mixed {
             '/camps' => $fixtures['camp1'],
             '/categories' => $fixtures['category1'],
             '/checklists' => $fixtures['checklist1'],
+            '/checklist_items' => $fixtures['checklistItem1_1_1'],
             '/content_node/column_layouts' => $fixtures['columnLayout2'],
             '/content_node/responsive_layouts' => $fixtures['responsiveLayout1'],
             '/content_types' => $fixtures['contentTypeSafetyConsiderations'],
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklist_items__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklist_items__1.json
new file mode 100644
index 0000000000..82a195c448
--- /dev/null
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklist_items__1.json	
@@ -0,0 +1,110 @@
+{
+    "_embedded": {
+        "items": [
+            {
+                "_links": {
+                    "checklist": {
+                        "href": "escaped_value"
+                    },
+                    "children": [],
+                    "parent": "escaped_value",
+                    "self": {
+                        "href": "escaped_value"
+                    }
+                },
+                "id": "escaped_value",
+                "position": "escaped_value",
+                "text": "escaped_value"
+            },
+            {
+                "_links": {
+                    "checklist": {
+                        "href": "escaped_value"
+                    },
+                    "children": [],
+                    "parent": "escaped_value",
+                    "self": {
+                        "href": "escaped_value"
+                    }
+                },
+                "id": "escaped_value",
+                "position": "escaped_value",
+                "text": "escaped_value"
+            },
+            {
+                "_links": {
+                    "checklist": {
+                        "href": "escaped_value"
+                    },
+                    "children": [],
+                    "parent": "escaped_value",
+                    "self": {
+                        "href": "escaped_value"
+                    }
+                },
+                "id": "escaped_value",
+                "position": "escaped_value",
+                "text": "escaped_value"
+            },
+            {
+                "_links": {
+                    "checklist": {
+                        "href": "escaped_value"
+                    },
+                    "children": [],
+                    "parent": {
+                        "href": "escaped_value"
+                    },
+                    "self": {
+                        "href": "escaped_value"
+                    }
+                },
+                "id": "escaped_value",
+                "position": "escaped_value",
+                "text": "escaped_value"
+            },
+            {
+                "_links": {
+                    "checklist": {
+                        "href": "escaped_value"
+                    },
+                    "children": [
+                        {
+                            "href": "escaped_value"
+                        }
+                    ],
+                    "parent": "escaped_value",
+                    "self": {
+                        "href": "escaped_value"
+                    }
+                },
+                "id": "escaped_value",
+                "position": "escaped_value",
+                "text": "escaped_value"
+            }
+        ]
+    },
+    "_links": {
+        "items": [
+            {
+                "href": "escaped_value"
+            },
+            {
+                "href": "escaped_value"
+            },
+            {
+                "href": "escaped_value"
+            },
+            {
+                "href": "escaped_value"
+            },
+            {
+                "href": "escaped_value"
+            }
+        ],
+        "self": {
+            "href": "escaped_value"
+        }
+    },
+    "totalItems": "escaped_value"
+}
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklists__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklists__1.json
index 16ae186f1b..feed0e6431 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklists__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set checklists__1.json	
@@ -6,6 +6,9 @@
                     "camp": {
                         "href": "escaped_value"
                     },
+                    "checklistItems": {
+                        "href": "escaped_value"
+                    },
                     "self": {
                         "href": "escaped_value"
                     }
@@ -18,6 +21,9 @@
                     "camp": {
                         "href": "escaped_value"
                     },
+                    "checklistItems": {
+                        "href": "escaped_value"
+                    },
                     "self": {
                         "href": "escaped_value"
                     }
@@ -30,6 +36,9 @@
                     "camp": {
                         "href": "escaped_value"
                     },
+                    "checklistItems": {
+                        "href": "escaped_value"
+                    },
                     "self": {
                         "href": "escaped_value"
                     }
@@ -42,6 +51,9 @@
                     "camp": {
                         "href": "escaped_value"
                     },
+                    "checklistItems": {
+                        "href": "escaped_value"
+                    },
                     "self": {
                         "href": "escaped_value"
                     }
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklist_items__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklist_items__1.json
new file mode 100644
index 0000000000..8a41227692
--- /dev/null
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklist_items__1.json	
@@ -0,0 +1,15 @@
+{
+    "_links": {
+        "checklist": {
+            "href": "escaped_value"
+        },
+        "children": [],
+        "parent": "escaped_value",
+        "self": {
+            "href": "escaped_value"
+        }
+    },
+    "id": "escaped_value",
+    "position": "escaped_value",
+    "text": "escaped_value"
+}
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklists__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklists__1.json
index 39e7e3d07f..328e6ab533 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklists__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set checklists__1.json	
@@ -3,6 +3,9 @@
         "camp": {
             "href": "escaped_value"
         },
+        "checklistItems": {
+            "href": "escaped_value"
+        },
         "self": {
             "href": "escaped_value"
         }
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
index abc9872fce..2c4d1eddf4 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
@@ -7623,6 +7623,15 @@ components:
           example: /camps/1a2b3c4d
           format: iri-reference
           type: string
+        checklistItems:
+          description: 'All ChecklistItems that belong to this Checklist.'
+          example: '["/checklist_items/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
         id:
           description: 'An internal, unique, randomly generated identifier of this entity.'
           example: 1a2b3c4d
@@ -7636,6 +7645,7 @@ components:
           type: string
       required:
         - camp
+        - checklistItems
         - name
       type: object
     Checklist-write:
@@ -7709,8 +7719,11 @@ components:
               properties:
                 camp:
                   properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } }
+                checklistItems:
+                  properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } }
               required:
                 - camp
+                - checklistItems
               type: object
             type:
               type: string
@@ -7726,6 +7739,8 @@ components:
             anyOf:
               -
                 $ref: '#/components/schemas/Checklist.jsonapi'
+              -
+                $ref: '#/components/schemas/Checklist.jsonapi'
           readOnly: true
           type: array
       type: object
@@ -7749,6 +7764,15 @@ components:
           example: /camps/1a2b3c4d
           format: iri-reference
           type: string
+        checklistItems:
+          description: 'All ChecklistItems that belong to this Checklist.'
+          example: '["/checklist_items/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
         id:
           description: 'An internal, unique, randomly generated identifier of this entity.'
           example: 1a2b3c4d
@@ -7762,6 +7786,7 @@ components:
           type: string
       required:
         - camp
+        - checklistItems
         - name
       type: object
     Checklist.jsonhal-write_create:
@@ -7834,6 +7859,15 @@ components:
           example: /camps/1a2b3c4d
           format: iri-reference
           type: string
+        checklistItems:
+          description: 'All ChecklistItems that belong to this Checklist.'
+          example: '["/checklist_items/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
         id:
           description: 'An internal, unique, randomly generated identifier of this entity.'
           example: 1a2b3c4d
@@ -7847,6 +7881,7 @@ components:
           type: string
       required:
         - camp
+        - checklistItems
         - name
       type: object
     Checklist.jsonld-write_create:
@@ -7873,8 +7908,408 @@ components:
           maxLength: 32
           type: string
       required:
-        - camp
-        - name
+        - camp
+        - name
+      type: object
+    ChecklistItem-read:
+      deprecated: false
+      description: |-
+        A ChecklistItem
+        A Checklist contains a Tree-Structure of ChecklistItems.
+      properties:
+        checklist:
+          description: 'The Checklist this Item belongs to.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type: string
+        children:
+          description: 'All ChecklistItems that are direct children of this ChecklistItem.'
+          example: '["/checklist_items/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
+        id:
+          description: 'An internal, unique, randomly generated identifier of this entity.'
+          example: 1a2b3c4d
+          maxLength: 16
+          readOnly: true
+          type: string
+        parent:
+          description: |-
+            The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the
+            root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long
+            as the new parent is in the same checklist as the old one.
+          example: /checklist_items/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: 'A whole number used for ordering multiple checklist items that are in the same parent.'
+          example: -1
+          type: integer
+        text:
+          description: 'The human readable text of the checklist-item.'
+          example: Pfaditechnick
+          maxLength: 64
+          type: string
+      required:
+        - checklist
+        - children
+        - position
+        - text
+      type: object
+    ChecklistItem-write:
+      deprecated: false
+      description: |-
+        A ChecklistItem
+        A Checklist contains a Tree-Structure of ChecklistItems.
+      properties:
+        parent:
+          description: |-
+            The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the
+            root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long
+            as the new parent is in the same checklist as the old one.
+          example: /checklist_items/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: 'A whole number used for ordering multiple checklist items that are in the same parent.'
+          example: -1
+          type: integer
+        text:
+          description: 'The human readable text of the checklist-item.'
+          example: Pfaditechnick
+          maxLength: 64
+          type: string
+      required:
+        - position
+        - text
+      type: object
+    ChecklistItem-write_create:
+      deprecated: false
+      description: |-
+        A ChecklistItem
+        A Checklist contains a Tree-Structure of ChecklistItems.
+      properties:
+        checklist:
+          description: 'The Checklist this Item belongs to.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type: string
+        parent:
+          description: |-
+            The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the
+            root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long
+            as the new parent is in the same checklist as the old one.
+          example: /checklist_items/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: 'A whole number used for ordering multiple checklist items that are in the same parent.'
+          example: -1
+          type: integer
+        text:
+          description: 'The human readable text of the checklist-item.'
+          example: Pfaditechnick
+          maxLength: 64
+          type: string
+      required:
+        - checklist
+        - position
+        - text
+      type: object
+    ChecklistItem.jsonapi:
+      deprecated: false
+      description: |-
+        A ChecklistItem
+        A Checklist contains a Tree-Structure of ChecklistItems.
+      properties:
+        data:
+          properties:
+            attributes:
+              properties:
+                _id:
+                  description: 'An internal, unique, randomly generated identifier of this entity.'
+                  example: 1a2b3c4d
+                  maxLength: 16
+                  readOnly: true
+                  type: string
+                position:
+                  default: -1
+                  description: 'A whole number used for ordering multiple checklist items that are in the same parent.'
+                  example: -1
+                  type: integer
+                text:
+                  description: 'The human readable text of the checklist-item.'
+                  example: Pfaditechnick
+                  maxLength: 64
+                  type: string
+              required:
+                - position
+                - text
+              type: object
+            id:
+              type: string
+            relationships:
+              properties:
+                checklist:
+                  properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } }
+                children:
+                  properties: { data: { items: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object }, type: array } }
+                parent:
+                  properties: { data: { properties: { id: { format: iri-reference, type: string }, type: { type: string } }, type: object } }
+              required:
+                - checklist
+                - children
+              type: object
+            type:
+              type: string
+          required:
+            - id
+            - type
+          type: object
+        included:
+          description: 'Related resources requested via the "include" query parameter.'
+          externalDocs:
+            url: 'https://jsonapi.org/format/#fetching-includes'
+          items:
+            anyOf:
+              -
+                $ref: '#/components/schemas/ChecklistItem.jsonapi'
+              -
+                $ref: '#/components/schemas/ChecklistItem.jsonapi'
+              -
+                $ref: '#/components/schemas/ChecklistItem.jsonapi'
+          readOnly: true
+          type: array
+      type: object
+    ChecklistItem.jsonhal-read:
+      deprecated: false
+      description: |-
+        A ChecklistItem
+        A Checklist contains a Tree-Structure of ChecklistItems.
+      properties:
+        _links:
+          properties:
+            self:
+              properties:
+                href:
+                  format: iri-reference
+                  type: string
+              type: object
+          type: object
+        checklist:
+          description: 'The Checklist this Item belongs to.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type: string
+        children:
+          description: 'All ChecklistItems that are direct children of this ChecklistItem.'
+          example: '["/checklist_items/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
+        id:
+          description: 'An internal, unique, randomly generated identifier of this entity.'
+          example: 1a2b3c4d
+          maxLength: 16
+          readOnly: true
+          type: string
+        parent:
+          description: |-
+            The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the
+            root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long
+            as the new parent is in the same checklist as the old one.
+          example: /checklist_items/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: 'A whole number used for ordering multiple checklist items that are in the same parent.'
+          example: -1
+          type: integer
+        text:
+          description: 'The human readable text of the checklist-item.'
+          example: Pfaditechnick
+          maxLength: 64
+          type: string
+      required:
+        - checklist
+        - children
+        - position
+        - text
+      type: object
+    ChecklistItem.jsonhal-write_create:
+      deprecated: false
+      description: |-
+        A ChecklistItem
+        A Checklist contains a Tree-Structure of ChecklistItems.
+      properties:
+        _links:
+          properties:
+            self:
+              properties:
+                href:
+                  format: iri-reference
+                  type: string
+              type: object
+          type: object
+        checklist:
+          description: 'The Checklist this Item belongs to.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type: string
+        parent:
+          description: |-
+            The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the
+            root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long
+            as the new parent is in the same checklist as the old one.
+          example: /checklist_items/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: 'A whole number used for ordering multiple checklist items that are in the same parent.'
+          example: -1
+          type: integer
+        text:
+          description: 'The human readable text of the checklist-item.'
+          example: Pfaditechnick
+          maxLength: 64
+          type: string
+      required:
+        - checklist
+        - position
+        - text
+      type: object
+    ChecklistItem.jsonld-read:
+      deprecated: false
+      description: |-
+        A ChecklistItem
+        A Checklist contains a Tree-Structure of ChecklistItems.
+      properties:
+        '@context':
+          oneOf:
+            -
+              additionalProperties: true
+              properties:
+                '@vocab':
+                  type: string
+                hydra:
+                  enum: ['http://www.w3.org/ns/hydra/core#']
+                  type: string
+              required:
+                - '@vocab'
+                - hydra
+              type: object
+            -
+              type: string
+          readOnly: true
+        '@id':
+          readOnly: true
+          type: string
+        '@type':
+          readOnly: true
+          type: string
+        checklist:
+          description: 'The Checklist this Item belongs to.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type: string
+        children:
+          description: 'All ChecklistItems that are direct children of this ChecklistItem.'
+          example: '["/checklist_items/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
+        id:
+          description: 'An internal, unique, randomly generated identifier of this entity.'
+          example: 1a2b3c4d
+          maxLength: 16
+          readOnly: true
+          type: string
+        parent:
+          description: |-
+            The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the
+            root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long
+            as the new parent is in the same checklist as the old one.
+          example: /checklist_items/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: 'A whole number used for ordering multiple checklist items that are in the same parent.'
+          example: -1
+          type: integer
+        text:
+          description: 'The human readable text of the checklist-item.'
+          example: Pfaditechnick
+          maxLength: 64
+          type: string
+      required:
+        - checklist
+        - children
+        - position
+        - text
+      type: object
+    ChecklistItem.jsonld-write_create:
+      deprecated: false
+      description: |-
+        A ChecklistItem
+        A Checklist contains a Tree-Structure of ChecklistItems.
+      properties:
+        checklist:
+          description: 'The Checklist this Item belongs to.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type: string
+        parent:
+          description: |-
+            The parent to which ChecklistItem item belongs. Is null in case this ChecklistItem is the
+            root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long
+            as the new parent is in the same checklist as the old one.
+          example: /checklist_items/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: 'A whole number used for ordering multiple checklist items that are in the same parent.'
+          example: -1
+          type: integer
+        text:
+          description: 'The human readable text of the checklist-item.'
+          example: Pfaditechnick
+          maxLength: 64
+          type: string
+      required:
+        - checklist
+        - position
+        - text
       type: object
     ColumnLayout-read:
       deprecated: false
@@ -23182,59 +23617,308 @@ paths:
             type: array
           style: form
       responses:
-        200:
+        200:
+          content:
+            application/hal+json:
+              schema:
+                properties:
+                  _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Checklist.jsonhal-read' }, type: array } }, type: object }, { type: object }] }
+                  _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object }
+                  itemsPerPage: { minimum: 0, type: integer }
+                  totalItems: { minimum: 0, type: integer }
+                required:
+                  - _embedded
+                  - _links
+                type: object
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Checklist-read'
+                type: array
+            application/ld+json:
+              schema:
+                properties:
+                  'hydra:member': { items: { $ref: '#/components/schemas/Checklist.jsonld-read' }, type: array }
+                  'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object }
+                  'hydra:totalItems': { minimum: 0, type: integer }
+                  'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object }
+                required:
+                  - 'hydra:member'
+                type: object
+            application/vnd.api+json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Checklist.jsonapi'
+                type: array
+            text/html:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Checklist-read'
+                type: array
+          description: 'Checklist collection'
+      summary: 'Retrieves the collection of Checklist resources.'
+      tags:
+        - Checklist
+  '/camps/{id}':
+    delete:
+      deprecated: false
+      description: 'Removes the Camp resource.'
+      operationId: api_camps_id_delete
+      parameters:
+        -
+          allowEmptyValue: false
+          allowReserved: false
+          deprecated: false
+          description: 'Camp identifier'
+          explode: false
+          in: path
+          name: id
+          required: true
+          schema:
+            type: string
+          style: simple
+      responses:
+        204:
+          description: 'Camp resource deleted'
+        404:
+          description: 'Resource not found'
+      summary: 'Removes the Camp resource.'
+      tags:
+        - Camp
+    get:
+      deprecated: false
+      description: 'Retrieves a Camp resource.'
+      operationId: api_camps_id_get
+      parameters:
+        -
+          allowEmptyValue: false
+          allowReserved: false
+          deprecated: false
+          description: 'Camp identifier'
+          explode: false
+          in: path
+          name: id
+          required: true
+          schema:
+            type: string
+          style: simple
+      responses:
+        200:
+          content:
+            application/hal+json:
+              schema:
+                $ref: '#/components/schemas/Camp.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
+            application/ld+json:
+              schema:
+                $ref: '#/components/schemas/Camp.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
+            application/vnd.api+json:
+              schema:
+                $ref: '#/components/schemas/Camp.jsonapi'
+            text/html:
+              schema:
+                $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
+          description: 'Camp resource'
+        404:
+          description: 'Resource not found'
+      summary: 'Retrieves a Camp resource.'
+      tags:
+        - Camp
+    patch:
+      deprecated: false
+      description: 'Updates the Camp resource.'
+      operationId: api_camps_id_patch
+      parameters:
+        -
+          allowEmptyValue: false
+          allowReserved: false
+          deprecated: false
+          description: 'Camp identifier'
+          explode: false
+          in: path
+          name: id
+          required: true
+          schema:
+            type: string
+          style: simple
+      requestBody:
+        content:
+          application/merge-patch+json:
+            schema:
+              $ref: '#/components/schemas/Camp-write_update'
+          application/vnd.api+json:
+            schema:
+              $ref: '#/components/schemas/Camp.jsonapi'
+        description: 'The updated Camp resource'
+        required: true
+      responses:
+        200:
+          content:
+            application/hal+json:
+              schema:
+                $ref: '#/components/schemas/Camp.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
+            application/ld+json:
+              schema:
+                $ref: '#/components/schemas/Camp.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
+            application/vnd.api+json:
+              schema:
+                $ref: '#/components/schemas/Camp.jsonapi'
+            text/html:
+              schema:
+                $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
+          description: 'Camp resource updated'
+          links: []
+        400:
+          description: 'Invalid input'
+        404:
+          description: 'Resource not found'
+        422:
+          description: 'Unprocessable entity'
+      summary: 'Updates the Camp resource.'
+      tags:
+        - Camp
+  /categories:
+    get:
+      deprecated: false
+      description: 'Retrieves the collection of Category resources.'
+      operationId: api_categories_get_collection
+      parameters:
+        -
+          allowEmptyValue: true
+          allowReserved: false
+          deprecated: false
+          description: ''
+          explode: false
+          in: query
+          name: camp
+          required: false
+          schema:
+            type: string
+          style: form
+        -
+          allowEmptyValue: true
+          allowReserved: false
+          deprecated: false
+          description: ''
+          explode: true
+          in: query
+          name: 'camp[]'
+          required: false
+          schema:
+            items:
+              type: string
+            type: array
+          style: form
+      responses:
+        200:
+          content:
+            application/hal+json:
+              schema:
+                properties:
+                  _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Category.jsonhal-read' }, type: array } }, type: object }, { type: object }] }
+                  _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object }
+                  itemsPerPage: { minimum: 0, type: integer }
+                  totalItems: { minimum: 0, type: integer }
+                required:
+                  - _embedded
+                  - _links
+                type: object
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Category-read'
+                type: array
+            application/ld+json:
+              schema:
+                properties:
+                  'hydra:member': { items: { $ref: '#/components/schemas/Category.jsonld-read' }, type: array }
+                  'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object }
+                  'hydra:totalItems': { minimum: 0, type: integer }
+                  'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object }
+                required:
+                  - 'hydra:member'
+                type: object
+            application/vnd.api+json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Category.jsonapi'
+                type: array
+            text/html:
+              schema:
+                items:
+                  $ref: '#/components/schemas/Category-read'
+                type: array
+          description: 'Category collection'
+      summary: 'Retrieves the collection of Category resources.'
+      tags:
+        - Category
+    post:
+      deprecated: false
+      description: 'Creates a Category resource.'
+      operationId: api_categories_post
+      parameters: []
+      requestBody:
+        content:
+          application/hal+json:
+            schema:
+              $ref: '#/components/schemas/Category.jsonhal-write_create'
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Category-write_create'
+          application/ld+json:
+            schema:
+              $ref: '#/components/schemas/Category.jsonld-write_create'
+          application/vnd.api+json:
+            schema:
+              $ref: '#/components/schemas/Category.jsonapi'
+          text/html:
+            schema:
+              $ref: '#/components/schemas/Category-write_create'
+        description: 'The new Category resource'
+        required: true
+      responses:
+        201:
           content:
             application/hal+json:
               schema:
-                properties:
-                  _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Checklist.jsonhal-read' }, type: array } }, type: object }, { type: object }] }
-                  _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object }
-                  itemsPerPage: { minimum: 0, type: integer }
-                  totalItems: { minimum: 0, type: integer }
-                required:
-                  - _embedded
-                  - _links
-                type: object
+                $ref: '#/components/schemas/Category.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes'
             application/json:
               schema:
-                items:
-                  $ref: '#/components/schemas/Checklist-read'
-                type: array
+                $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes'
             application/ld+json:
               schema:
-                properties:
-                  'hydra:member': { items: { $ref: '#/components/schemas/Checklist.jsonld-read' }, type: array }
-                  'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object }
-                  'hydra:totalItems': { minimum: 0, type: integer }
-                  'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object }
-                required:
-                  - 'hydra:member'
-                type: object
+                $ref: '#/components/schemas/Category.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes'
             application/vnd.api+json:
               schema:
-                items:
-                  $ref: '#/components/schemas/Checklist.jsonapi'
-                type: array
+                $ref: '#/components/schemas/Category.jsonapi'
             text/html:
               schema:
-                items:
-                  $ref: '#/components/schemas/Checklist-read'
-                type: array
-          description: 'Checklist collection'
-      summary: 'Retrieves the collection of Checklist resources.'
+                $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes'
+          description: 'Category resource created'
+          links: []
+        400:
+          description: 'Invalid input'
+        422:
+          description: 'Unprocessable entity'
+      summary: 'Creates a Category resource.'
       tags:
-        - Checklist
-  '/camps/{id}':
+        - Category
+  '/categories/{id}':
     delete:
       deprecated: false
-      description: 'Removes the Camp resource.'
-      operationId: api_camps_id_delete
+      description: 'Removes the Category resource.'
+      operationId: api_categories_id_delete
       parameters:
         -
           allowEmptyValue: false
           allowReserved: false
           deprecated: false
-          description: 'Camp identifier'
+          description: 'Category identifier'
           explode: false
           in: path
           name: id
@@ -23244,22 +23928,22 @@ paths:
           style: simple
       responses:
         204:
-          description: 'Camp resource deleted'
+          description: 'Category resource deleted'
         404:
           description: 'Resource not found'
-      summary: 'Removes the Camp resource.'
+      summary: 'Removes the Category resource.'
       tags:
-        - Camp
+        - Category
     get:
       deprecated: false
-      description: 'Retrieves a Camp resource.'
-      operationId: api_camps_id_get
+      description: 'Retrieves a Category resource.'
+      operationId: api_categories_id_get
       parameters:
         -
           allowEmptyValue: false
           allowReserved: false
           deprecated: false
-          description: 'Camp identifier'
+          description: 'Category identifier'
           explode: false
           in: path
           name: id
@@ -23272,35 +23956,35 @@ paths:
           content:
             application/hal+json:
               schema:
-                $ref: '#/components/schemas/Camp.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
+                $ref: '#/components/schemas/Category.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes'
             application/json:
               schema:
-                $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
+                $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes'
             application/ld+json:
               schema:
-                $ref: '#/components/schemas/Camp.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
+                $ref: '#/components/schemas/Category.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes'
             application/vnd.api+json:
               schema:
-                $ref: '#/components/schemas/Camp.jsonapi'
+                $ref: '#/components/schemas/Category.jsonapi'
             text/html:
               schema:
-                $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
-          description: 'Camp resource'
+                $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes'
+          description: 'Category resource'
         404:
           description: 'Resource not found'
-      summary: 'Retrieves a Camp resource.'
+      summary: 'Retrieves a Category resource.'
       tags:
-        - Camp
+        - Category
     patch:
       deprecated: false
-      description: 'Updates the Camp resource.'
-      operationId: api_camps_id_patch
+      description: 'Updates the Category resource.'
+      operationId: api_categories_id_patch
       parameters:
         -
           allowEmptyValue: false
           allowReserved: false
           deprecated: false
-          description: 'Camp identifier'
+          description: 'Category identifier'
           explode: false
           in: path
           name: id
@@ -23312,31 +23996,31 @@ paths:
         content:
           application/merge-patch+json:
             schema:
-              $ref: '#/components/schemas/Camp-write_update'
+              $ref: '#/components/schemas/Category-write_update'
           application/vnd.api+json:
             schema:
-              $ref: '#/components/schemas/Camp.jsonapi'
-        description: 'The updated Camp resource'
+              $ref: '#/components/schemas/Category.jsonapi'
+        description: 'The updated Category resource'
         required: true
       responses:
         200:
           content:
             application/hal+json:
               schema:
-                $ref: '#/components/schemas/Camp.jsonhal-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
+                $ref: '#/components/schemas/Category.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes'
             application/json:
               schema:
-                $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
+                $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes'
             application/ld+json:
               schema:
-                $ref: '#/components/schemas/Camp.jsonld-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
+                $ref: '#/components/schemas/Category.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes'
             application/vnd.api+json:
               schema:
-                $ref: '#/components/schemas/Camp.jsonapi'
+                $ref: '#/components/schemas/Category.jsonapi'
             text/html:
               schema:
-                $ref: '#/components/schemas/Camp-read_Camp.Periods_Period.Days_Camp.CampCollaborations_CampCollaboration.User'
-          description: 'Camp resource updated'
+                $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes'
+          description: 'Category resource updated'
           links: []
         400:
           description: 'Invalid input'
@@ -23344,14 +24028,14 @@ paths:
           description: 'Resource not found'
         422:
           description: 'Unprocessable entity'
-      summary: 'Updates the Camp resource.'
+      summary: 'Updates the Category resource.'
       tags:
-        - Camp
-  /categories:
+        - Category
+  /checklist_items:
     get:
       deprecated: false
-      description: 'Retrieves the collection of Category resources.'
-      operationId: api_categories_get_collection
+      description: 'Retrieves the collection of ChecklistItem resources.'
+      operationId: api_checklist_items_get_collection
       parameters:
         -
           allowEmptyValue: true
@@ -23360,7 +24044,7 @@ paths:
           description: ''
           explode: false
           in: query
-          name: camp
+          name: checklist
           required: false
           schema:
             type: string
@@ -23372,7 +24056,7 @@ paths:
           description: ''
           explode: true
           in: query
-          name: 'camp[]'
+          name: 'checklist[]'
           required: false
           schema:
             items:
@@ -23385,7 +24069,7 @@ paths:
             application/hal+json:
               schema:
                 properties:
-                  _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/Category.jsonhal-read' }, type: array } }, type: object }, { type: object }] }
+                  _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/ChecklistItem.jsonhal-read' }, type: array } }, type: object }, { type: object }] }
                   _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object }
                   itemsPerPage: { minimum: 0, type: integer }
                   totalItems: { minimum: 0, type: integer }
@@ -23396,12 +24080,12 @@ paths:
             application/json:
               schema:
                 items:
-                  $ref: '#/components/schemas/Category-read'
+                  $ref: '#/components/schemas/ChecklistItem-read'
                 type: array
             application/ld+json:
               schema:
                 properties:
-                  'hydra:member': { items: { $ref: '#/components/schemas/Category.jsonld-read' }, type: array }
+                  'hydra:member': { items: { $ref: '#/components/schemas/ChecklistItem.jsonld-read' }, type: array }
                   'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object }
                   'hydra:totalItems': { minimum: 0, type: integer }
                   'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object }
@@ -23411,79 +24095,80 @@ paths:
             application/vnd.api+json:
               schema:
                 items:
-                  $ref: '#/components/schemas/Category.jsonapi'
+                  $ref: '#/components/schemas/ChecklistItem.jsonapi'
                 type: array
             text/html:
               schema:
                 items:
-                  $ref: '#/components/schemas/Category-read'
+                  $ref: '#/components/schemas/ChecklistItem-read'
                 type: array
-          description: 'Category collection'
-      summary: 'Retrieves the collection of Category resources.'
+          description: 'ChecklistItem collection'
+      summary: 'Retrieves the collection of ChecklistItem resources.'
       tags:
-        - Category
+        - ChecklistItem
+    parameters: []
     post:
       deprecated: false
-      description: 'Creates a Category resource.'
-      operationId: api_categories_post
+      description: 'Creates a ChecklistItem resource.'
+      operationId: api_checklist_items_post
       parameters: []
       requestBody:
         content:
           application/hal+json:
             schema:
-              $ref: '#/components/schemas/Category.jsonhal-write_create'
+              $ref: '#/components/schemas/ChecklistItem.jsonhal-write_create'
           application/json:
             schema:
-              $ref: '#/components/schemas/Category-write_create'
+              $ref: '#/components/schemas/ChecklistItem-write_create'
           application/ld+json:
             schema:
-              $ref: '#/components/schemas/Category.jsonld-write_create'
+              $ref: '#/components/schemas/ChecklistItem.jsonld-write_create'
           application/vnd.api+json:
             schema:
-              $ref: '#/components/schemas/Category.jsonapi'
+              $ref: '#/components/schemas/ChecklistItem.jsonapi'
           text/html:
             schema:
-              $ref: '#/components/schemas/Category-write_create'
-        description: 'The new Category resource'
+              $ref: '#/components/schemas/ChecklistItem-write_create'
+        description: 'The new ChecklistItem resource'
         required: true
       responses:
         201:
           content:
             application/hal+json:
               schema:
-                $ref: '#/components/schemas/Category.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes'
+                $ref: '#/components/schemas/ChecklistItem.jsonhal-read'
             application/json:
               schema:
-                $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes'
+                $ref: '#/components/schemas/ChecklistItem-read'
             application/ld+json:
               schema:
-                $ref: '#/components/schemas/Category.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes'
+                $ref: '#/components/schemas/ChecklistItem.jsonld-read'
             application/vnd.api+json:
               schema:
-                $ref: '#/components/schemas/Category.jsonapi'
+                $ref: '#/components/schemas/ChecklistItem.jsonapi'
             text/html:
               schema:
-                $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes'
-          description: 'Category resource created'
+                $ref: '#/components/schemas/ChecklistItem-read'
+          description: 'ChecklistItem resource created'
           links: []
         400:
           description: 'Invalid input'
         422:
           description: 'Unprocessable entity'
-      summary: 'Creates a Category resource.'
+      summary: 'Creates a ChecklistItem resource.'
       tags:
-        - Category
-  '/categories/{id}':
+        - ChecklistItem
+  '/checklist_items/{id}':
     delete:
       deprecated: false
-      description: 'Removes the Category resource.'
-      operationId: api_categories_id_delete
+      description: 'Removes the ChecklistItem resource.'
+      operationId: api_checklist_items_id_delete
       parameters:
         -
           allowEmptyValue: false
           allowReserved: false
           deprecated: false
-          description: 'Category identifier'
+          description: 'ChecklistItem identifier'
           explode: false
           in: path
           name: id
@@ -23493,22 +24178,22 @@ paths:
           style: simple
       responses:
         204:
-          description: 'Category resource deleted'
+          description: 'ChecklistItem resource deleted'
         404:
           description: 'Resource not found'
-      summary: 'Removes the Category resource.'
+      summary: 'Removes the ChecklistItem resource.'
       tags:
-        - Category
+        - ChecklistItem
     get:
       deprecated: false
-      description: 'Retrieves a Category resource.'
-      operationId: api_categories_id_get
+      description: 'Retrieves a ChecklistItem resource.'
+      operationId: api_checklist_items_id_get
       parameters:
         -
           allowEmptyValue: false
           allowReserved: false
           deprecated: false
-          description: 'Category identifier'
+          description: 'ChecklistItem identifier'
           explode: false
           in: path
           name: id
@@ -23521,35 +24206,36 @@ paths:
           content:
             application/hal+json:
               schema:
-                $ref: '#/components/schemas/Category.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes'
+                $ref: '#/components/schemas/ChecklistItem.jsonhal-read'
             application/json:
               schema:
-                $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes'
+                $ref: '#/components/schemas/ChecklistItem-read'
             application/ld+json:
               schema:
-                $ref: '#/components/schemas/Category.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes'
+                $ref: '#/components/schemas/ChecklistItem.jsonld-read'
             application/vnd.api+json:
               schema:
-                $ref: '#/components/schemas/Category.jsonapi'
+                $ref: '#/components/schemas/ChecklistItem.jsonapi'
             text/html:
               schema:
-                $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes'
-          description: 'Category resource'
+                $ref: '#/components/schemas/ChecklistItem-read'
+          description: 'ChecklistItem resource'
         404:
           description: 'Resource not found'
-      summary: 'Retrieves a Category resource.'
+      summary: 'Retrieves a ChecklistItem resource.'
       tags:
-        - Category
+        - ChecklistItem
+    parameters: []
     patch:
       deprecated: false
-      description: 'Updates the Category resource.'
-      operationId: api_categories_id_patch
+      description: 'Updates the ChecklistItem resource.'
+      operationId: api_checklist_items_id_patch
       parameters:
         -
           allowEmptyValue: false
           allowReserved: false
           deprecated: false
-          description: 'Category identifier'
+          description: 'ChecklistItem identifier'
           explode: false
           in: path
           name: id
@@ -23561,31 +24247,31 @@ paths:
         content:
           application/merge-patch+json:
             schema:
-              $ref: '#/components/schemas/Category-write_update'
+              $ref: '#/components/schemas/ChecklistItem-write'
           application/vnd.api+json:
             schema:
-              $ref: '#/components/schemas/Category.jsonapi'
-        description: 'The updated Category resource'
+              $ref: '#/components/schemas/ChecklistItem.jsonapi'
+        description: 'The updated ChecklistItem resource'
         required: true
       responses:
         200:
           content:
             application/hal+json:
               schema:
-                $ref: '#/components/schemas/Category.jsonhal-read_Category.PreferredContentTypes_Category.ContentNodes'
+                $ref: '#/components/schemas/ChecklistItem.jsonhal-read'
             application/json:
               schema:
-                $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes'
+                $ref: '#/components/schemas/ChecklistItem-read'
             application/ld+json:
               schema:
-                $ref: '#/components/schemas/Category.jsonld-read_Category.PreferredContentTypes_Category.ContentNodes'
+                $ref: '#/components/schemas/ChecklistItem.jsonld-read'
             application/vnd.api+json:
               schema:
-                $ref: '#/components/schemas/Category.jsonapi'
+                $ref: '#/components/schemas/ChecklistItem.jsonapi'
             text/html:
               schema:
-                $ref: '#/components/schemas/Category-read_Category.PreferredContentTypes_Category.ContentNodes'
-          description: 'Category resource updated'
+                $ref: '#/components/schemas/ChecklistItem-read'
+          description: 'ChecklistItem resource updated'
           links: []
         400:
           description: 'Invalid input'
@@ -23593,9 +24279,9 @@ paths:
           description: 'Resource not found'
         422:
           description: 'Unprocessable entity'
-      summary: 'Updates the Category resource.'
+      summary: 'Updates the ChecklistItem resource.'
       tags:
-        - Category
+        - ChecklistItem
   /checklists:
     get:
       deprecated: false
@@ -23722,6 +24408,94 @@ paths:
       summary: 'Creates a Checklist resource.'
       tags:
         - Checklist
+  '/checklists/{checklistId}/checklist_items':
+    get:
+      deprecated: false
+      description: 'Retrieves the collection of ChecklistItem resources.'
+      operationId: BelongsToChecklist_App\Entity\ChecklistItem_get_collection
+      parameters:
+        -
+          allowEmptyValue: false
+          allowReserved: false
+          deprecated: false
+          description: 'ChecklistItem identifier'
+          explode: false
+          in: path
+          name: checklistId
+          required: true
+          schema:
+            type: string
+          style: simple
+        -
+          allowEmptyValue: true
+          allowReserved: false
+          deprecated: false
+          description: ''
+          explode: false
+          in: query
+          name: checklist
+          required: false
+          schema:
+            type: string
+          style: form
+        -
+          allowEmptyValue: true
+          allowReserved: false
+          deprecated: false
+          description: ''
+          explode: true
+          in: query
+          name: 'checklist[]'
+          required: false
+          schema:
+            items:
+              type: string
+            type: array
+          style: form
+      responses:
+        200:
+          content:
+            application/hal+json:
+              schema:
+                properties:
+                  _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/ChecklistItem.jsonhal-read' }, type: array } }, type: object }, { type: object }] }
+                  _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object }
+                  itemsPerPage: { minimum: 0, type: integer }
+                  totalItems: { minimum: 0, type: integer }
+                required:
+                  - _embedded
+                  - _links
+                type: object
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/ChecklistItem-read'
+                type: array
+            application/ld+json:
+              schema:
+                properties:
+                  'hydra:member': { items: { $ref: '#/components/schemas/ChecklistItem.jsonld-read' }, type: array }
+                  'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object }
+                  'hydra:totalItems': { minimum: 0, type: integer }
+                  'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object }
+                required:
+                  - 'hydra:member'
+                type: object
+            application/vnd.api+json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/ChecklistItem.jsonapi'
+                type: array
+            text/html:
+              schema:
+                items:
+                  $ref: '#/components/schemas/ChecklistItem-read'
+                type: array
+          description: 'ChecklistItem collection'
+      summary: 'Retrieves the collection of ChecklistItem resources.'
+      tags:
+        - ChecklistItem
+    parameters: []
   '/checklists/{id}':
     delete:
       deprecated: false
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json
index 84921e20f9..08bdba78ce 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json
@@ -24,6 +24,10 @@
             "href": "\/categories{\/id}{?camp,camp[]}",
             "templated": true
         },
+        "checklistItems": {
+            "href": "\/checklist_items{\/id}{?checklist,checklist[]}",
+            "templated": true
+        },
         "checklists": {
             "href": "\/checklists{\/id}{?camp,camp[]}",
             "templated": true
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
index 71b7a0fd66..cffd038675 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
@@ -12,6 +12,8 @@
 /categories/item: 9
 /checklists: 6
 /checklists/item: 7
+/checklist_items: 6
+/checklist_items/item: 8
 /content_types: 6
 /content_types/item: 6
 /days: 26

From 82bd9db12d58cf7ad433d9e333dd6cd94569f487 Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Sat, 15 Jun 2024 23:22:07 +0200
Subject: [PATCH 158/273] add Unittests for ChecklistItem

---
 .../CreateChecklistItemTest.php               | 260 ++++++++++++++++++
 .../DeleteChecklistItemTest.php               |  87 ++++++
 .../ChecklistItems/ListChecklistItemTest.php  | 128 +++++++++
 .../ChecklistItems/ReadChecklistItemTest.php  | 108 ++++++++
 .../UpdateChecklistItemTest.php               | 220 +++++++++++++++
 5 files changed, 803 insertions(+)
 create mode 100644 api/tests/Api/ChecklistItems/CreateChecklistItemTest.php
 create mode 100644 api/tests/Api/ChecklistItems/DeleteChecklistItemTest.php
 create mode 100644 api/tests/Api/ChecklistItems/ListChecklistItemTest.php
 create mode 100644 api/tests/Api/ChecklistItems/ReadChecklistItemTest.php
 create mode 100644 api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php

diff --git a/api/tests/Api/ChecklistItems/CreateChecklistItemTest.php b/api/tests/Api/ChecklistItems/CreateChecklistItemTest.php
new file mode 100644
index 0000000000..007d8d0970
--- /dev/null
+++ b/api/tests/Api/ChecklistItems/CreateChecklistItemTest.php
@@ -0,0 +1,260 @@
+<?php
+
+namespace App\Tests\Api\ChecklistItems;
+
+use ApiPlatform\Metadata\Get;
+use ApiPlatform\Metadata\Post;
+use App\Entity\ChecklistItem;
+use App\Tests\Api\ECampApiTestCase;
+use App\Tests\Constraints\CompatibleHalResponse;
+
+use function PHPUnit\Framework\assertThat;
+
+/**
+ * @internal
+ */
+class CreateChecklistItemTest extends ECampApiTestCase {
+    public function testCreateChecklistItemIsDeniedForAnonymousUser() {
+        static::createBasicClient()->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload()]);
+
+        $this->assertResponseStatusCodeSame(401);
+        $this->assertJsonContains([
+            'code' => 401,
+            'message' => 'JWT Token not found',
+        ]);
+    }
+
+    public function testCreateChecklistItemIsNotPossibleForUnrelatedUserBecauseCampIsNotReadable() {
+        static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()])
+            ->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload()])
+        ;
+
+        $this->assertResponseStatusCodeSame(400);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Item not found for "'.$this->getIriFor('checklist1').'".',
+        ]);
+    }
+
+    public function testCreateChecklistItemIsNotPossibleForInactiveCollaboratorBecauseCampIsNotReadable() {
+        static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()])
+            ->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload()])
+        ;
+
+        $this->assertResponseStatusCodeSame(400);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Item not found for "'.$this->getIriFor('checklist1').'".',
+        ]);
+    }
+
+    public function testCreateChecklistItemIsDeniedForGuest() {
+        static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()])
+            ->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload()])
+        ;
+
+        $this->assertResponseStatusCodeSame(403);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Access Denied.',
+        ]);
+    }
+
+    public function testCreateChecklistItemIsAllowedForMember() {
+        static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()])
+            ->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload()])
+        ;
+
+        $this->assertResponseStatusCodeSame(201);
+        $this->assertJsonContains($this->getExampleReadPayload(['position' => 5]));
+    }
+
+    public function testCreateChecklistItemIsAllowedForManager() {
+        static::createClientWithCredentials()->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload()]);
+
+        $this->assertResponseStatusCodeSame(201);
+        $this->assertJsonContains($this->getExampleReadPayload(['position' => 5]));
+    }
+
+    public function testCreateChecklistItemInCampPrototypeIsDeniedForUnrelatedUser() {
+        static::createClientWithCredentials()->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload([
+            'checklist' => $this->getIriFor('checklist1campPrototype'),
+        ])]);
+
+        $this->assertResponseStatusCodeSame(403);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Access Denied.',
+        ]);
+    }
+
+    public function testCreateChecklistItemValidatesMissingChecklist() {
+        static::createClientWithCredentials()->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload([], ['checklist'])]);
+
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'violations' => [
+                [
+                    'propertyPath' => 'checklist',
+                    'message' => 'This value should not be null.',
+                ],
+            ],
+        ]);
+    }
+
+    public function testCreateChecklistItemValidatesMissingText() {
+        static::createClientWithCredentials()->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload([], ['text'])]);
+
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'violations' => [
+                [
+                    'propertyPath' => 'text',
+                    'message' => 'This value should not be blank.',
+                ],
+            ],
+        ]);
+    }
+
+    public function testCreateChecklistItemValidatesBlankText() {
+        static::createClientWithCredentials()->request(
+            'POST',
+            '/checklist_items',
+            [
+                'json' => $this->getExampleWritePayload(
+                    [
+                        'text' => '',
+                    ]
+                ),
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'violations' => [
+                [
+                    'propertyPath' => 'text',
+                    'message' => 'This value should not be blank.',
+                ],
+            ],
+        ]);
+    }
+
+    public function testCreateChecklistItemValidatesTooLongText() {
+        static::createClientWithCredentials()->request(
+            'POST',
+            '/checklist_items',
+            [
+                'json' => $this->getExampleWritePayload(
+                    [
+                        'text' => str_repeat('l', 65),
+                    ]
+                ),
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'violations' => [
+                [
+                    'propertyPath' => 'text',
+                    'message' => 'This value is too long. It should have 64 characters or less.',
+                ],
+            ],
+        ]);
+    }
+
+    public function testCreateChecklistItemTrimsText() {
+        static::createClientWithCredentials()->request(
+            'POST',
+            '/checklist_items',
+            [
+                'json' => $this->getExampleWritePayload(
+                    [
+                        'text' => "  \t Ziel 1\t ",
+                    ]
+                ),
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(201);
+        $this->assertJsonContains($this->getExampleReadPayload(
+            [
+                'text' => 'Ziel 1',
+                'position' => 5,
+            ]
+        ));
+    }
+
+    public function testCreateChecklistItemCleansForbiddenCharactersFromText() {
+        static::createClientWithCredentials()->request(
+            'POST',
+            '/checklist_items',
+            [
+                'json' => $this->getExampleWritePayload(
+                    [
+                        'text' => "\n\t<b>Ziel 1",
+                    ]
+                ),
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(201);
+        $this->assertJsonContains($this->getExampleReadPayload(
+            [
+                'text' => '<b>Ziel 1',
+                'position' => 5,
+            ]
+        ));
+    }
+
+    /**
+     * @throws RedirectionExceptionInterface
+     * @throws DecodingExceptionInterface
+     * @throws ClientExceptionInterface
+     * @throws TransportExceptionInterface
+     * @throws ServerExceptionInterface
+     */
+    public function testCreateResponseStructureMatchesReadResponseStructure() {
+        $client = static::createClientWithCredentials();
+        $client->disableReboot();
+        $createResponse = $client->request(
+            'POST',
+            '/checklist_items',
+            [
+                'json' => $this->getExampleWritePayload(),
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(201);
+
+        $createArray = $createResponse->toArray();
+        $newItemLink = $createArray['_links']['self']['href'];
+        $getItemResponse = $client->request('GET', $newItemLink);
+
+        assertThat($createArray, CompatibleHalResponse::isHalCompatibleWith($getItemResponse->toArray()));
+    }
+
+    public function getExampleWritePayload($attributes = [], $except = []) {
+        return $this->getExamplePayload(
+            ChecklistItem::class,
+            Post::class,
+            array_merge([
+                'parent' => null,
+                'checklist' => $this->getIriFor('checklist1'),
+            ], $attributes),
+            [],
+            $except
+        );
+    }
+
+    public function getExampleReadPayload($attributes = [], $except = []) {
+        return $this->getExamplePayload(
+            ChecklistItem::class,
+            Get::class,
+            $attributes,
+            ['parent', 'checklist'],
+            $except
+        );
+    }
+}
diff --git a/api/tests/Api/ChecklistItems/DeleteChecklistItemTest.php b/api/tests/Api/ChecklistItems/DeleteChecklistItemTest.php
new file mode 100644
index 0000000000..262ef91457
--- /dev/null
+++ b/api/tests/Api/ChecklistItems/DeleteChecklistItemTest.php
@@ -0,0 +1,87 @@
+<?php
+
+namespace App\Tests\Api\ChecklistItems;
+
+use App\Entity\ChecklistItem;
+use App\Tests\Api\ECampApiTestCase;
+
+/**
+ * @internal
+ */
+class DeleteChecklistItemTest extends ECampApiTestCase {
+    public function testDeleteChecklistItemIsDeniedForAnonymousUser() {
+        $checklistItem = static::getFixture('checklistItem1_1_2_3');
+        static::createBasicClient()->request('DELETE', '/checklist_items/'.$checklistItem->getId());
+        $this->assertResponseStatusCodeSame(401);
+        $this->assertJsonContains([
+            'code' => 401,
+            'message' => 'JWT Token not found',
+        ]);
+    }
+
+    public function testDeleteChecklistItemIsDeniedForUnrelatedUser() {
+        $checklistItem = static::getFixture('checklistItem1_1_2_3');
+        static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()])
+            ->request('DELETE', '/checklist_items/'.$checklistItem->getId())
+        ;
+
+        $this->assertResponseStatusCodeSame(404);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Not Found',
+        ]);
+    }
+
+    public function testDeleteChecklistItemIsDeniedForInactiveCollaborator() {
+        $checklistItem = static::getFixture('checklistItem1_1_2_3');
+        static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()])
+            ->request('DELETE', '/checklist_items/'.$checklistItem->getId())
+        ;
+
+        $this->assertResponseStatusCodeSame(404);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Not Found',
+        ]);
+    }
+
+    public function testDeleteChecklistItemIsDeniedForGuest() {
+        $checklistItem = static::getFixture('checklistItem1_1_2_3');
+        static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()])
+            ->request('DELETE', '/checklist_items/'.$checklistItem->getId())
+        ;
+
+        $this->assertResponseStatusCodeSame(403);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Access Denied.',
+        ]);
+    }
+
+    public function testDeleteChecklistItemIsAllowedForMember() {
+        $checklistItem = static::getFixture('checklistItem1_1_2_3');
+        static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()])
+            ->request('DELETE', '/checklist_items/'.$checklistItem->getId())
+        ;
+        $this->assertResponseStatusCodeSame(204);
+        $this->assertNull($this->getEntityManager()->getRepository(ChecklistItem::class)->find($checklistItem->getId()));
+    }
+
+    public function testDeleteChecklistItemIsAllowedForManager() {
+        $checklistItem = static::getFixture('checklistItem1_1_2_3');
+        static::createClientWithCredentials()->request('DELETE', '/checklist_items/'.$checklistItem->getId());
+        $this->assertResponseStatusCodeSame(204);
+        $this->assertNull($this->getEntityManager()->getRepository(ChecklistItem::class)->find($checklistItem->getId()));
+    }
+
+    public function testDeleteChecklistItemFromCampPrototypeIsDeniedForUnrelatedUser() {
+        $checklistItem = static::getFixture('checklistItemPrototype_1_1');
+        static::createClientWithCredentials()->request('DELETE', '/checklist_items/'.$checklistItem->getId());
+
+        $this->assertResponseStatusCodeSame(403);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Access Denied.',
+        ]);
+    }
+}
diff --git a/api/tests/Api/ChecklistItems/ListChecklistItemTest.php b/api/tests/Api/ChecklistItems/ListChecklistItemTest.php
new file mode 100644
index 0000000000..cbffa0d0a5
--- /dev/null
+++ b/api/tests/Api/ChecklistItems/ListChecklistItemTest.php
@@ -0,0 +1,128 @@
+<?php
+
+namespace App\Tests\Api\ChecklistItems;
+
+use App\Tests\Api\ECampApiTestCase;
+
+/**
+ * @internal
+ */
+class ListChecklistItemTest extends ECampApiTestCase {
+    public function testListChecklistItemsIsDeniedForAnonymousUser() {
+        $response = static::createBasicClient()->request('GET', '/checklist_items');
+        $this->assertResponseStatusCodeSame(401);
+        $this->assertJsonContains([
+            'code' => 401,
+            'message' => 'JWT Token not found',
+        ]);
+    }
+
+    public function testListChecklistItemsIsAllowedForLoggedInUserButFiltered() {
+        // precondition: There is a checklist-item that the user doesn't have access to
+        $this->assertNotEmpty(static::$fixtures['checklistItemUnrelated_1_1']);
+
+        $response = static::createClientWithCredentials()->request('GET', '/checklist_items');
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'totalItems' => 5,
+            '_links' => [
+                'items' => [],
+            ],
+            '_embedded' => [
+                'items' => [],
+            ],
+        ]);
+        $this->assertEqualsCanonicalizing([
+            ['href' => $this->getIriFor('checklistItem1_1_1')],
+            ['href' => $this->getIriFor('checklistItem1_1_2')],
+            ['href' => $this->getIriFor('checklistItem1_1_2_3')],
+            ['href' => $this->getIriFor('checklistItem2_1_1')],
+            ['href' => $this->getIriFor('checklistItemPrototype_1_1')],
+        ], $response->toArray()['_links']['items']);
+    }
+
+    public function testListChecklistItemsFilteredByChecklistIsAllowedForCollaborator() {
+        $checklist = static::getFixture('checklist1');
+        $response = static::createClientWithCredentials()->request('GET', '/checklist_items?checklist=%2Fchecklists%2F'.$checklist->getId());
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'totalItems' => 3,
+            '_links' => [
+                'items' => [],
+            ],
+            '_embedded' => [
+                'items' => [],
+            ],
+        ]);
+        $this->assertEqualsCanonicalizing([
+            ['href' => $this->getIriFor('checklistItem1_1_1')],
+            ['href' => $this->getIriFor('checklistItem1_1_2')],
+            ['href' => $this->getIriFor('checklistItem1_1_2_3')],
+        ], $response->toArray()['_links']['items']);
+    }
+
+    public function testListChecklistItemsFilteredByChecklistIsDeniedForUnrelatedUser() {
+        $checklist = static::getFixture('checklist1');
+        $response = static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()])
+            ->request('GET', '/checklist_items?checklist=%2Fchecklists%2F'.$checklist->getId())
+        ;
+
+        $this->assertResponseStatusCodeSame(200);
+
+        $this->assertJsonContains(['totalItems' => 0]);
+        $this->assertArrayNotHasKey('items', $response->toArray()['_links']);
+    }
+
+    public function testListChecklistItemsFilteredByChecklistIsDeniedForInactiveCollaborator() {
+        $checklist = static::getFixture('checklist1');
+        $response = static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()])
+            ->request('GET', '/checklist_items?checklist=%2Fchecklists%2F'.$checklist->getId())
+        ;
+
+        $this->assertResponseStatusCodeSame(200);
+
+        $this->assertJsonContains(['totalItems' => 0]);
+        $this->assertArrayNotHasKey('items', $response->toArray()['_links']);
+    }
+
+    public function testListChecklistItemsFilteredByChecklistPrototypeIsAllowedForUnrelatedUser() {
+        $checklist = static::getFixture('checklist1campPrototype');
+        $response = static::createClientWithCredentials()->request('GET', '/checklist_items?checklist=%2Fchecklists%2F'.$checklist->getId());
+
+        $this->assertResponseStatusCodeSame(200);
+
+        $this->assertJsonContains(['totalItems' => 1]);
+        $this->assertEqualsCanonicalizing([
+            ['href' => $this->getIriFor('checklistItemPrototype_1_1')],
+        ], $response->toArray()['_links']['items']);
+    }
+
+    public function testListChecklistItemsAsChecklistSubresourceIsAllowedForCollaborator() {
+        $checklist = static::getFixture('checklist1');
+        $response = static::createClientWithCredentials()->request('GET', '/checklists/'.$checklist->getId().'/checklist_items');
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'totalItems' => 3,
+            '_links' => [
+                'items' => [],
+            ],
+            '_embedded' => [
+                'items' => [],
+            ],
+        ]);
+        $this->assertEqualsCanonicalizing([
+            ['href' => $this->getIriFor('checklistItem1_1_1')],
+            ['href' => $this->getIriFor('checklistItem1_1_2')],
+            ['href' => $this->getIriFor('checklistItem1_1_2_3')],
+        ], $response->toArray()['_links']['items']);
+    }
+
+    public function testListChecklistItemsAsChecklistSubresourceIsDeniedForUnrelatedUser() {
+        $checklist = static::getFixture('checklist1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()])
+            ->request('GET', '/checklists/'.$checklist->getId().'/checklist_items')
+        ;
+
+        $this->assertResponseStatusCodeSame(404);
+    }
+}
diff --git a/api/tests/Api/ChecklistItems/ReadChecklistItemTest.php b/api/tests/Api/ChecklistItems/ReadChecklistItemTest.php
new file mode 100644
index 0000000000..9e362711a8
--- /dev/null
+++ b/api/tests/Api/ChecklistItems/ReadChecklistItemTest.php
@@ -0,0 +1,108 @@
+<?php
+
+namespace App\Tests\Api\ChecklistItems;
+
+use App\Entity\ChecklistItem;
+use App\Tests\Api\ECampApiTestCase;
+
+/**
+ * @internal
+ */
+class ReadChecklistItemTest extends ECampApiTestCase {
+    public function testGetSingleChecklistItemIsDeniedForAnonymousUser() {
+        /** @var ChecklistItem $checklistItem */
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createBasicClient()->request('GET', '/checklist_items/'.$checklistItem->getId());
+        $this->assertResponseStatusCodeSame(401);
+        $this->assertJsonContains([
+            'code' => 401,
+            'message' => 'JWT Token not found',
+        ]);
+    }
+
+    public function testGetSingleChecklistItemIsDeniedForUnrelatedUser() {
+        /** @var ChecklistItem $checklistItem */
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()])
+            ->request('GET', '/checklist_items/'.$checklistItem->getId())
+        ;
+        $this->assertResponseStatusCodeSame(404);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Not Found',
+        ]);
+    }
+
+    public function testGetSingleChecklistItemIsDeniedForInactiveCollaborator() {
+        /** @var ChecklistItem $checklistItem */
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()])
+            ->request('GET', '/checklist_items/'.$checklistItem->getId())
+        ;
+        $this->assertResponseStatusCodeSame(404);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Not Found',
+        ]);
+    }
+
+    public function testGetSingleChecklistItemIsAllowedForGuest() {
+        /** @var ChecklistItem $checklistItem */
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()])
+            ->request('GET', '/checklist_items/'.$checklistItem->getId())
+        ;
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'id' => $checklistItem->getId(),
+            'text' => $checklistItem->text,
+            '_links' => [
+                'checklist' => ['href' => $this->getIriFor('checklist1')],
+            ],
+        ]);
+    }
+
+    public function testGetSingleChecklistItemIsAllowedForMember() {
+        /** @var ChecklistItem $checklistItem */
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()])
+            ->request('GET', '/checklist_items/'.$checklistItem->getId())
+        ;
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'id' => $checklistItem->getId(),
+            'text' => $checklistItem->text,
+            '_links' => [
+                'checklist' => ['href' => $this->getIriFor('checklist1')],
+            ],
+        ]);
+    }
+
+    public function testGetSingleChecklistItemIsAllowedForManager() {
+        /** @var ChecklistItem $checklistItem */
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createClientWithCredentials()->request('GET', '/checklist_items/'.$checklistItem->getId());
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'id' => $checklistItem->getId(),
+            'text' => $checklistItem->text,
+            '_links' => [
+                'checklist' => ['href' => $this->getIriFor('checklist1')],
+            ],
+        ]);
+    }
+
+    public function testGetSingleChecklistItemFromCampPrototypeIsAllowedForUnrelatedUser() {
+        /** @var ChecklistItem $checklistItem */
+        $checklistItem = static::getFixture('checklistItemPrototype_1_1');
+        static::createClientWithCredentials()->request('GET', '/checklist_items/'.$checklistItem->getId());
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'id' => $checklistItem->getId(),
+            'text' => $checklistItem->text,
+            '_links' => [
+                'checklist' => ['href' => $this->getIriFor('checklist1campPrototype')],
+            ],
+        ]);
+    }
+}
diff --git a/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php b/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php
new file mode 100644
index 0000000000..ca6ceae23a
--- /dev/null
+++ b/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php
@@ -0,0 +1,220 @@
+<?php
+
+namespace App\Tests\Api\ChecklistItems;
+
+use App\Tests\Api\ECampApiTestCase;
+
+/**
+ * @internal
+ */
+class UpdateChecklistItemTest extends ECampApiTestCase {
+    public function testPatchChecklistItemIsDeniedForAnonymousUser() {
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createBasicClient()->request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [
+            'text' => 'Ziel 2',
+        ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
+        $this->assertResponseStatusCodeSame(401);
+        $this->assertJsonContains([
+            'code' => 401,
+            'message' => 'JWT Token not found',
+        ]);
+    }
+
+    public function testPatchChecklistItemIsDeniedForUnrelatedUser() {
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user4unrelated']->getEmail()])
+            ->request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [
+                'text' => 'Ziel 2',
+            ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
+        ;
+        $this->assertResponseStatusCodeSame(404);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Not Found',
+        ]);
+    }
+
+    public function testPatchChecklistItemIsDeniedForInactiveCollaborator() {
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user5inactive']->getEmail()])
+            ->request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [
+                'text' => 'Ziel 2',
+            ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
+        ;
+        $this->assertResponseStatusCodeSame(404);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Not Found',
+        ]);
+    }
+
+    public function testPatchChecklistItemIsDeniedForGuest() {
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createClientWithCredentials(['email' => static::$fixtures['user3guest']->getEmail()])
+            ->request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [
+                'text' => 'Ziel 2',
+            ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
+        ;
+        $this->assertResponseStatusCodeSame(403);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Access Denied.',
+        ]);
+    }
+
+    public function testPatchChecklistItemIsAllowedForMember() {
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        $response = static::createClientWithCredentials(['email' => static::$fixtures['user2member']->getEmail()])
+            ->request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [
+                'text' => 'Ziel 2',
+            ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
+        ;
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'text' => 'Ziel 2',
+        ]);
+    }
+
+    public function testPatchChecklistItemIsAllowedForManager() {
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        $response = static::createClientWithCredentials()->request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [
+            'text' => 'Ziel 2',
+        ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            'text' => 'Ziel 2',
+        ]);
+    }
+
+    public function testPatchChecklistItemInCampPrototypeIsDeniedForUnrelatedUser() {
+        $checklistItem = static::getFixture('checklistItemPrototype_1_1');
+        $response = static::createClientWithCredentials()->request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [
+            'text' => 'Ziel 2',
+        ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
+        $this->assertResponseStatusCodeSame(403);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Access Denied.',
+        ]);
+    }
+
+    public function testPatchChecklistItemDisallowsChangingChecklist() {
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createClientWithCredentials()->request('PATCH', '/checklist_items/'.$checklistItem->getId(), ['json' => [
+            'checklist' => $this->getIriFor('checklistItem2_1_1'),
+        ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
+
+        $this->assertResponseStatusCodeSame(400);
+        $this->assertJsonContains([
+            'detail' => 'Extra attributes are not allowed ("checklist" is unknown).',
+        ]);
+    }
+
+    public function testPatchChecklistItemValidatesNullText() {
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createClientWithCredentials()->request(
+            'PATCH',
+            '/checklist_items/'.$checklistItem->getId(),
+            [
+                'json' => [
+                    'text' => null,
+                ],
+                'headers' => ['Content-Type' => 'application/merge-patch+json'],
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(400);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'The type of the "text" attribute must be "string", "NULL" given.',
+        ]);
+    }
+
+    public function testPatchChecklistItemValidatesBlankText() {
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createClientWithCredentials()->request(
+            'PATCH',
+            '/checklist_items/'.$checklistItem->getId(),
+            [
+                'json' => [
+                    'text' => ' ',
+                ],
+                'headers' => ['Content-Type' => 'application/merge-patch+json'],
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'violations' => [
+                [
+                    'propertyPath' => 'text',
+                    'message' => 'This value should not be blank.',
+                ],
+            ],
+        ]);
+    }
+
+    public function testPatchChecklistItemValidatesTooLongText() {
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createClientWithCredentials()->request(
+            'PATCH',
+            '/checklist_items/'.$checklistItem->getId(),
+            [
+                'json' => [
+                    'text' => str_repeat('l', 65),
+                ],
+                'headers' => ['Content-Type' => 'application/merge-patch+json'],
+            ]
+        );
+
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'violations' => [
+                [
+                    'propertyPath' => 'text',
+                    'message' => 'This value is too long. It should have 64 characters or less.',
+                ],
+            ],
+        ]);
+    }
+
+    public function testPatchChecklistItemTrimsText() {
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createClientWithCredentials()->request(
+            'PATCH',
+            '/checklist_items/'.$checklistItem->getId(),
+            [
+                'json' => [
+                    'text' => "  \t Ziel 2\t ",
+                ],
+                'headers' => ['Content-Type' => 'application/merge-patch+json'], ]
+        );
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains(
+            [
+                'text' => 'Ziel 2',
+            ]
+        );
+    }
+
+    public function testPatchChecklistItemCleansForbiddenCharactersFromText() {
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        $client = static::createClientWithCredentials();
+        $client->disableReboot();
+        $client->request(
+            'PATCH',
+            '/checklist_items/'.$checklistItem->getId(),
+            [
+                'json' => [
+                    'text' => "<b>Ziel</b>2\n\t<a>",
+                ],
+                'headers' => ['Content-Type' => 'application/merge-patch+json'], ]
+        );
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains(
+            [
+                'text' => '<b>Ziel</b>2<a>',
+            ]
+        );
+    }
+}

From c478c4cf27c8e9d2a69021534bde3306da18204a Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Sun, 16 Jun 2024 13:58:29 +0200
Subject: [PATCH 159/273] Add ChecklistNode

---
 api/fixtures/checklistNodes.yml               |   15 +
 api/fixtures/contentTypes.yml                 |    4 +
 .../schema/Version20240616104153.php          |   34 +
 .../schema/Version20240616143000.php          |   34 +
 api/src/Entity/ChecklistItem.php              |    8 +
 api/src/Entity/ContentNode/ChecklistNode.php  |  108 ++
 .../Repository/ChecklistNodeRepository.php    |   20 +
 .../ChecklistNodePersistProcessor.php         |   40 +
 .../ContentNode/ListContentNodesTest.php      |    6 +-
 .../Api/ContentTypes/ListContentTypesTest.php |    8 +-
 .../SnapshotTests/EndpointPerformanceTest.php |    4 +-
 .../Api/SnapshotTests/ReadItemFixtureMap.php  |    1 +
 ...Structure with data set activities__1.json |    6 +-
 ...ta set content_nodechecklist_nodes__1.json |   42 +
 ...ata set content_nodecolumn_layouts__1.json |   34 +-
 ...ucture with data set content_nodes__1.json |   50 +-
 ...ucture with data set content_types__1.json |   16 +
 ...ta set content_nodechecklist_nodes__1.json |   25 +
 ...ure with data set schedule_entries__1.json |    6 +-
 ...est__testOpenApiSpecMatchesSnapshot__1.yml | 1129 +++++++++++++++++
 ...t__testRootEndpointMatchesSnapshot__1.json |    4 +
 e2e/specs/httpCache.cy.js                     |    2 +-
 .../responses/content_types_collection.json   |   18 +-
 23 files changed, 1579 insertions(+), 35 deletions(-)
 create mode 100644 api/fixtures/checklistNodes.yml
 create mode 100644 api/migrations/schema/Version20240616104153.php
 create mode 100644 api/migrations/schema/Version20240616143000.php
 create mode 100644 api/src/Entity/ContentNode/ChecklistNode.php
 create mode 100644 api/src/Repository/ChecklistNodeRepository.php
 create mode 100644 api/src/State/ContentNode/ChecklistNodePersistProcessor.php
 create mode 100644 api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodechecklist_nodes__1.json
 create mode 100644 api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set content_nodechecklist_nodes__1.json

diff --git a/api/fixtures/checklistNodes.yml b/api/fixtures/checklistNodes.yml
new file mode 100644
index 0000000000..9351448280
--- /dev/null
+++ b/api/fixtures/checklistNodes.yml
@@ -0,0 +1,15 @@
+App\Entity\ContentNode\ChecklistNode:
+  checklistNode3:
+    root: '@columnLayout3'
+    parent: '@columnLayout3'
+    slot: '1'
+    position: 1
+    instanceName: <word()>
+    contentType: '@contentTypeChecklist'
+  checklistNodeCampUnrelated:
+    root: '@columnLayout1campUnrelated'
+    parent: '@columnLayout1campUnrelated'
+    slot: '1'
+    position: 5
+    instanceName: <word()>
+    contentType: '@contentTypeChecklist'
\ No newline at end of file
diff --git a/api/fixtures/contentTypes.yml b/api/fixtures/contentTypes.yml
index a9127eae79..8591a2f7a3 100644
--- a/api/fixtures/contentTypes.yml
+++ b/api/fixtures/contentTypes.yml
@@ -40,3 +40,7 @@ App\Entity\ContentType:
     active: true
     entityClass: 'App\Entity\ContentNode\MultiSelect'
     jsonConfig: { items: [ 'outdoorTechnique', 'security', 'natureAndEnvironment', 'pioneeringTechnique', 'campsiteAndSurroundings', 'preventionAndIntegration' ] }
+  contentTypeChecklist:
+    name: 'Checklist'
+    active: true
+    entityClass: 'App\Entity\ContentNode\ChecklistNode'
diff --git a/api/migrations/schema/Version20240616104153.php b/api/migrations/schema/Version20240616104153.php
new file mode 100644
index 0000000000..340d9d16fd
--- /dev/null
+++ b/api/migrations/schema/Version20240616104153.php
@@ -0,0 +1,34 @@
+<?php
+
+declare(strict_types=1);
+
+namespace DoctrineMigrations;
+
+use Doctrine\DBAL\Schema\Schema;
+use Doctrine\Migrations\AbstractMigration;
+
+/**
+ * Auto-generated Migration: Please modify to your needs!
+ */
+final class Version20240616104153 extends AbstractMigration {
+    public function getDescription(): string {
+        return '';
+    }
+
+    public function up(Schema $schema): void {
+        // this up() migration is auto-generated, please modify it to your needs
+        $this->addSql('CREATE TABLE checklistnode_checklistitem (checklistnode_id VARCHAR(16) NOT NULL, checklistitem_id VARCHAR(16) NOT NULL, PRIMARY KEY(checklistnode_id, checklistitem_id))');
+        $this->addSql('CREATE INDEX IDX_5A2B5B31DE6B6F00 ON checklistnode_checklistitem (checklistnode_id)');
+        $this->addSql('CREATE INDEX IDX_5A2B5B318A09A289 ON checklistnode_checklistitem (checklistitem_id)');
+        $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT FK_5A2B5B31DE6B6F00 FOREIGN KEY (checklistnode_id) REFERENCES content_node (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
+        $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT FK_5A2B5B318A09A289 FOREIGN KEY (checklistitem_id) REFERENCES checklist_item (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
+    }
+
+    public function down(Schema $schema): void {
+        // this down() migration is auto-generated, please modify it to your needs
+        $this->addSql('CREATE SCHEMA public');
+        $this->addSql('ALTER TABLE checklistnode_checklistitem DROP CONSTRAINT FK_5A2B5B31DE6B6F00');
+        $this->addSql('ALTER TABLE checklistnode_checklistitem DROP CONSTRAINT FK_5A2B5B318A09A289');
+        $this->addSql('DROP TABLE checklistnode_checklistitem');
+    }
+}
diff --git a/api/migrations/schema/Version20240616143000.php b/api/migrations/schema/Version20240616143000.php
new file mode 100644
index 0000000000..f18be0dcb8
--- /dev/null
+++ b/api/migrations/schema/Version20240616143000.php
@@ -0,0 +1,34 @@
+<?php
+
+declare(strict_types=1);
+
+namespace DoctrineMigrations;
+
+use Doctrine\DBAL\Schema\Schema;
+use Doctrine\Migrations\AbstractMigration;
+
+final class Version20240616143000 extends AbstractMigration {
+    public function getDescription(): string {
+        return 'Add ChecklistNode content type';
+    }
+
+    public function up(Schema $schema): void {
+        $this->addSql("
+            INSERT INTO public.content_type (id, name, active, entityclass, jsonconfig, createtime, updatetime)
+            VALUES (
+                'a4211c11211c',
+                'Checklist',
+                true,
+                'App\\Entity\\ContentNode\\ChecklistNode',
+                null,
+                '2024-06-16 14:30:00',
+                '2024-06-16 14:30:00'
+            );
+        ");
+    }
+
+    public function down(Schema $schema): void {
+        // this down() migration is auto-generated, please modify it to your needs
+        $this->addSql('DELETE FROM public.content_type WHERE id IN (\'a4211c11211c\')');
+    }
+}
diff --git a/api/src/Entity/ChecklistItem.php b/api/src/Entity/ChecklistItem.php
index aee087b9a6..c6c453806b 100644
--- a/api/src/Entity/ChecklistItem.php
+++ b/api/src/Entity/ChecklistItem.php
@@ -12,6 +12,7 @@
 use ApiPlatform\Metadata\Link;
 use ApiPlatform\Metadata\Patch;
 use ApiPlatform\Metadata\Post;
+use App\Entity\ContentNode\ChecklistNode;
 use App\InputFilter;
 use App\Repository\ChecklistItemRepository;
 use App\Util\EntityMap;
@@ -100,6 +101,12 @@ class ChecklistItem extends BaseEntity implements BelongsToCampInterface, CopyFr
     #[ORM\OneToMany(targetEntity: ChecklistItem::class, mappedBy: 'parent', cascade: ['persist'])]
     public Collection $children;
 
+    /**
+     * All ChecklistNodes that have selected this ChecklistItem.
+     */
+    #[ORM\ManyToMany(targetEntity: ChecklistNode::class, mappedBy: 'checklistItems')]
+    public Collection $checklistNodes;
+
     /**
      * The human readable text of the checklist-item.
      */
@@ -125,6 +132,7 @@ class ChecklistItem extends BaseEntity implements BelongsToCampInterface, CopyFr
     public function __construct() {
         parent::__construct();
         $this->children = new ArrayCollection();
+        $this->checklistNodes = new ArrayCollection();
     }
 
     #[ApiProperty(readable: false)]
diff --git a/api/src/Entity/ContentNode/ChecklistNode.php b/api/src/Entity/ContentNode/ChecklistNode.php
new file mode 100644
index 0000000000..237296a7b9
--- /dev/null
+++ b/api/src/Entity/ContentNode/ChecklistNode.php
@@ -0,0 +1,108 @@
+<?php
+
+namespace App\Entity\ContentNode;
+
+use ApiPlatform\Metadata\ApiProperty;
+use ApiPlatform\Metadata\ApiResource;
+use ApiPlatform\Metadata\Delete;
+use ApiPlatform\Metadata\Get;
+use ApiPlatform\Metadata\GetCollection;
+use ApiPlatform\Metadata\Patch;
+use ApiPlatform\Metadata\Post;
+use App\Entity\Checklist;
+use App\Entity\ChecklistItem;
+use App\Entity\ContentNode;
+use App\Repository\ChecklistNodeRepository;
+use App\State\ContentNode\ChecklistNodePersistProcessor;
+use App\Util\EntityMap;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\Common\Collections\Collection;
+use Doctrine\ORM\Mapping as ORM;
+use Symfony\Component\Serializer\Annotation\Groups;
+
+#[ApiResource(
+    operations: [
+        new Get(
+            security: 'is_granted("CAMP_COLLABORATOR", object) or is_granted("CAMP_IS_PROTOTYPE", object)'
+        ),
+        new Patch(
+            processor: ChecklistNodePersistProcessor::class,
+            denormalizationContext: ['groups' => ['write', 'update']],
+            security: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)',
+            validationContext: ['groups' => ['Default', 'update']]
+        ),
+        new Delete(
+            security: '(is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)) and object.parent !== null'
+        ),
+        new GetCollection(
+            security: 'is_authenticated()'
+        ),
+        new Post(
+            processor: ChecklistNodePersistProcessor::class,
+            denormalizationContext: ['groups' => ['write', 'create']],
+            securityPostDenormalize: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)',
+            validationContext: ['groups' => ['Default', 'create']],
+        ),
+    ],
+    denormalizationContext: ['groups' => ['write']],
+    normalizationContext: ['groups' => ['read']],
+    routePrefix: '/content_node'
+)]
+#[ORM\Entity(repositoryClass: ChecklistNodeRepository::class)]
+class ChecklistNode extends ContentNode {
+    /**
+     * The content types that are most likely to be useful for planning programme of this category.
+     */
+    #[ApiProperty(example: '["/checklist_items/1a2b3c4d"]')]
+    #[Groups(['read'])]
+    #[ORM\ManyToMany(targetEntity: ChecklistItem::class, inversedBy: 'checklistNodes')]
+    #[ORM\JoinTable(name: 'checklistnode_checklistitem')]
+    #[ORM\JoinColumn(name: 'checklistnode_id', referencedColumnName: 'id')]
+    #[ORM\InverseJoinColumn(name: 'checklistitem_id', referencedColumnName: 'id')]
+    #[ORM\OrderBy(['position' => 'ASC'])]
+    public Collection $checklistItems;
+
+    #[ApiProperty(example: '["1a2b3c4d"]')]
+    #[Groups(['write'])]
+    public ?array $addChecklistItemIds = [];
+
+    #[ApiProperty(example: '["1a2b3c4d"]')]
+    #[Groups(['write'])]
+    public ?array $removeChecklistItemIds = [];
+
+    public function __construct() {
+        parent::__construct();
+        $this->checklistItems = new ArrayCollection();
+    }
+
+    /**
+     * @return ChecklistItem[]
+     */
+    public function getChecklistItems(): array {
+        return $this->checklistItems->getValues();
+    }
+
+    public function addChecklistItem(ChecklistItem $checklistItem) {
+        $this->checklistItems->add($checklistItem);
+    }
+
+    public function removeChecklistItem(ChecklistItem $checklistItem) {
+        $this->checklistItems->removeElement($checklistItem);
+    }
+
+    /**
+     * @param ChecklistNode $prototype
+     * @param EntityMap     $entityMap
+     */
+    public function copyFromPrototype($prototype, $entityMap): void {
+        parent::copyFromPrototype($prototype, $entityMap);
+
+        // copy all checklist-items
+        foreach ($prototype->checklistItems as $itemPrototype) {
+            /** @var ChecklistItem $itemPrototype */
+            /** @var ChecklistItem $checklilstItem */
+            $checklilstItem = $entityMap->get($itemPrototype);
+            $this->addChecklistItem($checklilstItem);
+        }
+    }
+}
diff --git a/api/src/Repository/ChecklistNodeRepository.php b/api/src/Repository/ChecklistNodeRepository.php
new file mode 100644
index 0000000000..c6b9bafe84
--- /dev/null
+++ b/api/src/Repository/ChecklistNodeRepository.php
@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Repository;
+
+use App\Entity\ContentNode\ChecklistNode;
+use Doctrine\ORM\EntityManagerInterface;
+
+/**
+ * @method null|ChecklistNode find($id, $lockMode = null, $lockVersion = null)
+ * @method null|ChecklistNode findOneBy(array $criteria, array $orderBy = null)
+ * @method ChecklistNode[]    findAll()
+ * @method ChecklistNode[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
+ *
+ * @template-extends ContentNodeRepository<ChecklistNode>
+ */
+class ChecklistNodeRepository extends ContentNodeRepository {
+    public function __construct(EntityManagerInterface $em) {
+        parent::__construct($em, ChecklistNode::class);
+    }
+}
diff --git a/api/src/State/ContentNode/ChecklistNodePersistProcessor.php b/api/src/State/ContentNode/ChecklistNodePersistProcessor.php
new file mode 100644
index 0000000000..b138cf7b73
--- /dev/null
+++ b/api/src/State/ContentNode/ChecklistNodePersistProcessor.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace App\State\ContentNode;
+
+use ApiPlatform\Metadata\Operation;
+use ApiPlatform\State\ProcessorInterface;
+use App\Entity\ContentNode\ChecklistNode;
+use App\Repository\ChecklistItemRepository;
+
+/**
+ * @template-extends ContentNodePersistProcessor<ChecklistNode>
+ */
+class ChecklistNodePersistProcessor extends ContentNodePersistProcessor {
+    public function __construct(
+        ProcessorInterface $decorated,
+        private ChecklistItemRepository $checklistItemRepository,
+    ) {
+        parent::__construct($decorated);
+    }
+
+    public function onBefore($data, Operation $operation, array $uriVariables = [], array $context = []): ChecklistNode {
+        /** @var ChecklistNode $data */
+        $data = parent::onBefore($data, $operation, $uriVariables, $context);
+
+        if (null !== $data->addChecklistItemIds) {
+            foreach ($data->addChecklistItemIds as $checklistItemId) {
+                $checklistItem = $this->checklistItemRepository->find($checklistItemId);
+                $data->addChecklistItem($checklistItem);
+            }
+        }
+        if (null !== $data->removeChecklistItemIds) {
+            foreach ($data->removeChecklistItemIds as $checklistItemId) {
+                $checklistItem = $this->checklistItemRepository->find($checklistItemId);
+                $data->removeChecklistItem($checklistItem);
+            }
+        }
+
+        return $data;
+    }
+}
diff --git a/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php b/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php
index 983df008d9..692bfe1251 100644
--- a/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php
+++ b/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php
@@ -23,7 +23,7 @@ public function testListContentNodesIsAllowedForLoggedInUserButFiltered() {
         $response = static::createClientWithCredentials()->request('GET', '/content_nodes');
         $this->assertResponseStatusCodeSame(200);
         $this->assertJsonContains([
-            'totalItems' => 21,
+            'totalItems' => 22,
             '_links' => [
                 'items' => [],
             ],
@@ -37,6 +37,7 @@ public function testListContentNodesIsAllowedForLoggedInUserButFiltered() {
             ['href' => $this->getIriFor('columnLayoutChild1')],
             ['href' => $this->getIriFor('columnLayout2Child1')],
             ['href' => $this->getIriFor('columnLayout3')],
+            ['href' => $this->getIriFor('checklistNode3')],
             ['href' => $this->getIriFor('columnLayout4')],
             ['href' => $this->getIriFor('columnLayout5')],
             ['href' => $this->getIriFor('columnLayout1camp2')],
@@ -61,7 +62,7 @@ public function testListContentNodesFilteredByPeriodIsAllowedForCollaborator() {
         $response = static::createClientWithCredentials()->request('GET', '/content_nodes?period=%2Fperiods%2F'.$period->getId());
         $this->assertResponseStatusCodeSame(200);
         $this->assertJsonContains([
-            'totalItems' => 12,
+            'totalItems' => 13,
             '_links' => [
                 'items' => [],
             ],
@@ -73,6 +74,7 @@ public function testListContentNodesFilteredByPeriodIsAllowedForCollaborator() {
             ['href' => $this->getIriFor('columnLayout1')],
             ['href' => $this->getIriFor('columnLayoutChild1')],
             ['href' => $this->getIriFor('columnLayout3')],
+            ['href' => $this->getIriFor('checklistNode3')],
             ['href' => $this->getIriFor('singleText1')],
             ['href' => $this->getIriFor('singleText2')],
             ['href' => $this->getIriFor('safetyConsiderations1')],
diff --git a/api/tests/Api/ContentTypes/ListContentTypesTest.php b/api/tests/Api/ContentTypes/ListContentTypesTest.php
index 79cd0bf6ed..c5a58ccee6 100644
--- a/api/tests/Api/ContentTypes/ListContentTypesTest.php
+++ b/api/tests/Api/ContentTypes/ListContentTypesTest.php
@@ -12,7 +12,7 @@ public function testListContentTypesIsAllowedForAnonymousUser() {
         $response = static::createBasicClient()->request('GET', '/content_types');
         $this->assertResponseStatusCodeSame(200);
         $this->assertJsonContains([
-            'totalItems' => 10,
+            'totalItems' => 11,
             '_links' => [
                 'items' => [],
             ],
@@ -21,14 +21,14 @@ public function testListContentTypesIsAllowedForAnonymousUser() {
             ],
         ]);
 
-        $this->assertCount(10, $response->toArray()['_links']['items']);
+        $this->assertCount(11, $response->toArray()['_links']['items']);
     }
 
     public function testListContentTypesIsAllowedForLoggedInUser() {
         $response = static::createClientWithCredentials()->request('GET', '/content_types');
         $this->assertResponseStatusCodeSame(200);
         $this->assertJsonContains([
-            'totalItems' => 10,
+            'totalItems' => 11,
             '_links' => [
                 'items' => [],
             ],
@@ -36,6 +36,6 @@ public function testListContentTypesIsAllowedForLoggedInUser() {
                 'items' => [],
             ],
         ]);
-        $this->assertCount(10, $response->toArray()['_links']['items']);
+        $this->assertCount(11, $response->toArray()['_links']['items']);
     }
 }
diff --git a/api/tests/Api/SnapshotTests/EndpointPerformanceTest.php b/api/tests/Api/SnapshotTests/EndpointPerformanceTest.php
index 93cb47f721..1463bb5cd4 100644
--- a/api/tests/Api/SnapshotTests/EndpointPerformanceTest.php
+++ b/api/tests/Api/SnapshotTests/EndpointPerformanceTest.php
@@ -186,9 +186,11 @@ protected function getSnapshotId(): string {
 
     private static function getContentNodeEndpointQueryCountRanges(): array {
         return [
-            '/content_nodes' => [8, 9],
+            '/content_nodes' => [8, 10],
             '/content_node/column_layouts' => [6, 6],
             '/content_node/column_layouts/item' => [10, 10],
+            '/content_node/checklist_nodes' => [6, 7],
+            '/content_node/checklist_nodes/item' => [9, 9],
             '/content_node/material_nodes' => [6, 7],
             '/content_node/material_nodes/item' => [9, 9],
             '/content_node/multi_selects' => [6, 7],
diff --git a/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php b/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php
index a07f974987..86b74b207d 100644
--- a/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php
+++ b/api/tests/Api/SnapshotTests/ReadItemFixtureMap.php
@@ -13,6 +13,7 @@ public static function get(string $collectionEndpoint, array $fixtures): mixed {
             '/categories' => $fixtures['category1'],
             '/checklists' => $fixtures['checklist1'],
             '/checklist_items' => $fixtures['checklistItem1_1_1'],
+            '/content_node/checklist_nodes' => $fixtures['checklistNode3'],
             '/content_node/column_layouts' => $fixtures['columnLayout2'],
             '/content_node/responsive_layouts' => $fixtures['responsiveLayout1'],
             '/content_types' => $fixtures['contentTypeSafetyConsiderations'],
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set activities__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set activities__1.json
index eab677ee6d..17f0da395c 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set activities__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set activities__1.json	
@@ -381,7 +381,11 @@
                     },
                     "rootContentNode": {
                         "_links": {
-                            "children": [],
+                            "children": [
+                                {
+                                    "href": "escaped_value"
+                                }
+                            ],
                             "contentType": {
                                 "href": "escaped_value"
                             },
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodechecklist_nodes__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodechecklist_nodes__1.json
new file mode 100644
index 0000000000..a657327a12
--- /dev/null
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodechecklist_nodes__1.json	
@@ -0,0 +1,42 @@
+{
+    "_embedded": {
+        "items": [
+            {
+                "_links": {
+                    "checklist": "escaped_value",
+                    "checklistItems": [],
+                    "children": [],
+                    "contentType": {
+                        "href": "escaped_value"
+                    },
+                    "parent": {
+                        "href": "escaped_value"
+                    },
+                    "root": {
+                        "href": "escaped_value"
+                    },
+                    "self": {
+                        "href": "escaped_value"
+                    }
+                },
+                "contentTypeName": "escaped_value",
+                "data": "escaped_value",
+                "id": "escaped_value",
+                "instanceName": "escaped_value",
+                "position": "escaped_value",
+                "slot": "escaped_value"
+            }
+        ]
+    },
+    "_links": {
+        "items": [
+            {
+                "href": "escaped_value"
+            }
+        ],
+        "self": {
+            "href": "escaped_value"
+        }
+    },
+    "totalItems": "escaped_value"
+}
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodecolumn_layouts__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodecolumn_layouts__1.json
index dbdfe83685..2c6362ca64 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodecolumn_layouts__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodecolumn_layouts__1.json	
@@ -147,7 +147,9 @@
                     "contentType": {
                         "href": "escaped_value"
                     },
-                    "parent": "escaped_value",
+                    "parent": {
+                        "href": "escaped_value"
+                    },
                     "root": {
                         "href": "escaped_value"
                     },
@@ -171,7 +173,17 @@
             },
             {
                 "_links": {
-                    "children": [],
+                    "children": [
+                        {
+                            "href": "escaped_value"
+                        },
+                        {
+                            "href": "escaped_value"
+                        },
+                        {
+                            "href": "escaped_value"
+                        }
+                    ],
                     "contentType": {
                         "href": "escaped_value"
                     },
@@ -188,6 +200,10 @@
                 "contentTypeName": "escaped_value",
                 "data": {
                     "columns": [
+                        {
+                            "slot": "escaped_value",
+                            "width": "escaped_value"
+                        },
                         {
                             "slot": "escaped_value",
                             "width": "escaped_value"
@@ -202,12 +218,6 @@
             {
                 "_links": {
                     "children": [
-                        {
-                            "href": "escaped_value"
-                        },
-                        {
-                            "href": "escaped_value"
-                        },
                         {
                             "href": "escaped_value"
                         }
@@ -215,9 +225,7 @@
                     "contentType": {
                         "href": "escaped_value"
                     },
-                    "parent": {
-                        "href": "escaped_value"
-                    },
+                    "parent": "escaped_value",
                     "root": {
                         "href": "escaped_value"
                     },
@@ -228,10 +236,6 @@
                 "contentTypeName": "escaped_value",
                 "data": {
                     "columns": [
-                        {
-                            "slot": "escaped_value",
-                            "width": "escaped_value"
-                        },
                         {
                             "slot": "escaped_value",
                             "width": "escaped_value"
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json
index 6945297e6c..540f43263f 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json	
@@ -80,11 +80,15 @@
             },
             {
                 "_links": {
+                    "checklist": "escaped_value",
+                    "checklistItems": [],
                     "children": [],
                     "contentType": {
                         "href": "escaped_value"
                     },
-                    "parent": "escaped_value",
+                    "parent": {
+                        "href": "escaped_value"
+                    },
                     "root": {
                         "href": "escaped_value"
                     },
@@ -93,14 +97,7 @@
                     }
                 },
                 "contentTypeName": "escaped_value",
-                "data": {
-                    "columns": [
-                        {
-                            "slot": "escaped_value",
-                            "width": "escaped_value"
-                        }
-                    ]
-                },
+                "data": "escaped_value",
                 "id": "escaped_value",
                 "instanceName": "escaped_value",
                 "position": "escaped_value",
@@ -644,6 +641,38 @@
                 "position": "escaped_value",
                 "slot": "escaped_value"
             },
+            {
+                "_links": {
+                    "children": [
+                        {
+                            "href": "escaped_value"
+                        }
+                    ],
+                    "contentType": {
+                        "href": "escaped_value"
+                    },
+                    "parent": "escaped_value",
+                    "root": {
+                        "href": "escaped_value"
+                    },
+                    "self": {
+                        "href": "escaped_value"
+                    }
+                },
+                "contentTypeName": "escaped_value",
+                "data": {
+                    "columns": [
+                        {
+                            "slot": "escaped_value",
+                            "width": "escaped_value"
+                        }
+                    ]
+                },
+                "id": "escaped_value",
+                "instanceName": "escaped_value",
+                "position": "escaped_value",
+                "slot": "escaped_value"
+            },
             {
                 "_links": {
                     "children": [
@@ -740,6 +769,9 @@
             {
                 "href": "escaped_value"
             },
+            {
+                "href": "escaped_value"
+            },
             {
                 "href": "escaped_value"
             }
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_types__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_types__1.json
index d8875812f3..8656a040cf 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_types__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_types__1.json	
@@ -118,6 +118,19 @@
                 "id": "escaped_value",
                 "name": "escaped_value"
             },
+            {
+                "_links": {
+                    "contentNodes": {
+                        "href": "escaped_value"
+                    },
+                    "self": {
+                        "href": "escaped_value"
+                    }
+                },
+                "active": "escaped_value",
+                "id": "escaped_value",
+                "name": "escaped_value"
+            },
             {
                 "_links": {
                     "contentNodes": {
@@ -162,6 +175,9 @@
             {
                 "href": "escaped_value"
             },
+            {
+                "href": "escaped_value"
+            },
             {
                 "href": "escaped_value"
             }
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set content_nodechecklist_nodes__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set content_nodechecklist_nodes__1.json
new file mode 100644
index 0000000000..f883ff8e4f
--- /dev/null
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set content_nodechecklist_nodes__1.json	
@@ -0,0 +1,25 @@
+{
+    "_links": {
+        "checklist": "escaped_value",
+        "checklistItems": [],
+        "children": [],
+        "contentType": {
+            "href": "escaped_value"
+        },
+        "parent": {
+            "href": "escaped_value"
+        },
+        "root": {
+            "href": "escaped_value"
+        },
+        "self": {
+            "href": "escaped_value"
+        }
+    },
+    "contentTypeName": "escaped_value",
+    "data": "escaped_value",
+    "id": "escaped_value",
+    "instanceName": "escaped_value",
+    "position": "escaped_value",
+    "slot": "escaped_value"
+}
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set schedule_entries__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set schedule_entries__1.json
index 3bc182b966..56715cb3b4 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set schedule_entries__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set schedule_entries__1.json	
@@ -4,7 +4,11 @@
             "_embedded": {
                 "rootContentNode": {
                     "_links": {
-                        "children": [],
+                        "children": [
+                            {
+                                "href": "escaped_value"
+                            }
+                        ],
                         "contentType": {
                             "href": "escaped_value"
                         },
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
index 2c4d1eddf4..7e3c14de5f 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
@@ -8311,6 +8311,846 @@ components:
         - position
         - text
       type: object
+    ChecklistNode-read:
+      deprecated: false
+      description: ''
+      properties:
+        checklist:
+          description: 'The Checklist this Item belongs to.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        checklistItems:
+          description: 'The content types that are most likely to be useful for planning programme of this category.'
+          example: '["/checklist_items/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          type: array
+        children:
+          description: 'All content nodes that are direct children of this content node.'
+          example: '["/content_nodes/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
+        contentType:
+          description: |-
+            Defines the type of this content node. There is a fixed list of types that are implemented
+            in eCamp. Depending on the type, different content data and different slots may be allowed
+            in a content node. The content type may not be changed once the content node is created.
+          example: /content_types/1a2b3c4d
+          format: iri-reference
+          type: string
+        contentTypeName:
+          description: 'The name of the content type of this content node. Read-only, for convenience.'
+          example: SafetyConcept
+          readOnly: true
+          type: string
+        data:
+          description: 'Holds the actual data of the content node.'
+          example:
+            text: 'dummy text'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        id:
+          description: 'An internal, unique, randomly generated identifier of this entity.'
+          example: 1a2b3c4d
+          maxLength: 16
+          readOnly: true
+          type: string
+        instanceName:
+          description: |-
+            An optional name for this content node. This is useful when planning e.g. an alternative
+            version of the programme suited for bad weather, in addition to the normal version.
+          example: Schlechtwetterprogramm
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+        parent:
+          description: |-
+            The parent to which this content node belongs. Is null in case this content node is the
+            root of a content node tree. For non-root content nodes, the parent can be changed, as long
+            as the new parent is in the same camp as the old one.
+          example: /content_nodes/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: |-
+            A whole number used for ordering multiple content nodes that are in the same slot of the
+            same parent. The API does not guarantee the uniqueness of parent+slot+position.
+          example: -1
+          type: integer
+        root:
+          description: |-
+            The content node that is the root of the content node tree. Refers to itself in case this
+            content node is the root.
+          example: /content_nodes/1a2b3c4d
+          format: iri-reference
+          readOnly: true
+          type:
+            - 'null'
+            - string
+        slot:
+          description: |-
+            The name of the slot in the parent in which this content node resides. The valid slot names
+            are defined by the content type of the parent.
+          example: '1'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+      required:
+        - checklistItems
+        - children
+        - contentType
+        - position
+      type: object
+    ChecklistNode-write_create:
+      deprecated: false
+      description: ''
+      properties:
+        addChecklistItemIds:
+          example: '["1a2b3c4d"]'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        checklist:
+          description: 'The Checklist this Item belongs to.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        checklistItems:
+          description: 'The content types that are most likely to be useful for planning programme of this category.'
+          example: '["/checklist_items/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          type: array
+        contentType:
+          description: |-
+            Defines the type of this content node. There is a fixed list of types that are implemented
+            in eCamp. Depending on the type, different content data and different slots may be allowed
+            in a content node. The content type may not be changed once the content node is created.
+          example: /content_types/1a2b3c4d
+          format: iri-reference
+          type: string
+        data:
+          description: 'Holds the actual data of the content node.'
+          example:
+            text: 'dummy text'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        instanceName:
+          description: |-
+            An optional name for this content node. This is useful when planning e.g. an alternative
+            version of the programme suited for bad weather, in addition to the normal version.
+          example: Schlechtwetterprogramm
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+        parent:
+          description: |-
+            The parent to which this content node belongs. Is null in case this content node is the
+            root of a content node tree. For non-root content nodes, the parent can be changed, as long
+            as the new parent is in the same camp as the old one.
+          example: /content_nodes/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: |-
+            A whole number used for ordering multiple content nodes that are in the same slot of the
+            same parent. The API does not guarantee the uniqueness of parent+slot+position.
+          example: -1
+          type: integer
+        removeChecklistItemIds:
+          example: '["1a2b3c4d"]'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        slot:
+          description: |-
+            The name of the slot in the parent in which this content node resides. The valid slot names
+            are defined by the content type of the parent.
+          example: '1'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+      required:
+        - checklistItems
+        - contentType
+        - parent
+        - position
+      type: object
+    ChecklistNode-write_update:
+      deprecated: false
+      description: ''
+      properties:
+        addChecklistItemIds:
+          example: '["1a2b3c4d"]'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        checklist:
+          description: 'The Checklist this Item belongs to.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        checklistItems:
+          description: 'The content types that are most likely to be useful for planning programme of this category.'
+          example: '["/checklist_items/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          type: array
+        data:
+          description: 'Holds the actual data of the content node.'
+          example:
+            text: 'dummy text'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        instanceName:
+          description: |-
+            An optional name for this content node. This is useful when planning e.g. an alternative
+            version of the programme suited for bad weather, in addition to the normal version.
+          example: Schlechtwetterprogramm
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+        parent:
+          description: |-
+            The parent to which this content node belongs. Is null in case this content node is the
+            root of a content node tree. For non-root content nodes, the parent can be changed, as long
+            as the new parent is in the same camp as the old one.
+          example: /content_nodes/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: |-
+            A whole number used for ordering multiple content nodes that are in the same slot of the
+            same parent. The API does not guarantee the uniqueness of parent+slot+position.
+          example: -1
+          type: integer
+        removeChecklistItemIds:
+          example: '["1a2b3c4d"]'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        slot:
+          description: |-
+            The name of the slot in the parent in which this content node resides. The valid slot names
+            are defined by the content type of the parent.
+          example: '1'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+      required:
+        - checklistItems
+        - position
+      type: object
+    ChecklistNode.jsonapi:
+      deprecated: false
+      description: ''
+      properties:
+        addChecklistItemIds:
+          example: '["1a2b3c4d"]'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+          writeOnly: true
+        checklist:
+          description: 'The Checklist this Item belongs to.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        checklistItems:
+          description: 'The content types that are most likely to be useful for planning programme of this category.'
+          example: '["/checklist_items/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          type: array
+        children:
+          description: 'All content nodes that are direct children of this content node.'
+          example: '["/content_nodes/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
+        contentType:
+          description: |-
+            Defines the type of this content node. There is a fixed list of types that are implemented
+            in eCamp. Depending on the type, different content data and different slots may be allowed
+            in a content node. The content type may not be changed once the content node is created.
+          example: /content_types/1a2b3c4d
+          format: iri-reference
+          readOnly: true
+          type: string
+        contentTypeName:
+          description: 'The name of the content type of this content node. Read-only, for convenience.'
+          example: SafetyConcept
+          readOnly: true
+          type: string
+        data:
+          description: 'Holds the actual data of the content node.'
+          example:
+            text: 'dummy text'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        id:
+          description: 'An internal, unique, randomly generated identifier of this entity.'
+          example: 1a2b3c4d
+          maxLength: 16
+          readOnly: true
+          type: string
+        instanceName:
+          description: |-
+            An optional name for this content node. This is useful when planning e.g. an alternative
+            version of the programme suited for bad weather, in addition to the normal version.
+          example: Schlechtwetterprogramm
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+        parent:
+          description: |-
+            The parent to which this content node belongs. Is null in case this content node is the
+            root of a content node tree. For non-root content nodes, the parent can be changed, as long
+            as the new parent is in the same camp as the old one.
+          example: /content_nodes/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: |-
+            A whole number used for ordering multiple content nodes that are in the same slot of the
+            same parent. The API does not guarantee the uniqueness of parent+slot+position.
+          example: -1
+          type: integer
+        removeChecklistItemIds:
+          example: '["1a2b3c4d"]'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+          writeOnly: true
+        root:
+          description: |-
+            The content node that is the root of the content node tree. Refers to itself in case this
+            content node is the root.
+          example: /content_nodes/1a2b3c4d
+          format: iri-reference
+          readOnly: true
+          type:
+            - 'null'
+            - string
+        slot:
+          description: |-
+            The name of the slot in the parent in which this content node resides. The valid slot names
+            are defined by the content type of the parent.
+          example: '1'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+      required:
+        - checklistItems
+        - children
+        - contentType
+        - position
+      type: object
+    ChecklistNode.jsonhal-read:
+      deprecated: false
+      description: ''
+      properties:
+        _links:
+          properties:
+            self:
+              properties:
+                href:
+                  format: iri-reference
+                  type: string
+              type: object
+          type: object
+        checklist:
+          description: 'The Checklist this Item belongs to.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        checklistItems:
+          description: 'The content types that are most likely to be useful for planning programme of this category.'
+          example: '["/checklist_items/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          type: array
+        children:
+          description: 'All content nodes that are direct children of this content node.'
+          example: '["/content_nodes/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
+        contentType:
+          description: |-
+            Defines the type of this content node. There is a fixed list of types that are implemented
+            in eCamp. Depending on the type, different content data and different slots may be allowed
+            in a content node. The content type may not be changed once the content node is created.
+          example: /content_types/1a2b3c4d
+          format: iri-reference
+          type: string
+        contentTypeName:
+          description: 'The name of the content type of this content node. Read-only, for convenience.'
+          example: SafetyConcept
+          readOnly: true
+          type: string
+        data:
+          description: 'Holds the actual data of the content node.'
+          example:
+            text: 'dummy text'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        id:
+          description: 'An internal, unique, randomly generated identifier of this entity.'
+          example: 1a2b3c4d
+          maxLength: 16
+          readOnly: true
+          type: string
+        instanceName:
+          description: |-
+            An optional name for this content node. This is useful when planning e.g. an alternative
+            version of the programme suited for bad weather, in addition to the normal version.
+          example: Schlechtwetterprogramm
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+        parent:
+          description: |-
+            The parent to which this content node belongs. Is null in case this content node is the
+            root of a content node tree. For non-root content nodes, the parent can be changed, as long
+            as the new parent is in the same camp as the old one.
+          example: /content_nodes/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: |-
+            A whole number used for ordering multiple content nodes that are in the same slot of the
+            same parent. The API does not guarantee the uniqueness of parent+slot+position.
+          example: -1
+          type: integer
+        root:
+          description: |-
+            The content node that is the root of the content node tree. Refers to itself in case this
+            content node is the root.
+          example: /content_nodes/1a2b3c4d
+          format: iri-reference
+          readOnly: true
+          type:
+            - 'null'
+            - string
+        slot:
+          description: |-
+            The name of the slot in the parent in which this content node resides. The valid slot names
+            are defined by the content type of the parent.
+          example: '1'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+      required:
+        - checklistItems
+        - children
+        - contentType
+        - position
+      type: object
+    ChecklistNode.jsonhal-write_create:
+      deprecated: false
+      description: ''
+      properties:
+        _links:
+          properties:
+            self:
+              properties:
+                href:
+                  format: iri-reference
+                  type: string
+              type: object
+          type: object
+        addChecklistItemIds:
+          example: '["1a2b3c4d"]'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        checklist:
+          description: 'The Checklist this Item belongs to.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        checklistItems:
+          description: 'The content types that are most likely to be useful for planning programme of this category.'
+          example: '["/checklist_items/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          type: array
+        contentType:
+          description: |-
+            Defines the type of this content node. There is a fixed list of types that are implemented
+            in eCamp. Depending on the type, different content data and different slots may be allowed
+            in a content node. The content type may not be changed once the content node is created.
+          example: /content_types/1a2b3c4d
+          format: iri-reference
+          type: string
+        data:
+          description: 'Holds the actual data of the content node.'
+          example:
+            text: 'dummy text'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        instanceName:
+          description: |-
+            An optional name for this content node. This is useful when planning e.g. an alternative
+            version of the programme suited for bad weather, in addition to the normal version.
+          example: Schlechtwetterprogramm
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+        parent:
+          description: |-
+            The parent to which this content node belongs. Is null in case this content node is the
+            root of a content node tree. For non-root content nodes, the parent can be changed, as long
+            as the new parent is in the same camp as the old one.
+          example: /content_nodes/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: |-
+            A whole number used for ordering multiple content nodes that are in the same slot of the
+            same parent. The API does not guarantee the uniqueness of parent+slot+position.
+          example: -1
+          type: integer
+        removeChecklistItemIds:
+          example: '["1a2b3c4d"]'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        slot:
+          description: |-
+            The name of the slot in the parent in which this content node resides. The valid slot names
+            are defined by the content type of the parent.
+          example: '1'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+      required:
+        - checklistItems
+        - contentType
+        - parent
+        - position
+      type: object
+    ChecklistNode.jsonld-read:
+      deprecated: false
+      description: ''
+      properties:
+        '@context':
+          oneOf:
+            -
+              additionalProperties: true
+              properties:
+                '@vocab':
+                  type: string
+                hydra:
+                  enum: ['http://www.w3.org/ns/hydra/core#']
+                  type: string
+              required:
+                - '@vocab'
+                - hydra
+              type: object
+            -
+              type: string
+          readOnly: true
+        '@id':
+          readOnly: true
+          type: string
+        '@type':
+          readOnly: true
+          type: string
+        checklist:
+          description: 'The Checklist this Item belongs to.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        checklistItems:
+          description: 'The content types that are most likely to be useful for planning programme of this category.'
+          example: '["/checklist_items/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          type: array
+        children:
+          description: 'All content nodes that are direct children of this content node.'
+          example: '["/content_nodes/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          readOnly: true
+          type: array
+        contentType:
+          description: |-
+            Defines the type of this content node. There is a fixed list of types that are implemented
+            in eCamp. Depending on the type, different content data and different slots may be allowed
+            in a content node. The content type may not be changed once the content node is created.
+          example: /content_types/1a2b3c4d
+          format: iri-reference
+          type: string
+        contentTypeName:
+          description: 'The name of the content type of this content node. Read-only, for convenience.'
+          example: SafetyConcept
+          readOnly: true
+          type: string
+        data:
+          description: 'Holds the actual data of the content node.'
+          example:
+            text: 'dummy text'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        id:
+          description: 'An internal, unique, randomly generated identifier of this entity.'
+          example: 1a2b3c4d
+          maxLength: 16
+          readOnly: true
+          type: string
+        instanceName:
+          description: |-
+            An optional name for this content node. This is useful when planning e.g. an alternative
+            version of the programme suited for bad weather, in addition to the normal version.
+          example: Schlechtwetterprogramm
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+        parent:
+          description: |-
+            The parent to which this content node belongs. Is null in case this content node is the
+            root of a content node tree. For non-root content nodes, the parent can be changed, as long
+            as the new parent is in the same camp as the old one.
+          example: /content_nodes/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: |-
+            A whole number used for ordering multiple content nodes that are in the same slot of the
+            same parent. The API does not guarantee the uniqueness of parent+slot+position.
+          example: -1
+          type: integer
+        root:
+          description: |-
+            The content node that is the root of the content node tree. Refers to itself in case this
+            content node is the root.
+          example: /content_nodes/1a2b3c4d
+          format: iri-reference
+          readOnly: true
+          type:
+            - 'null'
+            - string
+        slot:
+          description: |-
+            The name of the slot in the parent in which this content node resides. The valid slot names
+            are defined by the content type of the parent.
+          example: '1'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+      required:
+        - checklistItems
+        - children
+        - contentType
+        - position
+      type: object
+    ChecklistNode.jsonld-write_create:
+      deprecated: false
+      description: ''
+      properties:
+        addChecklistItemIds:
+          example: '["1a2b3c4d"]'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        checklist:
+          description: 'The Checklist this Item belongs to.'
+          example: /checklists/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        checklistItems:
+          description: 'The content types that are most likely to be useful for planning programme of this category.'
+          example: '["/checklist_items/1a2b3c4d"]'
+          items:
+            example: 'https://example.com/'
+            format: iri-reference
+            type: string
+          type: array
+        contentType:
+          description: |-
+            Defines the type of this content node. There is a fixed list of types that are implemented
+            in eCamp. Depending on the type, different content data and different slots may be allowed
+            in a content node. The content type may not be changed once the content node is created.
+          example: /content_types/1a2b3c4d
+          format: iri-reference
+          type: string
+        data:
+          description: 'Holds the actual data of the content node.'
+          example:
+            text: 'dummy text'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        instanceName:
+          description: |-
+            An optional name for this content node. This is useful when planning e.g. an alternative
+            version of the programme suited for bad weather, in addition to the normal version.
+          example: Schlechtwetterprogramm
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+        parent:
+          description: |-
+            The parent to which this content node belongs. Is null in case this content node is the
+            root of a content node tree. For non-root content nodes, the parent can be changed, as long
+            as the new parent is in the same camp as the old one.
+          example: /content_nodes/1a2b3c4d
+          format: iri-reference
+          type:
+            - 'null'
+            - string
+        position:
+          default: -1
+          description: |-
+            A whole number used for ordering multiple content nodes that are in the same slot of the
+            same parent. The API does not guarantee the uniqueness of parent+slot+position.
+          example: -1
+          type: integer
+        removeChecklistItemIds:
+          example: '["1a2b3c4d"]'
+          items:
+            type: string
+          type:
+            - array
+            - 'null'
+        slot:
+          description: |-
+            The name of the slot in the parent in which this content node resides. The valid slot names
+            are defined by the content type of the parent.
+          example: '1'
+          maxLength: 32
+          type:
+            - 'null'
+            - string
+      required:
+        - checklistItems
+        - contentType
+        - parent
+        - position
+      type: object
     ColumnLayout-read:
       deprecated: false
       description: ''
@@ -24619,6 +25459,295 @@ paths:
       summary: 'Updates the Checklist resource.'
       tags:
         - Checklist
+  /content_node/checklist_nodes:
+    get:
+      deprecated: false
+      description: 'Retrieves the collection of ChecklistNode resources.'
+      operationId: api_content_nodechecklist_nodes_get_collection
+      parameters:
+        -
+          allowEmptyValue: true
+          allowReserved: false
+          deprecated: false
+          description: ''
+          explode: false
+          in: query
+          name: contentType
+          required: false
+          schema:
+            type: string
+          style: form
+        -
+          allowEmptyValue: true
+          allowReserved: false
+          deprecated: false
+          description: ''
+          explode: false
+          in: query
+          name: period
+          required: false
+          schema:
+            type: string
+          style: form
+        -
+          allowEmptyValue: true
+          allowReserved: false
+          deprecated: false
+          description: ''
+          explode: false
+          in: query
+          name: root
+          required: false
+          schema:
+            type: string
+          style: form
+        -
+          allowEmptyValue: true
+          allowReserved: false
+          deprecated: false
+          description: ''
+          explode: true
+          in: query
+          name: 'contentType[]'
+          required: false
+          schema:
+            items:
+              type: string
+            type: array
+          style: form
+        -
+          allowEmptyValue: true
+          allowReserved: false
+          deprecated: false
+          description: ''
+          explode: true
+          in: query
+          name: 'root[]'
+          required: false
+          schema:
+            items:
+              type: string
+            type: array
+          style: form
+      responses:
+        200:
+          content:
+            application/hal+json:
+              schema:
+                properties:
+                  _embedded: { anyOf: [{ properties: { item: { items: { $ref: '#/components/schemas/ChecklistNode.jsonhal-read' }, type: array } }, type: object }, { type: object }] }
+                  _links: { properties: { first: { properties: { href: { format: iri-reference, type: string } }, type: object }, last: { properties: { href: { format: iri-reference, type: string } }, type: object }, next: { properties: { href: { format: iri-reference, type: string } }, type: object }, previous: { properties: { href: { format: iri-reference, type: string } }, type: object }, self: { properties: { href: { format: iri-reference, type: string } }, type: object } }, type: object }
+                  itemsPerPage: { minimum: 0, type: integer }
+                  totalItems: { minimum: 0, type: integer }
+                required:
+                  - _embedded
+                  - _links
+                type: object
+            application/json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/ChecklistNode-read'
+                type: array
+            application/ld+json:
+              schema:
+                properties:
+                  'hydra:member': { items: { $ref: '#/components/schemas/ChecklistNode.jsonld-read' }, type: array }
+                  'hydra:search': { properties: { '@type': { type: string }, 'hydra:mapping': { items: { properties: { '@type': { type: string }, property: { type: ['null', string] }, required: { type: boolean }, variable: { type: string } }, type: object }, type: array }, 'hydra:template': { type: string }, 'hydra:variableRepresentation': { type: string } }, type: object }
+                  'hydra:totalItems': { minimum: 0, type: integer }
+                  'hydra:view': { example: { '@id': string, 'hydra:first': string, 'hydra:last': string, 'hydra:next': string, 'hydra:previous': string, type: string }, properties: { '@id': { format: iri-reference, type: string }, '@type': { type: string }, 'hydra:first': { format: iri-reference, type: string }, 'hydra:last': { format: iri-reference, type: string }, 'hydra:next': { format: iri-reference, type: string }, 'hydra:previous': { format: iri-reference, type: string } }, type: object }
+                required:
+                  - 'hydra:member'
+                type: object
+            application/vnd.api+json:
+              schema:
+                items:
+                  $ref: '#/components/schemas/ChecklistNode.jsonapi'
+                type: array
+            text/html:
+              schema:
+                items:
+                  $ref: '#/components/schemas/ChecklistNode-read'
+                type: array
+          description: 'ChecklistNode collection'
+      summary: 'Retrieves the collection of ChecklistNode resources.'
+      tags:
+        - ChecklistNode
+    parameters: []
+    post:
+      deprecated: false
+      description: 'Creates a ChecklistNode resource.'
+      operationId: api_content_nodechecklist_nodes_post
+      parameters: []
+      requestBody:
+        content:
+          application/hal+json:
+            schema:
+              $ref: '#/components/schemas/ChecklistNode.jsonhal-write_create'
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ChecklistNode-write_create'
+          application/ld+json:
+            schema:
+              $ref: '#/components/schemas/ChecklistNode.jsonld-write_create'
+          application/vnd.api+json:
+            schema:
+              $ref: '#/components/schemas/ChecklistNode.jsonapi'
+          text/html:
+            schema:
+              $ref: '#/components/schemas/ChecklistNode-write_create'
+        description: 'The new ChecklistNode resource'
+        required: true
+      responses:
+        201:
+          content:
+            application/hal+json:
+              schema:
+                $ref: '#/components/schemas/ChecklistNode.jsonhal-read'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ChecklistNode-read'
+            application/ld+json:
+              schema:
+                $ref: '#/components/schemas/ChecklistNode.jsonld-read'
+            application/vnd.api+json:
+              schema:
+                $ref: '#/components/schemas/ChecklistNode.jsonapi'
+            text/html:
+              schema:
+                $ref: '#/components/schemas/ChecklistNode-read'
+          description: 'ChecklistNode resource created'
+          links: []
+        400:
+          description: 'Invalid input'
+        422:
+          description: 'Unprocessable entity'
+      summary: 'Creates a ChecklistNode resource.'
+      tags:
+        - ChecklistNode
+  '/content_node/checklist_nodes/{id}':
+    delete:
+      deprecated: false
+      description: 'Removes the ChecklistNode resource.'
+      operationId: api_content_nodechecklist_nodes_id_delete
+      parameters:
+        -
+          allowEmptyValue: false
+          allowReserved: false
+          deprecated: false
+          description: 'ChecklistNode identifier'
+          explode: false
+          in: path
+          name: id
+          required: true
+          schema:
+            type: string
+          style: simple
+      responses:
+        204:
+          description: 'ChecklistNode resource deleted'
+        404:
+          description: 'Resource not found'
+      summary: 'Removes the ChecklistNode resource.'
+      tags:
+        - ChecklistNode
+    get:
+      deprecated: false
+      description: 'Retrieves a ChecklistNode resource.'
+      operationId: api_content_nodechecklist_nodes_id_get
+      parameters:
+        -
+          allowEmptyValue: false
+          allowReserved: false
+          deprecated: false
+          description: 'ChecklistNode identifier'
+          explode: false
+          in: path
+          name: id
+          required: true
+          schema:
+            type: string
+          style: simple
+      responses:
+        200:
+          content:
+            application/hal+json:
+              schema:
+                $ref: '#/components/schemas/ChecklistNode.jsonhal-read'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ChecklistNode-read'
+            application/ld+json:
+              schema:
+                $ref: '#/components/schemas/ChecklistNode.jsonld-read'
+            application/vnd.api+json:
+              schema:
+                $ref: '#/components/schemas/ChecklistNode.jsonapi'
+            text/html:
+              schema:
+                $ref: '#/components/schemas/ChecklistNode-read'
+          description: 'ChecklistNode resource'
+        404:
+          description: 'Resource not found'
+      summary: 'Retrieves a ChecklistNode resource.'
+      tags:
+        - ChecklistNode
+    parameters: []
+    patch:
+      deprecated: false
+      description: 'Updates the ChecklistNode resource.'
+      operationId: api_content_nodechecklist_nodes_id_patch
+      parameters:
+        -
+          allowEmptyValue: false
+          allowReserved: false
+          deprecated: false
+          description: 'ChecklistNode identifier'
+          explode: false
+          in: path
+          name: id
+          required: true
+          schema:
+            type: string
+          style: simple
+      requestBody:
+        content:
+          application/merge-patch+json:
+            schema:
+              $ref: '#/components/schemas/ChecklistNode-write_update'
+          application/vnd.api+json:
+            schema:
+              $ref: '#/components/schemas/ChecklistNode.jsonapi'
+        description: 'The updated ChecklistNode resource'
+        required: true
+      responses:
+        200:
+          content:
+            application/hal+json:
+              schema:
+                $ref: '#/components/schemas/ChecklistNode.jsonhal-read'
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ChecklistNode-read'
+            application/ld+json:
+              schema:
+                $ref: '#/components/schemas/ChecklistNode.jsonld-read'
+            application/vnd.api+json:
+              schema:
+                $ref: '#/components/schemas/ChecklistNode.jsonapi'
+            text/html:
+              schema:
+                $ref: '#/components/schemas/ChecklistNode-read'
+          description: 'ChecklistNode resource updated'
+          links: []
+        400:
+          description: 'Invalid input'
+        404:
+          description: 'Resource not found'
+        422:
+          description: 'Unprocessable entity'
+      summary: 'Updates the ChecklistNode resource.'
+      tags:
+        - ChecklistNode
   /content_node/column_layouts:
     get:
       deprecated: false
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json
index 08bdba78ce..040d83054a 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testRootEndpointMatchesSnapshot__1.json
@@ -28,6 +28,10 @@
             "href": "\/checklist_items{\/id}{?checklist,checklist[]}",
             "templated": true
         },
+        "checklistNodes": {
+            "href": "\/content_node\/checklist_nodes{\/id}{?contentType,contentType[],root,root[],period}",
+            "templated": true
+        },
         "checklists": {
             "href": "\/checklists{\/id}{?camp,camp[]}",
             "templated": true
diff --git a/e2e/specs/httpCache.cy.js b/e2e/specs/httpCache.cy.js
index 4b0fc346be..14a5412ee5 100644
--- a/e2e/specs/httpCache.cy.js
+++ b/e2e/specs/httpCache.cy.js
@@ -9,7 +9,7 @@ describe('HTTP cache tests', () => {
     cy.request(Cypress.env('API_ROOT_URL_CACHED') + uri + '.jsonhal').then((response) => {
       const headers = response.headers
       expect(headers.xkey).to.eq(
-        'c462edd869f3 5e2028c55ee4 a4211c112939 f17470519474 1a0f84e322c8 3ef17bd1df72 4f0c657fecef 44dcc7493c65 cfccaecd4bad 318e064ea0c9 /api/content_types'
+        'a4211c11211c c462edd869f3 5e2028c55ee4 a4211c112939 f17470519474 1a0f84e322c8 3ef17bd1df72 4f0c657fecef 44dcc7493c65 cfccaecd4bad 318e064ea0c9 /api/content_types'
       )
       expect(headers['x-cache']).to.eq('MISS')
       cy.readFile('./specs/responses/content_types_collection.json').then((data) =>
diff --git a/e2e/specs/responses/content_types_collection.json b/e2e/specs/responses/content_types_collection.json
index a268c3ee12..1b977c9a1e 100644
--- a/e2e/specs/responses/content_types_collection.json
+++ b/e2e/specs/responses/content_types_collection.json
@@ -4,6 +4,9 @@
       "href": "/api/content_types.jsonhal"
     },
     "items": [
+      {
+        "href": "/api/content_types/a4211c11211c"
+      },
       {
         "href": "/api/content_types/c462edd869f3"
       },
@@ -36,9 +39,22 @@
       }
     ]
   },
-  "totalItems": 10,
+  "totalItems": 11,
   "_embedded": {
     "items": [
+      {
+        "_links": {
+          "self": {
+            "href": "/api/content_types/a4211c11211c"
+          },
+          "contentNodes": {
+            "href": "/api/content_node/checklist_nodes?contentType=%2Fapi%2Fcontent_types%2Fa4211c11211c"
+          }
+        },
+        "name": "Checklist",
+        "active": true,
+        "id": "a4211c11211c"
+      },
       {
         "_links": {
           "self": {

From bb217072bbb1651876a093617f232b1139f71457 Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Tue, 18 Jun 2024 20:58:35 +0200
Subject: [PATCH 160/273] Add UnitTests fot checklistNode

---
 api/fixtures/checklistNodes.yml               |  7 ++
 api/tests/Api/Activities/ReadActivityTest.php |  2 +-
 .../ChecklistNode/CreateChecklistNodeTest.php | 35 +++++++
 .../ChecklistNode/DeleteChecklistNodeTest.php | 17 ++++
 .../ChecklistNode/ListChecklistNodeTest.php   | 25 +++++
 .../ChecklistNode/ReadChecklistNodeTest.php   | 17 ++++
 .../ChecklistNode/UpdateChecklistNodeTest.php | 17 ++++
 .../ContentNode/ListContentNodesTest.php      |  6 +-
 .../CreateContentNodeTestCase.php             |  3 +-
 .../CreateRootColumnLayoutTest.php            |  2 +-
 .../SnapshotTests/EndpointPerformanceTest.php |  2 +-
 ...Structure with data set activities__1.json |  3 +
 ...ta set content_nodechecklist_nodes__1.json | 28 +++++-
 ...ata set content_nodecolumn_layouts__1.json |  3 +
 ...ucture with data set content_nodes__1.json | 31 ++++++-
 ...Structure with data set activities__1.json | 30 ++++++
 ...ta set content_nodechecklist_nodes__1.json |  1 -
 ...est__testOpenApiSpecMatchesSnapshot__1.yml | 93 +------------------
 ...manceDidNotChangeForStableEndpoints__1.yml |  2 +-
 19 files changed, 221 insertions(+), 103 deletions(-)
 create mode 100644 api/tests/Api/ContentNodes/ChecklistNode/CreateChecklistNodeTest.php
 create mode 100644 api/tests/Api/ContentNodes/ChecklistNode/DeleteChecklistNodeTest.php
 create mode 100644 api/tests/Api/ContentNodes/ChecklistNode/ListChecklistNodeTest.php
 create mode 100644 api/tests/Api/ContentNodes/ChecklistNode/ReadChecklistNodeTest.php
 create mode 100644 api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php

diff --git a/api/fixtures/checklistNodes.yml b/api/fixtures/checklistNodes.yml
index 9351448280..eb7ffe74cc 100644
--- a/api/fixtures/checklistNodes.yml
+++ b/api/fixtures/checklistNodes.yml
@@ -1,4 +1,11 @@
 App\Entity\ContentNode\ChecklistNode:
+  checklistNode1:
+    root: '@columnLayout1'
+    parent: '@columnLayout1'
+    slot: '1'
+    position: 1
+    instanceName: <word()>
+    contentType: '@contentTypeChecklist'
   checklistNode3:
     root: '@columnLayout3'
     parent: '@columnLayout3'
diff --git a/api/tests/Api/Activities/ReadActivityTest.php b/api/tests/Api/Activities/ReadActivityTest.php
index 2bccea6aa6..61c7394e24 100644
--- a/api/tests/Api/Activities/ReadActivityTest.php
+++ b/api/tests/Api/Activities/ReadActivityTest.php
@@ -93,7 +93,7 @@ public function testGetSingleActivityIsAllowedForMember() {
         $this->assertEquals($this->getIriFor($activity->getRootContentNode()), $data['_embedded']['rootContentNode']['_links']['self']['href']);
         $this->assertEquals($this->getIriFor($activity->getRootContentNode()), $data['_embedded']['rootContentNode']['_links']['root']['href']);
         $this->assertContains(['href' => $this->getIriFor('responsiveLayout1')], $data['_embedded']['rootContentNode']['_links']['children']);
-        $this->assertEquals(11, count($data['_embedded']['contentNodes']));
+        $this->assertEquals(12, count($data['_embedded']['contentNodes']));
     }
 
     public function testGetSingleActivityIsAllowedForManager() {
diff --git a/api/tests/Api/ContentNodes/ChecklistNode/CreateChecklistNodeTest.php b/api/tests/Api/ContentNodes/ChecklistNode/CreateChecklistNodeTest.php
new file mode 100644
index 0000000000..703e19bbe8
--- /dev/null
+++ b/api/tests/Api/ContentNodes/ChecklistNode/CreateChecklistNodeTest.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Tests\Api\ContentNodes\ChecklistNode;
+
+use App\Entity\ContentNode\ChecklistNode;
+use App\Tests\Api\ContentNodes\CreateContentNodeTestCase;
+
+/**
+ * @internal
+ */
+class CreateChecklistNodeTest extends CreateContentNodeTestCase {
+    public function setUp(): void {
+        parent::setUp();
+
+        $this->endpoint = '/content_node/checklist_nodes';
+        $this->entityClass = ChecklistNode::class;
+        $this->defaultContentType = static::getFixture('contentTypeChecklist');
+    }
+
+    /**
+     * payload set up.
+     */
+    public function getExampleWritePayload($attributes = [], $except = []) {
+        return parent::getExampleWritePayload(
+            array_merge(
+                [
+                    'addChecklistItemIds' => null,
+                    'removeChecklistItemIds' => null,
+                ],
+                $attributes
+            ),
+            $except
+        );
+    }
+}
diff --git a/api/tests/Api/ContentNodes/ChecklistNode/DeleteChecklistNodeTest.php b/api/tests/Api/ContentNodes/ChecklistNode/DeleteChecklistNodeTest.php
new file mode 100644
index 0000000000..963a52a82b
--- /dev/null
+++ b/api/tests/Api/ContentNodes/ChecklistNode/DeleteChecklistNodeTest.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Tests\Api\ContentNodes\ChecklistNode;
+
+use App\Tests\Api\ContentNodes\DeleteContentNodeTestCase;
+
+/**
+ * @internal
+ */
+class DeleteChecklistNodeTest extends DeleteContentNodeTestCase {
+    public function setUp(): void {
+        parent::setUp();
+
+        $this->endpoint = '/content_node/checklist_nodes';
+        $this->defaultEntity = static::getFixture('checklistNode3');
+    }
+}
diff --git a/api/tests/Api/ContentNodes/ChecklistNode/ListChecklistNodeTest.php b/api/tests/Api/ContentNodes/ChecklistNode/ListChecklistNodeTest.php
new file mode 100644
index 0000000000..723700944e
--- /dev/null
+++ b/api/tests/Api/ContentNodes/ChecklistNode/ListChecklistNodeTest.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace App\Tests\Api\ContentNodes\ChecklistNode;
+
+use App\Tests\Api\ContentNodes\ListContentNodeTestCase;
+
+/**
+ * @internal
+ */
+class ListChecklistNodeTest extends ListContentNodeTestCase {
+    public function setUp(): void {
+        parent::setUp();
+
+        $this->endpoint = '/content_node/checklist_nodes';
+
+        $this->contentNodesCamp1and2 = [
+            $this->getIriFor('checklistNode1'),
+            $this->getIriFor('checklistNode3'),
+        ];
+
+        $this->contentNodesCampUnrelated = [
+            $this->getIriFor('checklistNodeCampUnrelated'),
+        ];
+    }
+}
diff --git a/api/tests/Api/ContentNodes/ChecklistNode/ReadChecklistNodeTest.php b/api/tests/Api/ContentNodes/ChecklistNode/ReadChecklistNodeTest.php
new file mode 100644
index 0000000000..f68349061a
--- /dev/null
+++ b/api/tests/Api/ContentNodes/ChecklistNode/ReadChecklistNodeTest.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Tests\Api\ContentNodes\ChecklistNode;
+
+use App\Tests\Api\ContentNodes\ReadContentNodeTestCase;
+
+/**
+ * @internal
+ */
+class ReadChecklistNodeTest extends ReadContentNodeTestCase {
+    public function setUp(): void {
+        parent::setUp();
+
+        $this->endpoint = '/content_node/checklist_nodes';
+        $this->defaultEntity = static::getFixture('checklistNode3');
+    }
+}
diff --git a/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php b/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php
new file mode 100644
index 0000000000..182a81d0d5
--- /dev/null
+++ b/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace App\Tests\Api\ContentNodes\ChecklistNode;
+
+use App\Tests\Api\ContentNodes\UpdateContentNodeTestCase;
+
+/**
+ * @internal
+ */
+class UpdateChecklistNodeTest extends UpdateContentNodeTestCase {
+    public function setUp(): void {
+        parent::setUp();
+
+        $this->endpoint = '/content_node/checklist_nodes';
+        $this->defaultEntity = static::getFixture('checklistNode1');
+    }
+}
diff --git a/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php b/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php
index 692bfe1251..d8e8269a54 100644
--- a/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php
+++ b/api/tests/Api/ContentNodes/ContentNode/ListContentNodesTest.php
@@ -23,7 +23,7 @@ public function testListContentNodesIsAllowedForLoggedInUserButFiltered() {
         $response = static::createClientWithCredentials()->request('GET', '/content_nodes');
         $this->assertResponseStatusCodeSame(200);
         $this->assertJsonContains([
-            'totalItems' => 22,
+            'totalItems' => 23,
             '_links' => [
                 'items' => [],
             ],
@@ -33,6 +33,7 @@ public function testListContentNodesIsAllowedForLoggedInUserButFiltered() {
         ]);
         $this->assertEqualsCanonicalizing([
             ['href' => $this->getIriFor('columnLayout1')],
+            ['href' => $this->getIriFor('checklistNode1')],
             ['href' => $this->getIriFor('columnLayout2')],
             ['href' => $this->getIriFor('columnLayoutChild1')],
             ['href' => $this->getIriFor('columnLayout2Child1')],
@@ -62,7 +63,7 @@ public function testListContentNodesFilteredByPeriodIsAllowedForCollaborator() {
         $response = static::createClientWithCredentials()->request('GET', '/content_nodes?period=%2Fperiods%2F'.$period->getId());
         $this->assertResponseStatusCodeSame(200);
         $this->assertJsonContains([
-            'totalItems' => 13,
+            'totalItems' => 14,
             '_links' => [
                 'items' => [],
             ],
@@ -72,6 +73,7 @@ public function testListContentNodesFilteredByPeriodIsAllowedForCollaborator() {
         ]);
         $this->assertEqualsCanonicalizing([
             ['href' => $this->getIriFor('columnLayout1')],
+            ['href' => $this->getIriFor('checklistNode1')],
             ['href' => $this->getIriFor('columnLayoutChild1')],
             ['href' => $this->getIriFor('columnLayout3')],
             ['href' => $this->getIriFor('checklistNode3')],
diff --git a/api/tests/Api/ContentNodes/CreateContentNodeTestCase.php b/api/tests/Api/ContentNodes/CreateContentNodeTestCase.php
index 8de5165c23..932b57ed73 100644
--- a/api/tests/Api/ContentNodes/CreateContentNodeTestCase.php
+++ b/api/tests/Api/ContentNodes/CreateContentNodeTestCase.php
@@ -179,11 +179,10 @@ public function testCreatePutsContentNodeAtEndOfSlot() {
             ],
             ['position']
         ));
-
         $this->assertResponseStatusCodeSame(201);
         $this->assertJsonContains([
             'slot' => '1',
-            'position' => 1,
+            'position' => 2,
         ]);
     }
 
diff --git a/api/tests/Api/ContentNodes/RootColumnLayout/CreateRootColumnLayoutTest.php b/api/tests/Api/ContentNodes/RootColumnLayout/CreateRootColumnLayoutTest.php
index eefa5b64dc..8baf213391 100644
--- a/api/tests/Api/ContentNodes/RootColumnLayout/CreateRootColumnLayoutTest.php
+++ b/api/tests/Api/ContentNodes/RootColumnLayout/CreateRootColumnLayoutTest.php
@@ -46,7 +46,7 @@ public function testCreateColumnLayoutAllowsMissingPosition() {
         static::createClientWithCredentials()->request('POST', $this->endpoint, ['json' => $this->getExampleWritePayload([], ['position'])]);
 
         $this->assertResponseStatusCodeSame(201);
-        $this->assertJsonContains(['position' => 1]);
+        $this->assertJsonContains(['position' => 2]);
     }
 
     public function testCreateColumnLayoutAllowsMissingInstanceName() {
diff --git a/api/tests/Api/SnapshotTests/EndpointPerformanceTest.php b/api/tests/Api/SnapshotTests/EndpointPerformanceTest.php
index 1463bb5cd4..46e474c2d9 100644
--- a/api/tests/Api/SnapshotTests/EndpointPerformanceTest.php
+++ b/api/tests/Api/SnapshotTests/EndpointPerformanceTest.php
@@ -186,7 +186,7 @@ protected function getSnapshotId(): string {
 
     private static function getContentNodeEndpointQueryCountRanges(): array {
         return [
-            '/content_nodes' => [8, 10],
+            '/content_nodes' => [8, 11],
             '/content_node/column_layouts' => [6, 6],
             '/content_node/column_layouts/item' => [10, 10],
             '/content_node/checklist_nodes' => [6, 7],
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set activities__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set activities__1.json
index 17f0da395c..47bf622d83 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set activities__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set activities__1.json	
@@ -240,6 +240,9 @@
                     "rootContentNode": {
                         "_links": {
                             "children": [
+                                {
+                                    "href": "escaped_value"
+                                },
                                 {
                                     "href": "escaped_value"
                                 }
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodechecklist_nodes__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodechecklist_nodes__1.json
index a657327a12..d92c7c8ab7 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodechecklist_nodes__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodechecklist_nodes__1.json	
@@ -3,7 +3,30 @@
         "items": [
             {
                 "_links": {
-                    "checklist": "escaped_value",
+                    "checklistItems": [],
+                    "children": [],
+                    "contentType": {
+                        "href": "escaped_value"
+                    },
+                    "parent": {
+                        "href": "escaped_value"
+                    },
+                    "root": {
+                        "href": "escaped_value"
+                    },
+                    "self": {
+                        "href": "escaped_value"
+                    }
+                },
+                "contentTypeName": "escaped_value",
+                "data": "escaped_value",
+                "id": "escaped_value",
+                "instanceName": "escaped_value",
+                "position": "escaped_value",
+                "slot": "escaped_value"
+            },
+            {
+                "_links": {
                     "checklistItems": [],
                     "children": [],
                     "contentType": {
@@ -30,6 +53,9 @@
     },
     "_links": {
         "items": [
+            {
+                "href": "escaped_value"
+            },
             {
                 "href": "escaped_value"
             }
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodecolumn_layouts__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodecolumn_layouts__1.json
index 2c6362ca64..9e9859e619 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodecolumn_layouts__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodecolumn_layouts__1.json	
@@ -218,6 +218,9 @@
             {
                 "_links": {
                     "children": [
+                        {
+                            "href": "escaped_value"
+                        },
                         {
                             "href": "escaped_value"
                         }
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json
index 540f43263f..87fb09384c 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json	
@@ -80,7 +80,30 @@
             },
             {
                 "_links": {
-                    "checklist": "escaped_value",
+                    "checklistItems": [],
+                    "children": [],
+                    "contentType": {
+                        "href": "escaped_value"
+                    },
+                    "parent": {
+                        "href": "escaped_value"
+                    },
+                    "root": {
+                        "href": "escaped_value"
+                    },
+                    "self": {
+                        "href": "escaped_value"
+                    }
+                },
+                "contentTypeName": "escaped_value",
+                "data": "escaped_value",
+                "id": "escaped_value",
+                "instanceName": "escaped_value",
+                "position": "escaped_value",
+                "slot": "escaped_value"
+            },
+            {
+                "_links": {
                     "checklistItems": [],
                     "children": [],
                     "contentType": {
@@ -580,6 +603,9 @@
             {
                 "_links": {
                     "children": [
+                        {
+                            "href": "escaped_value"
+                        },
                         {
                             "href": "escaped_value"
                         }
@@ -772,6 +798,9 @@
             {
                 "href": "escaped_value"
             },
+            {
+                "href": "escaped_value"
+            },
             {
                 "href": "escaped_value"
             }
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set activities__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set activities__1.json
index 9b8c7684dd..81d49812a7 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set activities__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set activities__1.json	
@@ -123,6 +123,30 @@
                 "position": "escaped_value",
                 "slot": "escaped_value"
             },
+            {
+                "_links": {
+                    "checklistItems": [],
+                    "children": [],
+                    "contentType": {
+                        "href": "escaped_value"
+                    },
+                    "parent": {
+                        "href": "escaped_value"
+                    },
+                    "root": {
+                        "href": "escaped_value"
+                    },
+                    "self": {
+                        "href": "escaped_value"
+                    }
+                },
+                "contentTypeName": "escaped_value",
+                "data": "escaped_value",
+                "id": "escaped_value",
+                "instanceName": "escaped_value",
+                "position": "escaped_value",
+                "slot": "escaped_value"
+            },
             {
                 "_links": {
                     "children": [],
@@ -430,6 +454,9 @@
             {
                 "_links": {
                     "children": [
+                        {
+                            "href": "escaped_value"
+                        },
                         {
                             "href": "escaped_value"
                         }
@@ -464,6 +491,9 @@
         "rootContentNode": {
             "_links": {
                 "children": [
+                    {
+                        "href": "escaped_value"
+                    },
                     {
                         "href": "escaped_value"
                     }
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set content_nodechecklist_nodes__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set content_nodechecklist_nodes__1.json
index f883ff8e4f..9b0796fa6f 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set content_nodechecklist_nodes__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set content_nodechecklist_nodes__1.json	
@@ -1,6 +1,5 @@
 {
     "_links": {
-        "checklist": "escaped_value",
         "checklistItems": [],
         "children": [],
         "contentType": {
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
index 7e3c14de5f..aa39594dcd 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
@@ -8315,13 +8315,6 @@ components:
       deprecated: false
       description: ''
       properties:
-        checklist:
-          description: 'The Checklist this Item belongs to.'
-          example: /checklists/1a2b3c4d
-          format: iri-reference
-          type:
-            - 'null'
-            - string
         checklistItems:
           description: 'The content types that are most likely to be useful for planning programme of this category.'
           example: '["/checklist_items/1a2b3c4d"]'
@@ -8429,21 +8422,6 @@ components:
           type:
             - array
             - 'null'
-        checklist:
-          description: 'The Checklist this Item belongs to.'
-          example: /checklists/1a2b3c4d
-          format: iri-reference
-          type:
-            - 'null'
-            - string
-        checklistItems:
-          description: 'The content types that are most likely to be useful for planning programme of this category.'
-          example: '["/checklist_items/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
-          type: array
         contentType:
           description: |-
             Defines the type of this content node. There is a fixed list of types that are implemented
@@ -8504,7 +8482,6 @@ components:
             - 'null'
             - string
       required:
-        - checklistItems
         - contentType
         - parent
         - position
@@ -8520,21 +8497,6 @@ components:
           type:
             - array
             - 'null'
-        checklist:
-          description: 'The Checklist this Item belongs to.'
-          example: /checklists/1a2b3c4d
-          format: iri-reference
-          type:
-            - 'null'
-            - string
-        checklistItems:
-          description: 'The content types that are most likely to be useful for planning programme of this category.'
-          example: '["/checklist_items/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
-          type: array
         data:
           description: 'Holds the actual data of the content node.'
           example:
@@ -8587,7 +8549,6 @@ components:
             - 'null'
             - string
       required:
-        - checklistItems
         - position
       type: object
     ChecklistNode.jsonapi:
@@ -8602,13 +8563,6 @@ components:
             - array
             - 'null'
           writeOnly: true
-        checklist:
-          description: 'The Checklist this Item belongs to.'
-          example: /checklists/1a2b3c4d
-          format: iri-reference
-          type:
-            - 'null'
-            - string
         checklistItems:
           description: 'The content types that are most likely to be useful for planning programme of this category.'
           example: '["/checklist_items/1a2b3c4d"]'
@@ -8616,6 +8570,7 @@ components:
             example: 'https://example.com/'
             format: iri-reference
             type: string
+          readOnly: true
           type: array
         children:
           description: 'All content nodes that are direct children of this content node.'
@@ -8727,13 +8682,6 @@ components:
                   type: string
               type: object
           type: object
-        checklist:
-          description: 'The Checklist this Item belongs to.'
-          example: /checklists/1a2b3c4d
-          format: iri-reference
-          type:
-            - 'null'
-            - string
         checklistItems:
           description: 'The content types that are most likely to be useful for planning programme of this category.'
           example: '["/checklist_items/1a2b3c4d"]'
@@ -8850,21 +8798,6 @@ components:
           type:
             - array
             - 'null'
-        checklist:
-          description: 'The Checklist this Item belongs to.'
-          example: /checklists/1a2b3c4d
-          format: iri-reference
-          type:
-            - 'null'
-            - string
-        checklistItems:
-          description: 'The content types that are most likely to be useful for planning programme of this category.'
-          example: '["/checklist_items/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
-          type: array
         contentType:
           description: |-
             Defines the type of this content node. There is a fixed list of types that are implemented
@@ -8925,7 +8858,6 @@ components:
             - 'null'
             - string
       required:
-        - checklistItems
         - contentType
         - parent
         - position
@@ -8957,13 +8889,6 @@ components:
         '@type':
           readOnly: true
           type: string
-        checklist:
-          description: 'The Checklist this Item belongs to.'
-          example: /checklists/1a2b3c4d
-          format: iri-reference
-          type:
-            - 'null'
-            - string
         checklistItems:
           description: 'The content types that are most likely to be useful for planning programme of this category.'
           example: '["/checklist_items/1a2b3c4d"]'
@@ -9071,21 +8996,6 @@ components:
           type:
             - array
             - 'null'
-        checklist:
-          description: 'The Checklist this Item belongs to.'
-          example: /checklists/1a2b3c4d
-          format: iri-reference
-          type:
-            - 'null'
-            - string
-        checklistItems:
-          description: 'The content types that are most likely to be useful for planning programme of this category.'
-          example: '["/checklist_items/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
-          type: array
         contentType:
           description: |-
             Defines the type of this content node. There is a fixed list of types that are implemented
@@ -9146,7 +9056,6 @@ components:
             - 'null'
             - string
       required:
-        - checklistItems
         - contentType
         - parent
         - position
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
index cffd038675..85260de4e7 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
@@ -1,5 +1,5 @@
 /activities: 21
-/activities/item: 33
+/activities/item: 36
 /activity_progress_labels: 6
 /activity_progress_labels/item: 7
 /activity_responsibles: 6

From f58d8060ae5f1eb7e44d3797863af39a6d63f154 Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Fri, 21 Jun 2024 22:09:27 +0200
Subject: [PATCH 161/273] UnitTest: ChecklistNode add/remove ChecklistItem

---
 api/fixtures/checklistNodes.yml               |  2 +
 ...16104153.php => Version20240620104153.php} |  2 +-
 ...16143000.php => Version20240620143000.php} |  2 +-
 .../schema/Version20240621195713.php          | 34 +++++++
 api/src/Entity/ContentNode/ChecklistNode.php  |  4 +-
 .../ChecklistNode/UpdateChecklistNodeTest.php | 89 +++++++++++++++++++
 ...ta set content_nodechecklist_nodes__1.json |  6 +-
 ...ucture with data set content_nodes__1.json |  6 +-
 ...Structure with data set activities__1.json |  6 +-
 9 files changed, 144 insertions(+), 7 deletions(-)
 rename api/migrations/schema/{Version20240616104153.php => Version20240620104153.php} (96%)
 rename api/migrations/schema/{Version20240616143000.php => Version20240620143000.php} (93%)
 create mode 100644 api/migrations/schema/Version20240621195713.php

diff --git a/api/fixtures/checklistNodes.yml b/api/fixtures/checklistNodes.yml
index eb7ffe74cc..a6af5b9eeb 100644
--- a/api/fixtures/checklistNodes.yml
+++ b/api/fixtures/checklistNodes.yml
@@ -6,6 +6,8 @@ App\Entity\ContentNode\ChecklistNode:
     position: 1
     instanceName: <word()>
     contentType: '@contentTypeChecklist'
+    checklistItems:
+    - '@checklistItem1_1_1'
   checklistNode3:
     root: '@columnLayout3'
     parent: '@columnLayout3'
diff --git a/api/migrations/schema/Version20240616104153.php b/api/migrations/schema/Version20240620104153.php
similarity index 96%
rename from api/migrations/schema/Version20240616104153.php
rename to api/migrations/schema/Version20240620104153.php
index 340d9d16fd..7e0da4b8a2 100644
--- a/api/migrations/schema/Version20240616104153.php
+++ b/api/migrations/schema/Version20240620104153.php
@@ -10,7 +10,7 @@
 /**
  * Auto-generated Migration: Please modify to your needs!
  */
-final class Version20240616104153 extends AbstractMigration {
+final class Version20240620104153 extends AbstractMigration {
     public function getDescription(): string {
         return '';
     }
diff --git a/api/migrations/schema/Version20240616143000.php b/api/migrations/schema/Version20240620143000.php
similarity index 93%
rename from api/migrations/schema/Version20240616143000.php
rename to api/migrations/schema/Version20240620143000.php
index f18be0dcb8..d6c0c34edf 100644
--- a/api/migrations/schema/Version20240616143000.php
+++ b/api/migrations/schema/Version20240620143000.php
@@ -7,7 +7,7 @@
 use Doctrine\DBAL\Schema\Schema;
 use Doctrine\Migrations\AbstractMigration;
 
-final class Version20240616143000 extends AbstractMigration {
+final class Version20240620143000 extends AbstractMigration {
     public function getDescription(): string {
         return 'Add ChecklistNode content type';
     }
diff --git a/api/migrations/schema/Version20240621195713.php b/api/migrations/schema/Version20240621195713.php
new file mode 100644
index 0000000000..3dce8330ff
--- /dev/null
+++ b/api/migrations/schema/Version20240621195713.php
@@ -0,0 +1,34 @@
+<?php
+
+declare(strict_types=1);
+
+namespace DoctrineMigrations;
+
+use Doctrine\DBAL\Schema\Schema;
+use Doctrine\Migrations\AbstractMigration;
+
+/**
+ * Auto-generated Migration: Please modify to your needs!
+ */
+final class Version20240621195713 extends AbstractMigration {
+    public function getDescription(): string {
+        return '';
+    }
+
+    public function up(Schema $schema): void {
+        // this up() migration is auto-generated, please modify it to your needs
+        $this->addSql('ALTER TABLE checklistnode_checklistitem DROP CONSTRAINT FK_5A2B5B31DE6B6F00');
+        $this->addSql('ALTER TABLE checklistnode_checklistitem DROP CONSTRAINT FK_5A2B5B318A09A289');
+        $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT FK_5A2B5B31DE6B6F00 FOREIGN KEY (checklistnode_id) REFERENCES content_node (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE');
+        $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT FK_5A2B5B318A09A289 FOREIGN KEY (checklistitem_id) REFERENCES checklist_item (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE');
+    }
+
+    public function down(Schema $schema): void {
+        // this down() migration is auto-generated, please modify it to your needs
+        $this->addSql('CREATE SCHEMA public');
+        $this->addSql('ALTER TABLE checklistnode_checklistitem DROP CONSTRAINT fk_5a2b5b31de6b6f00');
+        $this->addSql('ALTER TABLE checklistnode_checklistitem DROP CONSTRAINT fk_5a2b5b318a09a289');
+        $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT fk_5a2b5b31de6b6f00 FOREIGN KEY (checklistnode_id) REFERENCES content_node (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
+        $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT fk_5a2b5b318a09a289 FOREIGN KEY (checklistitem_id) REFERENCES checklist_item (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
+    }
+}
diff --git a/api/src/Entity/ContentNode/ChecklistNode.php b/api/src/Entity/ContentNode/ChecklistNode.php
index 237296a7b9..36713bfb93 100644
--- a/api/src/Entity/ContentNode/ChecklistNode.php
+++ b/api/src/Entity/ContentNode/ChecklistNode.php
@@ -57,8 +57,8 @@ class ChecklistNode extends ContentNode {
     #[Groups(['read'])]
     #[ORM\ManyToMany(targetEntity: ChecklistItem::class, inversedBy: 'checklistNodes')]
     #[ORM\JoinTable(name: 'checklistnode_checklistitem')]
-    #[ORM\JoinColumn(name: 'checklistnode_id', referencedColumnName: 'id')]
-    #[ORM\InverseJoinColumn(name: 'checklistitem_id', referencedColumnName: 'id')]
+    #[ORM\JoinColumn(name: 'checklistnode_id', referencedColumnName: 'id', onDelete: 'CASCADE')]
+    #[ORM\InverseJoinColumn(name: 'checklistitem_id', referencedColumnName: 'id', onDelete: 'CASCADE')]
     #[ORM\OrderBy(['position' => 'ASC'])]
     public Collection $checklistItems;
 
diff --git a/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php b/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php
index 182a81d0d5..b6c5661558 100644
--- a/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php
+++ b/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php
@@ -2,6 +2,7 @@
 
 namespace App\Tests\Api\ContentNodes\ChecklistNode;
 
+use App\Entity\ContentNode\ChecklistNode;
 use App\Tests\Api\ContentNodes\UpdateContentNodeTestCase;
 
 /**
@@ -14,4 +15,92 @@ public function setUp(): void {
         $this->endpoint = '/content_node/checklist_nodes';
         $this->defaultEntity = static::getFixture('checklistNode1');
     }
+
+    public function testAddChecklistItemIsDeniedForGuest() {
+        $checklistItemId = static::getFixture('checklistItem1_1_2')->getId();
+        static::createClientWithCredentials(['email' => static::getFixture('user3guest')->getEmail()])
+            ->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [
+                'addChecklistItemIds' => [$checklistItemId],
+            ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
+        ;
+        $this->assertResponseStatusCodeSame(403);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Access Denied.',
+        ]);
+    }
+
+    public function testAddChecklistItemIsDeniedForMember() {
+        $checklistItemId = static::getFixture('checklistItem1_1_2')->getId();
+        static::createClientWithCredentials(['email' => static::getFixture('user2member')->getEmail()])
+            ->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [
+                'addChecklistItemIds' => [$checklistItemId],
+            ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
+        ;
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            '_links' => [
+                'checklistItems' => [
+                    1 => [
+                        'href' => '/checklist_items/'.$checklistItemId,
+                    ],
+                ],
+            ],
+        ]);
+    }
+
+    public function testAddChecklistItemIsDeniedForManager() {
+        $checklistItemId = static::getFixture('checklistItem1_1_2')->getId();
+        static::createClientWithCredentials()->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [
+            'addChecklistItemIds' => [$checklistItemId],
+        ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
+
+        $this->assertResponseStatusCodeSame(200);
+        $this->assertJsonContains([
+            '_links' => [
+                'checklistItems' => [
+                    1 => [
+                        'href' => '/checklist_items/'.$checklistItemId,
+                    ],
+                ],
+            ],
+        ]);
+    }
+
+    public function testRemoveChecklistItemIsDeniedForGuest() {
+        $checklistItemId = static::getFixture('checklistItem1_1_1')->getId();
+        static::createClientWithCredentials(['email' => static::getFixture('user3guest')->getEmail()])
+            ->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [
+                'removeChecklistItemIds' => [$checklistItemId],
+            ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
+        ;
+        $this->assertResponseStatusCodeSame(403);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'Access Denied.',
+        ]);
+    }
+
+    public function testRemoveChecklistItemIsDeniedForMember() {
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createClientWithCredentials(['email' => static::getFixture('user2member')->getEmail()])
+            ->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [
+                'removeChecklistItemIds' => [$checklistItem->getId()],
+            ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
+        ;
+        $this->assertResponseStatusCodeSame(200);
+        $checklistNode = $this->getEntityManager()->getRepository(ChecklistNode::class)->find($this->defaultEntity->getId());
+        $this->assertFalse(in_array($checklistItem, $checklistNode->getChecklistItems()));
+    }
+
+    public function testRemoveChecklistItemIsDeniedForManager() {
+        $checklistItem = static::getFixture('checklistItem1_1_1');
+        static::createClientWithCredentials()->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [
+            'removeChecklistItemIds' => [$checklistItem->getId()],
+        ], 'headers' => ['Content-Type' => 'application/merge-patch+json']]);
+
+        $this->assertResponseStatusCodeSame(200);
+        $checklistNode = $this->getEntityManager()->getRepository(ChecklistNode::class)->find($this->defaultEntity->getId());
+        $this->assertFalse(in_array($checklistItem, $checklistNode->getChecklistItems()));
+    }
 }
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodechecklist_nodes__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodechecklist_nodes__1.json
index d92c7c8ab7..20693aaa9d 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodechecklist_nodes__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodechecklist_nodes__1.json	
@@ -27,7 +27,11 @@
             },
             {
                 "_links": {
-                    "checklistItems": [],
+                    "checklistItems": [
+                        {
+                            "href": "escaped_value"
+                        }
+                    ],
                     "children": [],
                     "contentType": {
                         "href": "escaped_value"
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json
index 87fb09384c..2088e60717 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetCollectionMatchesStructure with data set content_nodes__1.json	
@@ -104,7 +104,11 @@
             },
             {
                 "_links": {
-                    "checklistItems": [],
+                    "checklistItems": [
+                        {
+                            "href": "escaped_value"
+                        }
+                    ],
                     "children": [],
                     "contentType": {
                         "href": "escaped_value"
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set activities__1.json b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set activities__1.json
index 81d49812a7..df948bb2cf 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set activities__1.json	
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testGetItemMatchesStructure with data set activities__1.json	
@@ -125,7 +125,11 @@
             },
             {
                 "_links": {
-                    "checklistItems": [],
+                    "checklistItems": [
+                        {
+                            "href": "escaped_value"
+                        }
+                    ],
                     "children": [],
                     "contentType": {
                         "href": "escaped_value"

From c95ca3b720b580774c30d81535284cd0c47aeec2 Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Sat, 22 Jun 2024 14:42:51 +0200
Subject: [PATCH 162/273] unify AssertNoLoop-Validators

---
 api/src/Entity/ChecklistItem.php              |  8 +++-
 api/src/Entity/ContentNode.php                |  8 +++-
 api/src/Entity/HasParentInterface.php         |  7 +++
 .../{ContentNode => }/AssertNoLoop.php        |  2 +-
 .../AssertNoLoopValidator.php                 |  8 ++--
 .../Validator/ChecklistItem/AssertNoLoop.php  | 10 ----
 .../ChecklistItem/AssertNoLoopValidator.php   | 46 -------------------
 .../AssertNoLoopValidatorTest.php             |  6 +--
 8 files changed, 27 insertions(+), 68 deletions(-)
 create mode 100644 api/src/Entity/HasParentInterface.php
 rename api/src/Validator/{ContentNode => }/AssertNoLoop.php (83%)
 rename api/src/Validator/{ContentNode => }/AssertNoLoopValidator.php (88%)
 delete mode 100644 api/src/Validator/ChecklistItem/AssertNoLoop.php
 delete mode 100644 api/src/Validator/ChecklistItem/AssertNoLoopValidator.php
 rename api/tests/Validator/{ContentNode => }/AssertNoLoopValidatorTest.php (95%)

diff --git a/api/src/Entity/ChecklistItem.php b/api/src/Entity/ChecklistItem.php
index c6c453806b..f9a42a65c0 100644
--- a/api/src/Entity/ChecklistItem.php
+++ b/api/src/Entity/ChecklistItem.php
@@ -16,8 +16,8 @@
 use App\InputFilter;
 use App\Repository\ChecklistItemRepository;
 use App\Util\EntityMap;
+use App\Validator\AssertNoLoop;
 use App\Validator\ChecklistItem\AssertBelongsToChecklist;
-use App\Validator\ChecklistItem\AssertNoLoop;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
 use Doctrine\ORM\Mapping as ORM;
@@ -67,7 +67,7 @@
 )]
 #[ApiFilter(filterClass: SearchFilter::class, properties: ['checklist'])]
 #[ORM\Entity(repositoryClass: ChecklistItemRepository::class)]
-class ChecklistItem extends BaseEntity implements BelongsToCampInterface, CopyFromPrototypeInterface {
+class ChecklistItem extends BaseEntity implements BelongsToCampInterface, CopyFromPrototypeInterface, HasParentInterface {
     public const CHECKLIST_SUBRESOURCE_URI_TEMPLATE = '/checklists/{checklistId}/checklist_items.{_format}';
 
     /**
@@ -140,6 +140,10 @@ public function getCamp(): ?Camp {
         return $this->checklist?->getCamp();
     }
 
+    public function getParent(): ?HasParentInterface {
+        return $this->parent;
+    }
+
     /**
      * @return ChecklistItem[]
      */
diff --git a/api/src/Entity/ContentNode.php b/api/src/Entity/ContentNode.php
index 2ebaf52023..6130076daa 100644
--- a/api/src/Entity/ContentNode.php
+++ b/api/src/Entity/ContentNode.php
@@ -14,9 +14,9 @@
 use App\Util\ClassInfoTrait;
 use App\Util\EntityMap;
 use App\Util\JsonMergePatch;
+use App\Validator\AssertNoLoop;
 use App\Validator\ContentNode\AssertAttachedToRoot;
 use App\Validator\ContentNode\AssertContentTypeCompatible;
-use App\Validator\ContentNode\AssertNoLoop;
 use App\Validator\ContentNode\AssertNoRootChange;
 use App\Validator\ContentNode\AssertSlotSupportedByParent;
 use Doctrine\Common\Collections\ArrayCollection;
@@ -49,7 +49,7 @@
 #[ORM\InheritanceType('SINGLE_TABLE')]
 #[ORM\DiscriminatorColumn(name: 'strategy', type: 'string')]
 #[ORM\UniqueConstraint(name: 'contentnode_parentid_slot_position_unique', columns: ['parentid', 'slot', 'position'])]
-abstract class ContentNode extends BaseEntity implements BelongsToContentNodeTreeInterface, CopyFromPrototypeInterface {
+abstract class ContentNode extends BaseEntity implements BelongsToContentNodeTreeInterface, CopyFromPrototypeInterface, HasParentInterface {
     use ClassInfoTrait;
 
     /**
@@ -180,6 +180,10 @@ public function getRoot(): ?ColumnLayout {
         return $this->root;
     }
 
+    public function getParent(): ?HasParentInterface {
+        return $this->parent;
+    }
+
     /**
      * Holds the actual data of the content node.
      */
diff --git a/api/src/Entity/HasParentInterface.php b/api/src/Entity/HasParentInterface.php
new file mode 100644
index 0000000000..87ec5c2d00
--- /dev/null
+++ b/api/src/Entity/HasParentInterface.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace App\Entity;
+
+interface HasParentInterface extends HasId {
+    public function getParent(): ?HasParentInterface;
+}
diff --git a/api/src/Validator/ContentNode/AssertNoLoop.php b/api/src/Validator/AssertNoLoop.php
similarity index 83%
rename from api/src/Validator/ContentNode/AssertNoLoop.php
rename to api/src/Validator/AssertNoLoop.php
index fdfd41bd0e..e6ba7899b6 100644
--- a/api/src/Validator/ContentNode/AssertNoLoop.php
+++ b/api/src/Validator/AssertNoLoop.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace App\Validator\ContentNode;
+namespace App\Validator;
 
 use Symfony\Component\Validator\Constraint;
 
diff --git a/api/src/Validator/ContentNode/AssertNoLoopValidator.php b/api/src/Validator/AssertNoLoopValidator.php
similarity index 88%
rename from api/src/Validator/ContentNode/AssertNoLoopValidator.php
rename to api/src/Validator/AssertNoLoopValidator.php
index 160c61496a..8b7cb665f1 100644
--- a/api/src/Validator/ContentNode/AssertNoLoopValidator.php
+++ b/api/src/Validator/AssertNoLoopValidator.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace App\Validator\ContentNode;
+namespace App\Validator;
 
-use App\Entity\ContentNode;
+use App\Entity\HasParentInterface;
 use Symfony\Component\Validator\Constraint;
 use Symfony\Component\Validator\ConstraintValidator;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
@@ -19,7 +19,7 @@ public function validate($value, Constraint $constraint): void {
 
         $object = $this->context->getObject();
 
-        /** @var ContentNode $parent */
+        /** @var HasParentInterface $parent */
         $parent = $value;
 
         // $seen keeps track of all parents that we have visited. This is for a safety
@@ -36,7 +36,7 @@ public function validate($value, Constraint $constraint): void {
             }
 
             $seen[] = $parent->getId();
-            $parent = $parent->parent;
+            $parent = $parent->getParent();
         }
     }
 }
diff --git a/api/src/Validator/ChecklistItem/AssertNoLoop.php b/api/src/Validator/ChecklistItem/AssertNoLoop.php
deleted file mode 100644
index f60e2bba67..0000000000
--- a/api/src/Validator/ChecklistItem/AssertNoLoop.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace App\Validator\ChecklistItem;
-
-use Symfony\Component\Validator\Constraint;
-
-#[\Attribute]
-class AssertNoLoop extends Constraint {
-    public $message = 'Must not form a loop of parent-child relations.';
-}
diff --git a/api/src/Validator/ChecklistItem/AssertNoLoopValidator.php b/api/src/Validator/ChecklistItem/AssertNoLoopValidator.php
deleted file mode 100644
index 2383a21172..0000000000
--- a/api/src/Validator/ChecklistItem/AssertNoLoopValidator.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-
-namespace App\Validator\ChecklistItem;
-
-use App\Entity\ChecklistItem;
-use Symfony\Component\Validator\Constraint;
-use Symfony\Component\Validator\ConstraintValidator;
-use Symfony\Component\Validator\Exception\UnexpectedTypeException;
-use Symfony\Component\Validator\Exception\UnexpectedValueException;
-
-class AssertNoLoopValidator extends ConstraintValidator {
-    public function validate($value, Constraint $constraint): void {
-        if (!$constraint instanceof AssertNoLoop) {
-            throw new UnexpectedTypeException($constraint, AssertNoLoop::class);
-        }
-
-        if (null === $value || '' === $value) {
-            return;
-        }
-
-        $object = $this->context->getObject();
-        if (!$object instanceof ChecklistItem) {
-            throw new UnexpectedValueException($object, ChecklistItem::class);
-        }
-
-        /** @var ChecklistItem $parent */
-        $parent = $value;
-
-        // $seen keeps track of all parents that we have visited. This is for a safety
-        // bailout mechanism to avoid an infinite loop in case there is flawed data in the DB
-        $seen = [];
-
-        while (null !== $parent && !in_array($parent->getId(), $seen)) {
-            if ($parent->getId() === $object->getId()) {
-                $this->context->buildViolation($constraint->message)
-                    ->addViolation()
-                ;
-
-                return;
-            }
-
-            $seen[] = $parent->getId();
-            $parent = $parent->parent;
-        }
-    }
-}
diff --git a/api/tests/Validator/ContentNode/AssertNoLoopValidatorTest.php b/api/tests/Validator/AssertNoLoopValidatorTest.php
similarity index 95%
rename from api/tests/Validator/ContentNode/AssertNoLoopValidatorTest.php
rename to api/tests/Validator/AssertNoLoopValidatorTest.php
index ead7803414..527f4bfb94 100644
--- a/api/tests/Validator/ContentNode/AssertNoLoopValidatorTest.php
+++ b/api/tests/Validator/AssertNoLoopValidatorTest.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace App\Tests\Validator\ContentNode;
+namespace App\Tests\Validator;
 
 use App\Entity\ContentNode;
-use App\Validator\ContentNode\AssertNoLoop;
-use App\Validator\ContentNode\AssertNoLoopValidator;
+use App\Validator\AssertNoLoop;
+use App\Validator\AssertNoLoopValidator;
 use Symfony\Component\Validator\Constraints\Email;
 use Symfony\Component\Validator\ConstraintValidatorInterface;
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;

From d3d5c0bec26ac8b953d0b1c31a19bdba5b33057b Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Tue, 9 Jul 2024 19:26:00 +0200
Subject: [PATCH 163/273] fixes according to review

---
 api/fixtures/checklistItems.yml                 | 3 ---
 api/migrations/schema/Version20240620143000.php | 2 +-
 api/src/Entity/Checklist.php                    | 2 +-
 3 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/api/fixtures/checklistItems.yml b/api/fixtures/checklistItems.yml
index 3892d00a43..ffe2553f24 100644
--- a/api/fixtures/checklistItems.yml
+++ b/api/fixtures/checklistItems.yml
@@ -9,9 +9,6 @@ App\Entity\ChecklistItem:
     checklist: '@checklist1'
     parent: '@checklistItem1_1_2'
     text: 'Camp1_List1_Item2_Item3'
-# checklist2WithNoItems:
-#   checklist: '@checklist2WithNoItems'
-#   text: 'Camp1_List2_Item1'
   checklistItem2_1_1:
     checklist: '@checklist1camp2'
     text: 'Camp2_List1_Item1'
diff --git a/api/migrations/schema/Version20240620143000.php b/api/migrations/schema/Version20240620143000.php
index d6c0c34edf..1d61764ed0 100644
--- a/api/migrations/schema/Version20240620143000.php
+++ b/api/migrations/schema/Version20240620143000.php
@@ -29,6 +29,6 @@ public function up(Schema $schema): void {
 
     public function down(Schema $schema): void {
         // this down() migration is auto-generated, please modify it to your needs
-        $this->addSql('DELETE FROM public.content_type WHERE id IN (\'a4211c11211c\')');
+        $this->addSql("DELETE FROM public.content_type WHERE id IN ('a4211c11211c')");
     }
 }
diff --git a/api/src/Entity/Checklist.php b/api/src/Entity/Checklist.php
index 9a5ba7fd2c..9703f5d30a 100644
--- a/api/src/Entity/Checklist.php
+++ b/api/src/Entity/Checklist.php
@@ -102,7 +102,7 @@ class Checklist extends BaseEntity implements BelongsToCampInterface, CopyFromPr
     #[Assert\NotBlank]
     #[Assert\Length(max: 32)]
     #[ORM\Column(type: 'text')]
-    public ?string $name = null;
+    public string $name;
 
     public function __construct() {
         parent::__construct();

From bff7dd6b1e6c58c3fd007e69337b57055c7c764b Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Tue, 9 Jul 2024 19:32:18 +0200
Subject: [PATCH 164/273] fixes according to review

---
 .../schema/Version20240620104153.php          |  6 ++--
 .../schema/Version20240621195713.php          | 34 -------------------
 api/src/Entity/ChecklistItem.php              |  2 ++
 .../ChecklistNodePersistProcessor.php         | 10 ++++--
 .../CreateChecklistItemTest.php               |  8 ++---
 .../ChecklistNode/CreateChecklistNodeTest.php | 10 ++----
 6 files changed, 20 insertions(+), 50 deletions(-)
 delete mode 100644 api/migrations/schema/Version20240621195713.php

diff --git a/api/migrations/schema/Version20240620104153.php b/api/migrations/schema/Version20240620104153.php
index 7e0da4b8a2..82cfd58b19 100644
--- a/api/migrations/schema/Version20240620104153.php
+++ b/api/migrations/schema/Version20240620104153.php
@@ -17,16 +17,18 @@ public function getDescription(): string {
 
     public function up(Schema $schema): void {
         // this up() migration is auto-generated, please modify it to your needs
+        $this->addSql('CREATE UNIQUE INDEX checklistitem_checklistid_parentid_position_unique ON checklist_item (checklistid, parentid, position)');
         $this->addSql('CREATE TABLE checklistnode_checklistitem (checklistnode_id VARCHAR(16) NOT NULL, checklistitem_id VARCHAR(16) NOT NULL, PRIMARY KEY(checklistnode_id, checklistitem_id))');
         $this->addSql('CREATE INDEX IDX_5A2B5B31DE6B6F00 ON checklistnode_checklistitem (checklistnode_id)');
         $this->addSql('CREATE INDEX IDX_5A2B5B318A09A289 ON checklistnode_checklistitem (checklistitem_id)');
-        $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT FK_5A2B5B31DE6B6F00 FOREIGN KEY (checklistnode_id) REFERENCES content_node (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
-        $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT FK_5A2B5B318A09A289 FOREIGN KEY (checklistitem_id) REFERENCES checklist_item (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
+        $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT FK_5A2B5B31DE6B6F00 FOREIGN KEY (checklistnode_id) REFERENCES content_node (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE');
+        $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT FK_5A2B5B318A09A289 FOREIGN KEY (checklistitem_id) REFERENCES checklist_item (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE');
     }
 
     public function down(Schema $schema): void {
         // this down() migration is auto-generated, please modify it to your needs
         $this->addSql('CREATE SCHEMA public');
+        $this->addSql('DROP INDEX checklistitem_checklistid_parentid_position_unique');
         $this->addSql('ALTER TABLE checklistnode_checklistitem DROP CONSTRAINT FK_5A2B5B31DE6B6F00');
         $this->addSql('ALTER TABLE checklistnode_checklistitem DROP CONSTRAINT FK_5A2B5B318A09A289');
         $this->addSql('DROP TABLE checklistnode_checklistitem');
diff --git a/api/migrations/schema/Version20240621195713.php b/api/migrations/schema/Version20240621195713.php
deleted file mode 100644
index 3dce8330ff..0000000000
--- a/api/migrations/schema/Version20240621195713.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace DoctrineMigrations;
-
-use Doctrine\DBAL\Schema\Schema;
-use Doctrine\Migrations\AbstractMigration;
-
-/**
- * Auto-generated Migration: Please modify to your needs!
- */
-final class Version20240621195713 extends AbstractMigration {
-    public function getDescription(): string {
-        return '';
-    }
-
-    public function up(Schema $schema): void {
-        // this up() migration is auto-generated, please modify it to your needs
-        $this->addSql('ALTER TABLE checklistnode_checklistitem DROP CONSTRAINT FK_5A2B5B31DE6B6F00');
-        $this->addSql('ALTER TABLE checklistnode_checklistitem DROP CONSTRAINT FK_5A2B5B318A09A289');
-        $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT FK_5A2B5B31DE6B6F00 FOREIGN KEY (checklistnode_id) REFERENCES content_node (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE');
-        $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT FK_5A2B5B318A09A289 FOREIGN KEY (checklistitem_id) REFERENCES checklist_item (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE');
-    }
-
-    public function down(Schema $schema): void {
-        // this down() migration is auto-generated, please modify it to your needs
-        $this->addSql('CREATE SCHEMA public');
-        $this->addSql('ALTER TABLE checklistnode_checklistitem DROP CONSTRAINT fk_5a2b5b31de6b6f00');
-        $this->addSql('ALTER TABLE checklistnode_checklistitem DROP CONSTRAINT fk_5a2b5b318a09a289');
-        $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT fk_5a2b5b31de6b6f00 FOREIGN KEY (checklistnode_id) REFERENCES content_node (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
-        $this->addSql('ALTER TABLE checklistnode_checklistitem ADD CONSTRAINT fk_5a2b5b318a09a289 FOREIGN KEY (checklistitem_id) REFERENCES checklist_item (id) NOT DEFERRABLE INITIALLY IMMEDIATE');
-    }
-}
diff --git a/api/src/Entity/ChecklistItem.php b/api/src/Entity/ChecklistItem.php
index f9a42a65c0..2b726bf253 100644
--- a/api/src/Entity/ChecklistItem.php
+++ b/api/src/Entity/ChecklistItem.php
@@ -67,6 +67,7 @@
 )]
 #[ApiFilter(filterClass: SearchFilter::class, properties: ['checklist'])]
 #[ORM\Entity(repositoryClass: ChecklistItemRepository::class)]
+#[ORM\UniqueConstraint(name: 'checklistitem_checklistid_parentid_position_unique', columns: ['checklistid', 'parentid', 'position'])]
 class ChecklistItem extends BaseEntity implements BelongsToCampInterface, CopyFromPrototypeInterface, HasParentInterface {
     public const CHECKLIST_SUBRESOURCE_URI_TEMPLATE = '/checklists/{checklistId}/checklist_items.{_format}';
 
@@ -74,6 +75,7 @@ class ChecklistItem extends BaseEntity implements BelongsToCampInterface, CopyFr
      * The Checklist this Item belongs to.
      */
     #[ApiProperty(example: '/checklists/1a2b3c4d')]
+    #[Gedmo\SortableGroup]
     #[Groups(['read', 'create'])]
     #[ORM\ManyToOne(targetEntity: Checklist::class, inversedBy: 'checklistItems')]
     #[ORM\JoinColumn(nullable: false, onDelete: 'cascade')]
diff --git a/api/src/State/ContentNode/ChecklistNodePersistProcessor.php b/api/src/State/ContentNode/ChecklistNodePersistProcessor.php
index b138cf7b73..bdbe6a9f34 100644
--- a/api/src/State/ContentNode/ChecklistNodePersistProcessor.php
+++ b/api/src/State/ContentNode/ChecklistNodePersistProcessor.php
@@ -25,13 +25,19 @@ public function onBefore($data, Operation $operation, array $uriVariables = [],
         if (null !== $data->addChecklistItemIds) {
             foreach ($data->addChecklistItemIds as $checklistItemId) {
                 $checklistItem = $this->checklistItemRepository->find($checklistItemId);
-                $data->addChecklistItem($checklistItem);
+                if (null != $checklistItem) {
+                    // if a checklistItem does not exists, do not add it
+                    $data->addChecklistItem($checklistItem);
+                }
             }
         }
         if (null !== $data->removeChecklistItemIds) {
             foreach ($data->removeChecklistItemIds as $checklistItemId) {
                 $checklistItem = $this->checklistItemRepository->find($checklistItemId);
-                $data->removeChecklistItem($checklistItem);
+                if (null != $checklistItem) {
+                    // if a checklistItem no longer exists, it does not have to be removed
+                    $data->removeChecklistItem($checklistItem);
+                }
             }
         }
 
diff --git a/api/tests/Api/ChecklistItems/CreateChecklistItemTest.php b/api/tests/Api/ChecklistItems/CreateChecklistItemTest.php
index 007d8d0970..6aa37d9489 100644
--- a/api/tests/Api/ChecklistItems/CreateChecklistItemTest.php
+++ b/api/tests/Api/ChecklistItems/CreateChecklistItemTest.php
@@ -66,14 +66,14 @@ public function testCreateChecklistItemIsAllowedForMember() {
         ;
 
         $this->assertResponseStatusCodeSame(201);
-        $this->assertJsonContains($this->getExampleReadPayload(['position' => 5]));
+        $this->assertJsonContains($this->getExampleReadPayload(['position' => 2]));
     }
 
     public function testCreateChecklistItemIsAllowedForManager() {
         static::createClientWithCredentials()->request('POST', '/checklist_items', ['json' => $this->getExampleWritePayload()]);
 
         $this->assertResponseStatusCodeSame(201);
-        $this->assertJsonContains($this->getExampleReadPayload(['position' => 5]));
+        $this->assertJsonContains($this->getExampleReadPayload(['position' => 2]));
     }
 
     public function testCreateChecklistItemInCampPrototypeIsDeniedForUnrelatedUser() {
@@ -181,7 +181,7 @@ public function testCreateChecklistItemTrimsText() {
         $this->assertJsonContains($this->getExampleReadPayload(
             [
                 'text' => 'Ziel 1',
-                'position' => 5,
+                'position' => 2,
             ]
         ));
     }
@@ -203,7 +203,7 @@ public function testCreateChecklistItemCleansForbiddenCharactersFromText() {
         $this->assertJsonContains($this->getExampleReadPayload(
             [
                 'text' => '<b>Ziel 1',
-                'position' => 5,
+                'position' => 2,
             ]
         ));
     }
diff --git a/api/tests/Api/ContentNodes/ChecklistNode/CreateChecklistNodeTest.php b/api/tests/Api/ContentNodes/ChecklistNode/CreateChecklistNodeTest.php
index 703e19bbe8..8d0fd4d8f8 100644
--- a/api/tests/Api/ContentNodes/ChecklistNode/CreateChecklistNodeTest.php
+++ b/api/tests/Api/ContentNodes/ChecklistNode/CreateChecklistNodeTest.php
@@ -22,14 +22,8 @@ public function setUp(): void {
      */
     public function getExampleWritePayload($attributes = [], $except = []) {
         return parent::getExampleWritePayload(
-            array_merge(
-                [
-                    'addChecklistItemIds' => null,
-                    'removeChecklistItemIds' => null,
-                ],
-                $attributes
-            ),
-            $except
+            $attributes,
+            array_merge(['addChecklistItemIds', 'removeChecklistItemIds'], $except)
         );
     }
 }

From 87f2744811283c11a47bea17fde76501dd479a0d Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Sat, 13 Jul 2024 16:36:45 +0200
Subject: [PATCH 165/273] ChecklistItem text length = 256

---
 api/src/Entity/ChecklistItem.php                 |  2 +-
 .../ChecklistItems/CreateChecklistItemTest.php   |  4 ++--
 .../ChecklistItems/UpdateChecklistItemTest.php   |  4 ++--
 ...otTest__testOpenApiSpecMatchesSnapshot__1.yml | 16 ++++++++--------
 4 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/api/src/Entity/ChecklistItem.php b/api/src/Entity/ChecklistItem.php
index 2b726bf253..9cbec270c1 100644
--- a/api/src/Entity/ChecklistItem.php
+++ b/api/src/Entity/ChecklistItem.php
@@ -117,7 +117,7 @@ class ChecklistItem extends BaseEntity implements BelongsToCampInterface, CopyFr
     #[InputFilter\Trim]
     #[InputFilter\CleanText]
     #[Assert\NotBlank]
-    #[Assert\Length(max: 64)]
+    #[Assert\Length(max: 256)]
     #[ORM\Column(type: 'text')]
     public ?string $text = null;
 
diff --git a/api/tests/Api/ChecklistItems/CreateChecklistItemTest.php b/api/tests/Api/ChecklistItems/CreateChecklistItemTest.php
index 6aa37d9489..6381cc0999 100644
--- a/api/tests/Api/ChecklistItems/CreateChecklistItemTest.php
+++ b/api/tests/Api/ChecklistItems/CreateChecklistItemTest.php
@@ -147,7 +147,7 @@ public function testCreateChecklistItemValidatesTooLongText() {
             [
                 'json' => $this->getExampleWritePayload(
                     [
-                        'text' => str_repeat('l', 65),
+                        'text' => str_repeat('l', 257),
                     ]
                 ),
             ]
@@ -158,7 +158,7 @@ public function testCreateChecklistItemValidatesTooLongText() {
             'violations' => [
                 [
                     'propertyPath' => 'text',
-                    'message' => 'This value is too long. It should have 64 characters or less.',
+                    'message' => 'This value is too long. It should have 256 characters or less.',
                 ],
             ],
         ]);
diff --git a/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php b/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php
index ca6ceae23a..0152401f68 100644
--- a/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php
+++ b/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php
@@ -161,7 +161,7 @@ public function testPatchChecklistItemValidatesTooLongText() {
             '/checklist_items/'.$checklistItem->getId(),
             [
                 'json' => [
-                    'text' => str_repeat('l', 65),
+                    'text' => str_repeat('l', 257),
                 ],
                 'headers' => ['Content-Type' => 'application/merge-patch+json'],
             ]
@@ -172,7 +172,7 @@ public function testPatchChecklistItemValidatesTooLongText() {
             'violations' => [
                 [
                     'propertyPath' => 'text',
-                    'message' => 'This value is too long. It should have 64 characters or less.',
+                    'message' => 'This value is too long. It should have 256 characters or less.',
                 ],
             ],
         ]);
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
index aa39594dcd..4ba7381415 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
@@ -7955,7 +7955,7 @@ components:
         text:
           description: 'The human readable text of the checklist-item.'
           example: Pfaditechnick
-          maxLength: 64
+          maxLength: 256
           type: string
       required:
         - checklist
@@ -7987,7 +7987,7 @@ components:
         text:
           description: 'The human readable text of the checklist-item.'
           example: Pfaditechnick
-          maxLength: 64
+          maxLength: 256
           type: string
       required:
         - position
@@ -8022,7 +8022,7 @@ components:
         text:
           description: 'The human readable text of the checklist-item.'
           example: Pfaditechnick
-          maxLength: 64
+          maxLength: 256
           type: string
       required:
         - checklist
@@ -8053,7 +8053,7 @@ components:
                 text:
                   description: 'The human readable text of the checklist-item.'
                   example: Pfaditechnick
-                  maxLength: 64
+                  maxLength: 256
                   type: string
               required:
                 - position
@@ -8147,7 +8147,7 @@ components:
         text:
           description: 'The human readable text of the checklist-item.'
           example: Pfaditechnick
-          maxLength: 64
+          maxLength: 256
           type: string
       required:
         - checklist
@@ -8193,7 +8193,7 @@ components:
         text:
           description: 'The human readable text of the checklist-item.'
           example: Pfaditechnick
-          maxLength: 64
+          maxLength: 256
           type: string
       required:
         - checklist
@@ -8267,7 +8267,7 @@ components:
         text:
           description: 'The human readable text of the checklist-item.'
           example: Pfaditechnick
-          maxLength: 64
+          maxLength: 256
           type: string
       required:
         - checklist
@@ -8304,7 +8304,7 @@ components:
         text:
           description: 'The human readable text of the checklist-item.'
           example: Pfaditechnick
-          maxLength: 64
+          maxLength: 256
           type: string
       required:
         - checklist

From 091d964e8d65d783982d94bd1cf9cce84a884863 Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Mon, 15 Jul 2024 18:25:41 +0200
Subject: [PATCH 166/273] fix unittest-names

---
 .../ChecklistNode/UpdateChecklistNodeTest.php             | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php b/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php
index b6c5661558..a2cd67de89 100644
--- a/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php
+++ b/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php
@@ -30,7 +30,7 @@ public function testAddChecklistItemIsDeniedForGuest() {
         ]);
     }
 
-    public function testAddChecklistItemIsDeniedForMember() {
+    public function testAddChecklistItemForMember() {
         $checklistItemId = static::getFixture('checklistItem1_1_2')->getId();
         static::createClientWithCredentials(['email' => static::getFixture('user2member')->getEmail()])
             ->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [
@@ -49,7 +49,7 @@ public function testAddChecklistItemIsDeniedForMember() {
         ]);
     }
 
-    public function testAddChecklistItemIsDeniedForManager() {
+    public function testAddChecklistItemForManager() {
         $checklistItemId = static::getFixture('checklistItem1_1_2')->getId();
         static::createClientWithCredentials()->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [
             'addChecklistItemIds' => [$checklistItemId],
@@ -81,7 +81,7 @@ public function testRemoveChecklistItemIsDeniedForGuest() {
         ]);
     }
 
-    public function testRemoveChecklistItemIsDeniedForMember() {
+    public function testRemoveChecklistItemForMember() {
         $checklistItem = static::getFixture('checklistItem1_1_1');
         static::createClientWithCredentials(['email' => static::getFixture('user2member')->getEmail()])
             ->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [
@@ -93,7 +93,7 @@ public function testRemoveChecklistItemIsDeniedForMember() {
         $this->assertFalse(in_array($checklistItem, $checklistNode->getChecklistItems()));
     }
 
-    public function testRemoveChecklistItemIsDeniedForManager() {
+    public function testRemoveChecklistItemForManager() {
         $checklistItem = static::getFixture('checklistItem1_1_1');
         static::createClientWithCredentials()->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [
             'removeChecklistItemIds' => [$checklistItem->getId()],

From b17adc0d793447a15a069309422f788996c10ddb Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Sun, 21 Jul 2024 18:00:34 +0200
Subject: [PATCH 167/273] fix performance-unittests

---
 .../performance_test/checklistItems.yml       |  2 +-
 ...est__testOpenApiSpecMatchesSnapshot__1.yml |  5 -----
 ...manceDidNotChangeForStableEndpoints__1.yml | 20 +++++++++++--------
 3 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/api/fixtures/performance_test/checklistItems.yml b/api/fixtures/performance_test/checklistItems.yml
index ea01fe011d..623cc12099 100644
--- a/api/fixtures/performance_test/checklistItems.yml
+++ b/api/fixtures/performance_test/checklistItems.yml
@@ -6,5 +6,5 @@ App\Entity\ChecklistItem:
     checklist: '@additional_checklist2_<current()>'
     text: 'Item_<current()>'
   additional_checklistItem_camp1_{1..12}:
-    camp: '@additional_checklist_camp1_1'
+    checklist: '@additional_checklist_camp1_1'
     text: 'Item_<current()>'
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
index 4ba7381415..f3073e3f4b 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
@@ -24855,7 +24855,6 @@ paths:
       summary: 'Retrieves the collection of ChecklistItem resources.'
       tags:
         - ChecklistItem
-    parameters: []
     post:
       deprecated: false
       description: 'Creates a ChecklistItem resource.'
@@ -24974,7 +24973,6 @@ paths:
       summary: 'Retrieves a ChecklistItem resource.'
       tags:
         - ChecklistItem
-    parameters: []
     patch:
       deprecated: false
       description: 'Updates the ChecklistItem resource.'
@@ -25244,7 +25242,6 @@ paths:
       summary: 'Retrieves the collection of ChecklistItem resources.'
       tags:
         - ChecklistItem
-    parameters: []
   '/checklists/{id}':
     delete:
       deprecated: false
@@ -25481,7 +25478,6 @@ paths:
       summary: 'Retrieves the collection of ChecklistNode resources.'
       tags:
         - ChecklistNode
-    parameters: []
     post:
       deprecated: false
       description: 'Creates a ChecklistNode resource.'
@@ -25600,7 +25596,6 @@ paths:
       summary: 'Retrieves a ChecklistNode resource.'
       tags:
         - ChecklistNode
-    parameters: []
     patch:
       deprecated: false
       description: 'Updates the ChecklistNode resource.'
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/performance_test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/performance_test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
index b8edfa35ed..fdc9790ac3 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/performance_test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/performance_test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
@@ -1,15 +1,19 @@
 /activities: 221
-/activities/item: 233
+/activities/item: 236
 /activity_progress_labels: 6
 /activity_progress_labels/item: 7
 /activity_responsibles: 6
 /activity_responsibles/item: 8
-/camps: 36
-/camps/item: 31
-/camp_collaborations: 22
-/camp_collaborations/item: 24
+/camps: 39
+/camps/item: 32
+/camp_collaborations: 25
+/camp_collaborations/item: 25
 /categories: 11
 /categories/item: 9
+/checklists: 6
+/checklists/item: 7
+/checklist_items: 6
+/checklist_items/item: 8
 /content_types: 6
 /content_types/item: 6
 /days: 26
@@ -21,7 +25,7 @@
 /material_lists: 6
 /material_lists/item: 7
 /periods: 6
-/periods/item: 27
+/periods/item: 28
 /profiles: 6
 /profiles/item: 6
 /schedule_entries: 23
@@ -30,8 +34,8 @@
 '/activities?camp=': 213
 '/activity_progress_labels?camp=': 6
 '/activity_responsibles?activity.camp=': 6
-'/camp_collaborations?camp=': 12
-'/camp_collaborations?activityResponsibles.activity=': 24
+'/camp_collaborations?camp=': 13
+'/camp_collaborations?activityResponsibles.activity=': 25
 '/categories?camp=': 9
 '/content_types?categories=': 6
 '/day_responsibles?day.period=': 6

From 21bd30040e3a42cf18505d68fafb0ac8c9e2d8ba Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Tue, 6 Aug 2024 22:57:28 +0200
Subject: [PATCH 168/273] changes according to review

---
 api/src/Entity/Camp.php                       |   2 +-
 api/src/Entity/Checklist.php                  |   5 +-
 api/src/Entity/ChecklistItem.php              |  11 +-
 api/src/Entity/ContentNode/ChecklistNode.php  |   2 +-
 ...t.php => AssertBelongsToSameChecklist.php} |   2 +-
 ...AssertBelongsToSameChecklistValidator.php} |   6 +-
 .../ListCampCollaborationsTest.php            |   2 +-
 .../ReadCampCollaborationTest.php             |   2 +-
 ...est__testOpenApiSpecMatchesSnapshot__1.yml | 147 ++++++------------
 ...manceDidNotChangeForStableEndpoints__1.yml |  14 +-
 ...manceDidNotChangeForStableEndpoints__1.yml |  14 +-
 11 files changed, 79 insertions(+), 128 deletions(-)
 rename api/src/Validator/ChecklistItem/{AssertBelongsToChecklist.php => AssertBelongsToSameChecklist.php} (75%)
 rename api/src/Validator/ChecklistItem/{AssertBelongsToChecklistValidator.php => AssertBelongsToSameChecklistValidator.php} (87%)

diff --git a/api/src/Entity/Camp.php b/api/src/Entity/Camp.php
index 88a895869c..35295e7956 100644
--- a/api/src/Entity/Camp.php
+++ b/api/src/Entity/Camp.php
@@ -140,7 +140,7 @@ class Camp extends BaseEntity implements BelongsToCampInterface, CopyFromPrototy
      * List of all Checklists of this Camp.
      * Each Checklist is a List of ChecklistItems.
      */
-    #[ApiProperty(writable: false, example: '["/checklists/1a2b3c4d"]')]
+    #[ApiProperty(writable: false, uriTemplate: Checklist::CAMP_SUBRESOURCE_URI_TEMPLATE)]
     #[Groups(['read'])]
     #[ORM\OneToMany(targetEntity: Checklist::class, mappedBy: 'camp', orphanRemoval: true, cascade: ['persist'])]
     public Collection $checklists;
diff --git a/api/src/Entity/Checklist.php b/api/src/Entity/Checklist.php
index 9703f5d30a..336177e806 100644
--- a/api/src/Entity/Checklist.php
+++ b/api/src/Entity/Checklist.php
@@ -48,7 +48,6 @@
             securityPostDenormalize: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)'
         ),
         new GetCollection(
-            name: 'BelongsToCamp_App\Entity\Checklist_get_collection',
             uriTemplate: self::CAMP_SUBRESOURCE_URI_TEMPLATE,
             uriVariables: [
                 'campId' => new Link(
@@ -66,7 +65,7 @@
 #[ApiFilter(filterClass: SearchFilter::class, properties: ['camp'])]
 #[ORM\Entity(repositoryClass: ChecklistRepository::class)]
 class Checklist extends BaseEntity implements BelongsToCampInterface, CopyFromPrototypeInterface {
-    public const CAMP_SUBRESOURCE_URI_TEMPLATE = '/camps/{campId}/checklists.{_format}';
+    public const CAMP_SUBRESOURCE_URI_TEMPLATE = '/camps/{campId}/checklists{._format}';
 
     /**
      * The camp this checklist belongs to.
@@ -87,7 +86,7 @@ class Checklist extends BaseEntity implements BelongsToCampInterface, CopyFromPr
     /**
      * All ChecklistItems that belong to this Checklist.
      */
-    #[ApiProperty(writable: false, example: '["/checklist_items/1a2b3c4d"]')]
+    #[ApiProperty(writable: false, uriTemplate: ChecklistItem::CHECKLIST_SUBRESOURCE_URI_TEMPLATE)]
     #[Groups(['read'])]
     #[ORM\OneToMany(targetEntity: ChecklistItem::class, mappedBy: 'checklist', cascade: ['persist'])]
     public Collection $checklistItems;
diff --git a/api/src/Entity/ChecklistItem.php b/api/src/Entity/ChecklistItem.php
index 9cbec270c1..9317985251 100644
--- a/api/src/Entity/ChecklistItem.php
+++ b/api/src/Entity/ChecklistItem.php
@@ -17,7 +17,7 @@
 use App\Repository\ChecklistItemRepository;
 use App\Util\EntityMap;
 use App\Validator\AssertNoLoop;
-use App\Validator\ChecklistItem\AssertBelongsToChecklist;
+use App\Validator\ChecklistItem\AssertBelongsToSameChecklist;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
 use Doctrine\ORM\Mapping as ORM;
@@ -38,9 +38,7 @@
             security: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)'
         ),
         new Delete(
-            security: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)',
-            validate: true,
-            validationContext: ['groups' => ['delete']]
+            security: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)'
         ),
         new GetCollection(
             security: 'is_authenticated()'
@@ -50,7 +48,6 @@
             securityPostDenormalize: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)'
         ),
         new GetCollection(
-            name: 'BelongsToChecklist_App\Entity\ChecklistItem_get_collection',
             uriTemplate: self::CHECKLIST_SUBRESOURCE_URI_TEMPLATE,
             uriVariables: [
                 'checklistId' => new Link(
@@ -69,7 +66,7 @@
 #[ORM\Entity(repositoryClass: ChecklistItemRepository::class)]
 #[ORM\UniqueConstraint(name: 'checklistitem_checklistid_parentid_position_unique', columns: ['checklistid', 'parentid', 'position'])]
 class ChecklistItem extends BaseEntity implements BelongsToCampInterface, CopyFromPrototypeInterface, HasParentInterface {
-    public const CHECKLIST_SUBRESOURCE_URI_TEMPLATE = '/checklists/{checklistId}/checklist_items.{_format}';
+    public const CHECKLIST_SUBRESOURCE_URI_TEMPLATE = '/checklists/{checklistId}/checklist_items{._format}';
 
     /**
      * The Checklist this Item belongs to.
@@ -86,7 +83,7 @@ class ChecklistItem extends BaseEntity implements BelongsToCampInterface, CopyFr
      * root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long
      * as the new parent is in the same checklist as the old one.
      */
-    #[AssertBelongsToChecklist(groups: ['update'])]
+    #[AssertBelongsToSameChecklist(groups: ['update'])]
     #[AssertNoLoop(groups: ['update'])]
     #[ApiProperty(example: '/checklist_items/1a2b3c4d')]
     #[Gedmo\SortableGroup]
diff --git a/api/src/Entity/ContentNode/ChecklistNode.php b/api/src/Entity/ContentNode/ChecklistNode.php
index 36713bfb93..433be7ec36 100644
--- a/api/src/Entity/ContentNode/ChecklistNode.php
+++ b/api/src/Entity/ContentNode/ChecklistNode.php
@@ -51,7 +51,7 @@
 #[ORM\Entity(repositoryClass: ChecklistNodeRepository::class)]
 class ChecklistNode extends ContentNode {
     /**
-     * The content types that are most likely to be useful for planning programme of this category.
+     * List of selected ChecklistItems.
      */
     #[ApiProperty(example: '["/checklist_items/1a2b3c4d"]')]
     #[Groups(['read'])]
diff --git a/api/src/Validator/ChecklistItem/AssertBelongsToChecklist.php b/api/src/Validator/ChecklistItem/AssertBelongsToSameChecklist.php
similarity index 75%
rename from api/src/Validator/ChecklistItem/AssertBelongsToChecklist.php
rename to api/src/Validator/ChecklistItem/AssertBelongsToSameChecklist.php
index ceb67ccc17..a70685628d 100644
--- a/api/src/Validator/ChecklistItem/AssertBelongsToChecklist.php
+++ b/api/src/Validator/ChecklistItem/AssertBelongsToSameChecklist.php
@@ -5,6 +5,6 @@
 use Symfony\Component\Validator\Constraint;
 
 #[\Attribute]
-class AssertBelongsToChecklist extends Constraint {
+class AssertBelongsToSameChecklist extends Constraint {
     public string $message = 'Must belong to the same checklist.';
 }
diff --git a/api/src/Validator/ChecklistItem/AssertBelongsToChecklistValidator.php b/api/src/Validator/ChecklistItem/AssertBelongsToSameChecklistValidator.php
similarity index 87%
rename from api/src/Validator/ChecklistItem/AssertBelongsToChecklistValidator.php
rename to api/src/Validator/ChecklistItem/AssertBelongsToSameChecklistValidator.php
index 01aaa2fb76..7ad21d1670 100644
--- a/api/src/Validator/ChecklistItem/AssertBelongsToChecklistValidator.php
+++ b/api/src/Validator/ChecklistItem/AssertBelongsToSameChecklistValidator.php
@@ -9,12 +9,12 @@
 use Symfony\Component\Validator\Exception\UnexpectedTypeException;
 use Symfony\Component\Validator\Exception\UnexpectedValueException;
 
-class AssertBelongsToChecklistValidator extends ConstraintValidator {
+class AssertBelongsToSameChecklistValidator extends ConstraintValidator {
     public function __construct(public RequestStack $requestStack) {}
 
     public function validate($value, Constraint $constraint): void {
-        if (!$constraint instanceof AssertBelongsToChecklist) {
-            throw new UnexpectedTypeException($constraint, AssertBelongsToChecklist::class);
+        if (!$constraint instanceof AssertBelongsToSameChecklist) {
+            throw new UnexpectedTypeException($constraint, AssertBelongsToSameChecklist::class);
         }
 
         if (null === $value || '' === $value) {
diff --git a/api/tests/Api/CampCollaborations/ListCampCollaborationsTest.php b/api/tests/Api/CampCollaborations/ListCampCollaborationsTest.php
index 8ce744e353..06975241fe 100644
--- a/api/tests/Api/CampCollaborations/ListCampCollaborationsTest.php
+++ b/api/tests/Api/CampCollaborations/ListCampCollaborationsTest.php
@@ -114,6 +114,6 @@ public function testSqlQueryCount() {
         $client->enableProfiler();
         $client->request('GET', '/camp_collaborations');
 
-        $this->assertSqlQueryCount($client, 25);
+        $this->assertSqlQueryCount($client, 22);
     }
 }
diff --git a/api/tests/Api/CampCollaborations/ReadCampCollaborationTest.php b/api/tests/Api/CampCollaborations/ReadCampCollaborationTest.php
index 8c9eaf027f..a9916e6211 100644
--- a/api/tests/Api/CampCollaborations/ReadCampCollaborationTest.php
+++ b/api/tests/Api/CampCollaborations/ReadCampCollaborationTest.php
@@ -126,6 +126,6 @@ public function testSqlQueryCount() {
         $client->enableProfiler();
         $client->request('GET', '/camp_collaborations/'.$campCollaboration->getId());
 
-        $this->assertSqlQueryCount($client, 15);
+        $this->assertSqlQueryCount($client, 14);
     }
 }
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
index f3073e3f4b..514ed229e7 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
@@ -2335,13 +2335,10 @@ components:
           type: string
         checklists:
           description: 'List of all Checklists of this Camp.'
-          example: '["/checklists/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+          example: 'https://example.com/'
+          format: iri-reference
           readOnly: true
-          type: array
+          type: string
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -2538,13 +2535,10 @@ components:
           type: string
         checklists:
           description: 'List of all Checklists of this Camp.'
-          example: '["/checklists/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+          example: 'https://example.com/'
+          format: iri-reference
           readOnly: true
-          type: array
+          type: string
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -2730,13 +2724,10 @@ components:
           type: string
         checklists:
           description: 'List of all Checklists of this Camp.'
-          example: '["/checklists/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+          example: 'https://example.com/'
+          format: iri-reference
           readOnly: true
-          type: array
+          type: string
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -2929,13 +2920,10 @@ components:
           type: string
         checklists:
           description: 'List of all Checklists of this Camp.'
-          example: '["/checklists/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+          example: 'https://example.com/'
+          format: iri-reference
           readOnly: true
-          type: array
+          type: string
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -3540,13 +3528,10 @@ components:
           type: string
         checklists:
           description: 'List of all Checklists of this Camp.'
-          example: '["/checklists/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+          example: 'https://example.com/'
+          format: iri-reference
           readOnly: true
-          type: array
+          type: string
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -3752,13 +3737,10 @@ components:
           type: string
         checklists:
           description: 'List of all Checklists of this Camp.'
-          example: '["/checklists/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+          example: 'https://example.com/'
+          format: iri-reference
           readOnly: true
-          type: array
+          type: string
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -3953,13 +3935,10 @@ components:
           type: string
         checklists:
           description: 'List of all Checklists of this Camp.'
-          example: '["/checklists/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+          example: 'https://example.com/'
+          format: iri-reference
           readOnly: true
-          type: array
+          type: string
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -4161,13 +4140,10 @@ components:
           type: string
         checklists:
           description: 'List of all Checklists of this Camp.'
-          example: '["/checklists/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+          example: 'https://example.com/'
+          format: iri-reference
           readOnly: true
-          type: array
+          type: string
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -4516,13 +4492,10 @@ components:
           type: string
         checklists:
           description: 'List of all Checklists of this Camp.'
-          example: '["/checklists/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+          example: 'https://example.com/'
+          format: iri-reference
           readOnly: true
-          type: array
+          type: string
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -4742,13 +4715,10 @@ components:
           type: string
         checklists:
           description: 'List of all Checklists of this Camp.'
-          example: '["/checklists/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+          example: 'https://example.com/'
+          format: iri-reference
           readOnly: true
-          type: array
+          type: string
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -4957,13 +4927,10 @@ components:
           type: string
         checklists:
           description: 'List of all Checklists of this Camp.'
-          example: '["/checklists/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+          example: 'https://example.com/'
+          format: iri-reference
           readOnly: true
-          type: array
+          type: string
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -5179,13 +5146,10 @@ components:
           type: string
         checklists:
           description: 'List of all Checklists of this Camp.'
-          example: '["/checklists/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+          example: 'https://example.com/'
+          format: iri-reference
           readOnly: true
-          type: array
+          type: string
         coachName:
           description: 'The name of the Y+S coach who is in charge of the camp.'
           example: 'Albert Anderegg'
@@ -7625,13 +7589,10 @@ components:
           type: string
         checklistItems:
           description: 'All ChecklistItems that belong to this Checklist.'
-          example: '["/checklist_items/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+          example: 'https://example.com/'
+          format: iri-reference
           readOnly: true
-          type: array
+          type: string
         id:
           description: 'An internal, unique, randomly generated identifier of this entity.'
           example: 1a2b3c4d
@@ -7766,13 +7727,10 @@ components:
           type: string
         checklistItems:
           description: 'All ChecklistItems that belong to this Checklist.'
-          example: '["/checklist_items/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+          example: 'https://example.com/'
+          format: iri-reference
           readOnly: true
-          type: array
+          type: string
         id:
           description: 'An internal, unique, randomly generated identifier of this entity.'
           example: 1a2b3c4d
@@ -7861,13 +7819,10 @@ components:
           type: string
         checklistItems:
           description: 'All ChecklistItems that belong to this Checklist.'
-          example: '["/checklist_items/1a2b3c4d"]'
-          items:
-            example: 'https://example.com/'
-            format: iri-reference
-            type: string
+          example: 'https://example.com/'
+          format: iri-reference
           readOnly: true
-          type: array
+          type: string
         id:
           description: 'An internal, unique, randomly generated identifier of this entity.'
           example: 1a2b3c4d
@@ -8316,7 +8271,7 @@ components:
       description: ''
       properties:
         checklistItems:
-          description: 'The content types that are most likely to be useful for planning programme of this category.'
+          description: 'List of selected ChecklistItems.'
           example: '["/checklist_items/1a2b3c4d"]'
           items:
             example: 'https://example.com/'
@@ -8564,7 +8519,7 @@ components:
             - 'null'
           writeOnly: true
         checklistItems:
-          description: 'The content types that are most likely to be useful for planning programme of this category.'
+          description: 'List of selected ChecklistItems.'
           example: '["/checklist_items/1a2b3c4d"]'
           items:
             example: 'https://example.com/'
@@ -8683,7 +8638,7 @@ components:
               type: object
           type: object
         checklistItems:
-          description: 'The content types that are most likely to be useful for planning programme of this category.'
+          description: 'List of selected ChecklistItems.'
           example: '["/checklist_items/1a2b3c4d"]'
           items:
             example: 'https://example.com/'
@@ -8890,7 +8845,7 @@ components:
           readOnly: true
           type: string
         checklistItems:
-          description: 'The content types that are most likely to be useful for planning programme of this category.'
+          description: 'List of selected ChecklistItems.'
           example: '["/checklist_items/1a2b3c4d"]'
           items:
             example: 'https://example.com/'
@@ -24325,7 +24280,7 @@ paths:
     get:
       deprecated: false
       description: 'Retrieves the collection of Checklist resources.'
-      operationId: BelongsToCamp_App\Entity\Checklist_get_collection
+      operationId: api_camps_campIdchecklists_get_collection
       parameters:
         -
           allowEmptyValue: false
@@ -25159,7 +25114,7 @@ paths:
     get:
       deprecated: false
       description: 'Retrieves the collection of ChecklistItem resources.'
-      operationId: BelongsToChecklist_App\Entity\ChecklistItem_get_collection
+      operationId: api_checklists_checklistIdchecklist_items_get_collection
       parameters:
         -
           allowEmptyValue: false
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/performance_test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/performance_test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
index fdc9790ac3..00d3d68b59 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/performance_test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/performance_test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
@@ -4,10 +4,10 @@
 /activity_progress_labels/item: 7
 /activity_responsibles: 6
 /activity_responsibles/item: 8
-/camps: 39
-/camps/item: 32
-/camp_collaborations: 25
-/camp_collaborations/item: 25
+/camps: 36
+/camps/item: 31
+/camp_collaborations: 22
+/camp_collaborations/item: 24
 /categories: 11
 /categories/item: 9
 /checklists: 6
@@ -25,7 +25,7 @@
 /material_lists: 6
 /material_lists/item: 7
 /periods: 6
-/periods/item: 28
+/periods/item: 27
 /profiles: 6
 /profiles/item: 6
 /schedule_entries: 23
@@ -34,8 +34,8 @@
 '/activities?camp=': 213
 '/activity_progress_labels?camp=': 6
 '/activity_responsibles?activity.camp=': 6
-'/camp_collaborations?camp=': 13
-'/camp_collaborations?activityResponsibles.activity=': 25
+'/camp_collaborations?camp=': 12
+'/camp_collaborations?activityResponsibles.activity=': 24
 '/categories?camp=': 9
 '/content_types?categories=': 6
 '/day_responsibles?day.period=': 6
diff --git a/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
index 85260de4e7..31e42033f3 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/test_EndpointPerformanceTest__testPerformanceDidNotChangeForStableEndpoints__1.yml
@@ -4,10 +4,10 @@
 /activity_progress_labels/item: 7
 /activity_responsibles: 6
 /activity_responsibles/item: 8
-/camps: 29
-/camps/item: 22
-/camp_collaborations: 25
-/camp_collaborations/item: 15
+/camps: 26
+/camps/item: 21
+/camp_collaborations: 22
+/camp_collaborations/item: 14
 /categories: 11
 /categories/item: 9
 /checklists: 6
@@ -25,7 +25,7 @@
 /material_lists: 6
 /material_lists/item: 7
 /periods: 6
-/periods/item: 18
+/periods/item: 17
 /profiles: 6
 /profiles/item: 6
 /schedule_entries: 23
@@ -34,8 +34,8 @@
 '/activities?camp=': 13
 '/activity_progress_labels?camp=': 6
 '/activity_responsibles?activity.camp=': 6
-'/camp_collaborations?camp=': 13
-'/camp_collaborations?activityResponsibles.activity=': 15
+'/camp_collaborations?camp=': 12
+'/camp_collaborations?activityResponsibles.activity=': 14
 '/categories?camp=': 9
 '/content_types?categories=': 6
 '/day_responsibles?day.period=': 6

From ec7dab557f159dbb4478bc87e3e25a9c2d98fa59 Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Thu, 8 Aug 2024 19:42:36 +0200
Subject: [PATCH 169/273] UnitTest ChecklistNode can only contain
 ChecklistItems of the same camp

---
 api/src/Entity/ContentNode/ChecklistNode.php  |  2 +
 .../ChecklistItem/AssertBelongsToSameCamp.php | 10 ++++
 .../AssertBelongsToSameCampValidator.php      | 55 +++++++++++++++++++
 .../ChecklistNode/UpdateChecklistNodeTest.php | 14 +++++
 4 files changed, 81 insertions(+)
 create mode 100644 api/src/Validator/ChecklistItem/AssertBelongsToSameCamp.php
 create mode 100644 api/src/Validator/ChecklistItem/AssertBelongsToSameCampValidator.php

diff --git a/api/src/Entity/ContentNode/ChecklistNode.php b/api/src/Entity/ContentNode/ChecklistNode.php
index 433be7ec36..2f6dcc8c39 100644
--- a/api/src/Entity/ContentNode/ChecklistNode.php
+++ b/api/src/Entity/ContentNode/ChecklistNode.php
@@ -15,6 +15,7 @@
 use App\Repository\ChecklistNodeRepository;
 use App\State\ContentNode\ChecklistNodePersistProcessor;
 use App\Util\EntityMap;
+use App\Validator\ChecklistItem\AssertBelongsToSameCamp;
 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\Common\Collections\Collection;
 use Doctrine\ORM\Mapping as ORM;
@@ -62,6 +63,7 @@ class ChecklistNode extends ContentNode {
     #[ORM\OrderBy(['position' => 'ASC'])]
     public Collection $checklistItems;
 
+    #[AssertBelongsToSameCamp(groups: ['update'])]
     #[ApiProperty(example: '["1a2b3c4d"]')]
     #[Groups(['write'])]
     public ?array $addChecklistItemIds = [];
diff --git a/api/src/Validator/ChecklistItem/AssertBelongsToSameCamp.php b/api/src/Validator/ChecklistItem/AssertBelongsToSameCamp.php
new file mode 100644
index 0000000000..e27bffc8d6
--- /dev/null
+++ b/api/src/Validator/ChecklistItem/AssertBelongsToSameCamp.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace App\Validator\ChecklistItem;
+
+use Symfony\Component\Validator\Constraint;
+
+#[\Attribute]
+class AssertBelongsToSameCamp extends Constraint {
+    public string $message = 'Must belong to the same camp.';
+}
diff --git a/api/src/Validator/ChecklistItem/AssertBelongsToSameCampValidator.php b/api/src/Validator/ChecklistItem/AssertBelongsToSameCampValidator.php
new file mode 100644
index 0000000000..7716448fa7
--- /dev/null
+++ b/api/src/Validator/ChecklistItem/AssertBelongsToSameCampValidator.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace App\Validator\ChecklistItem;
+
+use App\Entity\ChecklistItem;
+use App\Entity\ContentNode\ChecklistNode;
+use App\Repository\ChecklistItemRepository;
+use App\Util\GetCampFromContentNodeTrait;
+use Doctrine\ORM\EntityManagerInterface;
+use Symfony\Component\HttpFoundation\RequestStack;
+use Symfony\Component\Validator\Constraint;
+use Symfony\Component\Validator\ConstraintValidator;
+use Symfony\Component\Validator\Exception\UnexpectedTypeException;
+use Symfony\Component\Validator\Exception\UnexpectedValueException;
+
+class AssertBelongsToSameCampValidator extends ConstraintValidator {
+    use GetCampFromContentNodeTrait;
+    
+    public function __construct(
+        public RequestStack $requestStack, 
+        private EntityManagerInterface $em,
+        private ChecklistItemRepository $checklistItemRepository,
+    ) {}
+
+    public function validate($value, Constraint $constraint): void {
+        if (!$constraint instanceof AssertBelongsToSameCamp) {
+            throw new UnexpectedTypeException($constraint, AssertBelongsToSameCamp::class);
+        }
+
+        if (null === $value || '' === $value) {
+            return;
+        }
+
+        if (!is_array($value)) {
+            throw new UnexpectedValueException($value, 'array');
+        }
+
+        $object = $this->context->getObject();
+        if (!$object instanceof ChecklistNode) {
+            throw new UnexpectedValueException($object, ChecklistNode::class);
+        }
+
+        $camp = $this->getCampFromInterface($object, $this->em);
+
+        foreach($value as $checklistItemId) {
+            /** @var ChecklistItem $checklistItem */
+            $checklistItem = $this->checklistItemRepository->find($checklistItemId);
+
+            if ($camp != $checklistItem?->getCamp()) {
+                $this->context->buildViolation($constraint->message)
+                    ->addViolation();
+            }
+        }
+    }
+}
diff --git a/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php b/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php
index a2cd67de89..679348df60 100644
--- a/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php
+++ b/api/tests/Api/ContentNodes/ChecklistNode/UpdateChecklistNodeTest.php
@@ -103,4 +103,18 @@ public function testRemoveChecklistItemForManager() {
         $checklistNode = $this->getEntityManager()->getRepository(ChecklistNode::class)->find($this->defaultEntity->getId());
         $this->assertFalse(in_array($checklistItem, $checklistNode->getChecklistItems()));
     }
+
+    public function testAddChecklistItemOfOtherCampIsDenied() {
+        $checklistItemId = static::getFixture('checklistItem2_1_1')->getId();
+        static::createClientWithCredentials(['email' => static::getFixture('user2member')->getEmail()])
+            ->request('PATCH', $this->endpoint.'/'.$this->defaultEntity->getId(), ['json' => [
+                'addChecklistItemIds' => [$checklistItemId],
+            ], 'headers' => ['Content-Type' => 'application/merge-patch+json']])
+        ;
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'addChecklistItemIds: Must belong to the same camp.',
+        ]);
+    }
 }

From 8e4c74a249cdb87b8036b4f0990c2a8da59bc68b Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Thu, 8 Aug 2024 19:45:10 +0200
Subject: [PATCH 170/273] changes according to review

---
 api/src/Entity/Checklist.php | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/api/src/Entity/Checklist.php b/api/src/Entity/Checklist.php
index 336177e806..1746c30021 100644
--- a/api/src/Entity/Checklist.php
+++ b/api/src/Entity/Checklist.php
@@ -35,9 +35,7 @@
             security: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)'
         ),
         new Delete(
-            security: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)',
-            validate: true,
-            validationContext: ['groups' => ['delete']]
+            security: 'is_granted("CAMP_MEMBER", object) or is_granted("CAMP_MANAGER", object)'
         ),
         new GetCollection(
             security: 'is_authenticated()'

From 0c53873ed752dd3b69cc240d64dd6774e705b4fd Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Thu, 8 Aug 2024 20:10:57 +0200
Subject: [PATCH 171/273] UnitTest ChecklistItem NoParentLoop

---
 api/src/Entity/ChecklistItem.php              |  4 ++--
 .../UpdateChecklistItemTest.php               | 22 +++++++++++++++++++
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/api/src/Entity/ChecklistItem.php b/api/src/Entity/ChecklistItem.php
index 9317985251..4a414832b5 100644
--- a/api/src/Entity/ChecklistItem.php
+++ b/api/src/Entity/ChecklistItem.php
@@ -83,8 +83,8 @@ class ChecklistItem extends BaseEntity implements BelongsToCampInterface, CopyFr
      * root of a ChecklistItem tree. For non-root ChecklistItems, the parent can be changed, as long
      * as the new parent is in the same checklist as the old one.
      */
-    #[AssertBelongsToSameChecklist(groups: ['update'])]
-    #[AssertNoLoop(groups: ['update'])]
+    #[AssertBelongsToSameChecklist]
+    #[AssertNoLoop]
     #[ApiProperty(example: '/checklist_items/1a2b3c4d')]
     #[Gedmo\SortableGroup]
     #[Groups(['read', 'write'])]
diff --git a/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php b/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php
index 0152401f68..5237deb0bb 100644
--- a/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php
+++ b/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php
@@ -110,6 +110,28 @@ public function testPatchChecklistItemDisallowsChangingChecklist() {
         ]);
     }
 
+    public function testPatchhChecklistItemValidatesNoParentLoop() {
+        $checklistItemParent = static::getFixture('checklistItem1_1_2');
+        $checklistItemChild = static::getFixture('checklistItem1_1_2_3');
+
+        static::createClientWithCredentials()->request(
+            'PATCH',
+            '/checklist_items/'.$checklistItemParent->getId(),
+            [
+                'json' => [
+                    'parent' => '/checklist_items/'.$checklistItemChild->getId(),
+                ],
+                'headers' => ['Content-Type' => 'application/merge-patch+json'],
+            ]
+        );
+        
+        $this->assertResponseStatusCodeSame(422);
+        $this->assertJsonContains([
+            'title' => 'An error occurred',
+            'detail' => 'parent: Must not form a loop of parent-child relations.',
+        ]);
+    }
+
     public function testPatchChecklistItemValidatesNullText() {
         $checklistItem = static::getFixture('checklistItem1_1_1');
         static::createClientWithCredentials()->request(

From 486df2053d9369b755ed0e10b4029d4db453cab3 Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Thu, 8 Aug 2024 20:14:43 +0200
Subject: [PATCH 172/273] cs-fix; phpstan

---
 .../AssertBelongsToSameCampValidator.php              | 11 ++++++-----
 .../Api/ChecklistItems/UpdateChecklistItemTest.php    |  2 +-
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/api/src/Validator/ChecklistItem/AssertBelongsToSameCampValidator.php b/api/src/Validator/ChecklistItem/AssertBelongsToSameCampValidator.php
index 7716448fa7..373471ef3b 100644
--- a/api/src/Validator/ChecklistItem/AssertBelongsToSameCampValidator.php
+++ b/api/src/Validator/ChecklistItem/AssertBelongsToSameCampValidator.php
@@ -15,9 +15,9 @@
 
 class AssertBelongsToSameCampValidator extends ConstraintValidator {
     use GetCampFromContentNodeTrait;
-    
+
     public function __construct(
-        public RequestStack $requestStack, 
+        public RequestStack $requestStack,
         private EntityManagerInterface $em,
         private ChecklistItemRepository $checklistItemRepository,
     ) {}
@@ -42,13 +42,14 @@ public function validate($value, Constraint $constraint): void {
 
         $camp = $this->getCampFromInterface($object, $this->em);
 
-        foreach($value as $checklistItemId) {
-            /** @var ChecklistItem $checklistItem */
+        foreach ($value as $checklistItemId) {
+            /** @var ?ChecklistItem $checklistItem */
             $checklistItem = $this->checklistItemRepository->find($checklistItemId);
 
             if ($camp != $checklistItem?->getCamp()) {
                 $this->context->buildViolation($constraint->message)
-                    ->addViolation();
+                    ->addViolation()
+                ;
             }
         }
     }
diff --git a/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php b/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php
index 5237deb0bb..24462d3c0e 100644
--- a/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php
+++ b/api/tests/Api/ChecklistItems/UpdateChecklistItemTest.php
@@ -124,7 +124,7 @@ public function testPatchhChecklistItemValidatesNoParentLoop() {
                 'headers' => ['Content-Type' => 'application/merge-patch+json'],
             ]
         );
-        
+
         $this->assertResponseStatusCodeSame(422);
         $this->assertJsonContains([
             'title' => 'An error occurred',

From 09645d1b9a0075e9709f9131ec4dbf523e1a7f30 Mon Sep 17 00:00:00 2001
From: Manuel Meister <news.manuelsworld@gmail.com>
Date: Tue, 27 Aug 2024 19:41:38 +0200
Subject: [PATCH 173/273] Fix new phpstan lint error

---
 api/src/Doctrine/Filter/ExpressionDateTimeFilter.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/api/src/Doctrine/Filter/ExpressionDateTimeFilter.php b/api/src/Doctrine/Filter/ExpressionDateTimeFilter.php
index 7b99c5411f..f43f91cafc 100644
--- a/api/src/Doctrine/Filter/ExpressionDateTimeFilter.php
+++ b/api/src/Doctrine/Filter/ExpressionDateTimeFilter.php
@@ -174,7 +174,7 @@ protected function compileExpression(
         // Add joins for all {xyz.abc} property references in the expression
         $matches = [];
         if (preg_match_all('/\{([^\}]+\.[^\}]+)\}/', $expression, $matches)) {
-            $relations = array_unique($matches[1] ?? []);
+            $relations = array_unique($matches[1]);
 
             // Replace each instance of {xyz.abc} with its respective joined alias
             foreach ($relations as $relation) {

From 137bd608300a1130135c58ee9fdc3f4f1fdfdfa6 Mon Sep 17 00:00:00 2001
From: Pirmin Mattmann <pimattmann@gmail.com>
Date: Tue, 27 Aug 2024 19:42:32 +0200
Subject: [PATCH 174/273] update snapshot

---
 ...nseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
index 514ed229e7..857a635857 100644
--- a/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
+++ b/api/tests/Api/SnapshotTests/__snapshots__/ResponseSnapshotTest__testOpenApiSpecMatchesSnapshot__1.yml
@@ -8297,7 +8297,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -8547,7 +8547,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -8664,7 +8664,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:
@@ -8871,7 +8871,7 @@ components:
           type: string
         contentTypeName:
           description: 'The name of the content type of this content node. Read-only, for convenience.'
-          example: SafetyConcept
+          example: SafetyConsiderations
           readOnly: true
           type: string
         data:

From d413c83247ccaf3a8d99ec19f0033aec2d762f8f Mon Sep 17 00:00:00 2001
From: Urban Suppiger <urban@suppiger.net>
Date: Tue, 27 Aug 2024 21:44:06 +0200
Subject: [PATCH 175/273] migrate to @nuxt/eslint

---
 print/nuxt.config.js    |    2 +-
 print/package-lock.json | 1416 ++++++++++++++++++++++++++++++++-------
 print/package.json      |    5 +-
 3 files changed, 1178 insertions(+), 245 deletions(-)

diff --git a/print/nuxt.config.js b/print/nuxt.config.js
index ac6ffa951e..38aa28a265 100644
--- a/print/nuxt.config.js
+++ b/print/nuxt.config.js
@@ -21,7 +21,7 @@ export default defineNuxtConfig({
 
   modules: [
     // Doc: https://github.com/nuxt-community/eslint-module
-    '@nuxtjs/eslint-module',
+    '@nuxt/eslint',
 
     // Doc: https://sentry.nuxtjs.org/guide/usage
     // Support for Nuxt3 not yet implemented: https://github.com/nuxt-community/sentry-module/issues/619
diff --git a/print/package-lock.json b/print/package-lock.json
index 6f84789692..ea0a2f827b 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -24,8 +24,8 @@
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.1",
+        "@nuxt/eslint": "0.5.3",
         "@nuxt/eslint-config": "0.5.3",
-        "@nuxtjs/eslint-module": "4.1.0",
         "@nuxtjs/i18n": "8.5.1",
         "@nuxtjs/tailwindcss": "6.12.1",
         "@tailwindcss/typography": "0.5.14",
@@ -47,6 +47,7 @@
         "nuxt": "3.13.0",
         "prettier": "3.3.3",
         "sass": "1.69.4",
+        "vite-plugin-eslint2": "4.4.0",
         "vite-svg-loader": "5.1.0",
         "vitest": "2.0.5",
         "vue": "3.4.38"
@@ -89,6 +90,24 @@
         "url": "https://github.com/sponsors/antfu"
       }
     },
+    "node_modules/@apidevtools/json-schema-ref-parser": {
+      "version": "11.7.0",
+      "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.7.0.tgz",
+      "integrity": "sha512-pRrmXMCwnmrkS3MLgAIW5dXRzeTv6GLjkjb4HmxNnvAKXN1Nfzp4KmGADBQvlVUcqi+a5D+hfGDLLnd5NnYxog==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@jsdevtools/ono": "^7.1.3",
+        "@types/json-schema": "^7.0.15",
+        "js-yaml": "^4.1.0"
+      },
+      "engines": {
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/philsturgeon"
+      }
+    },
     "node_modules/@babel/code-frame": {
       "version": "7.24.7",
       "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz",
@@ -1210,31 +1229,22 @@
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
-    "node_modules/@eslint/eslintrc": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
-      "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
+    "node_modules/@eslint/config-array": {
+      "version": "0.17.1",
+      "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.1.tgz",
+      "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==",
       "dev": true,
-      "license": "MIT",
+      "license": "Apache-2.0",
       "dependencies": {
-        "ajv": "^6.12.4",
-        "debug": "^4.3.2",
-        "espree": "^10.0.1",
-        "globals": "^14.0.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.2.1",
-        "js-yaml": "^4.1.0",
-        "minimatch": "^3.1.2",
-        "strip-json-comments": "^3.1.1"
+        "@eslint/object-schema": "^2.1.4",
+        "debug": "^4.3.1",
+        "minimatch": "^3.1.2"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+    "node_modules/@eslint/config-array/node_modules/brace-expansion": {
       "version": "1.1.11",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
@@ -1245,20 +1255,7 @@
         "concat-map": "0.0.1"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/globals": {
-      "version": "14.0.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
-      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+    "node_modules/@eslint/config-array/node_modules/minimatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
       "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
@@ -1271,154 +1268,811 @@
         "node": "*"
       }
     },
-    "node_modules/@eslint/js": {
-      "version": "9.9.1",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
-      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
+    "node_modules/@eslint/config-inspector": {
+      "version": "0.5.4",
+      "resolved": "https://registry.npmjs.org/@eslint/config-inspector/-/config-inspector-0.5.4.tgz",
+      "integrity": "sha512-WB/U/B6HdRiIt/CfbcqqFp7Svz+3INLtnGcuMT2hnU39S3cb9JGGkvB1T6lbIlDoQ9VRnhc4riIFFoicGRZ2mw==",
       "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@eslint/config-array": "^0.17.1",
+        "@voxpelli/config-array-find-files": "^0.1.2",
+        "bundle-require": "^5.0.0",
+        "cac": "^6.7.14",
+        "chokidar": "^3.6.0",
+        "esbuild": "^0.21.5",
+        "fast-glob": "^3.3.2",
+        "find-up": "^7.0.0",
+        "get-port-please": "^3.1.2",
+        "h3": "^1.12.0",
+        "minimatch": "^9.0.5",
+        "mlly": "^1.7.1",
+        "mrmime": "^2.0.0",
+        "open": "^10.1.0",
+        "picocolors": "^1.0.1",
+        "ws": "^8.18.0"
+      },
+      "bin": {
+        "config-inspector": "bin.mjs",
+        "eslint-config-inspector": "bin.mjs"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^8.50.0 || ^9.0.0"
       }
     },
-    "node_modules/@fastify/busboy": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
-      "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/aix-ppc64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+      "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+      "cpu": [
+        "ppc64"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "aix"
+      ],
       "engines": {
-        "node": ">=14"
+        "node": ">=12"
       }
     },
-    "node_modules/@humanwhocodes/config-array": {
-      "version": "0.11.14",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
-      "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
-      "deprecated": "Use @eslint/config-array instead",
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/android-arm": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+      "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+      "cpu": [
+        "arm"
+      ],
       "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@humanwhocodes/object-schema": "^2.0.2",
-        "debug": "^4.3.1",
-        "minimatch": "^3.0.5"
-      },
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": ">=10.10.0"
+        "node": ">=12"
       }
     },
-    "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/android-arm64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+      "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": "*"
+        "node": ">=12"
       }
     },
-    "node_modules/@humanwhocodes/module-importer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
-      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/android-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+      "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "Apache-2.0",
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": ">=12.22"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/nzakas"
+        "node": ">=12"
       }
     },
-    "node_modules/@humanwhocodes/object-schema": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
-      "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
-      "deprecated": "Use @eslint/object-schema instead",
-      "dev": true,
-      "license": "BSD-3-Clause"
-    },
-    "node_modules/@intlify/bundle-utils": {
-      "version": "7.5.1",
-      "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-7.5.1.tgz",
-      "integrity": "sha512-UovJl10oBIlmYEcWw+VIHdKY5Uv5sdPG0b/b6bOYxGLln3UwB75+2dlc0F3Fsa0RhoznQ5Rp589/BZpABpE4Xw==",
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/darwin-arm64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+      "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@intlify/message-compiler": "^9.4.0",
-        "@intlify/shared": "^9.4.0",
-        "acorn": "^8.8.2",
-        "escodegen": "^2.1.0",
-        "estree-walker": "^2.0.2",
-        "jsonc-eslint-parser": "^2.3.0",
-        "magic-string": "^0.30.0",
-        "mlly": "^1.2.0",
-        "source-map-js": "^1.0.1",
-        "yaml-eslint-parser": "^1.2.2"
-      },
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": ">= 14.16"
-      },
-      "peerDependenciesMeta": {
-        "petite-vue-i18n": {
-          "optional": true
-        },
-        "vue-i18n": {
-          "optional": true
-        }
+        "node": ">=12"
       }
     },
-    "node_modules/@intlify/bundle-utils/node_modules/estree-walker": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@intlify/core": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.13.1.tgz",
-      "integrity": "sha512-R+l9DRqzfK0yT9UgaCq3sl24NJAP4f/djAu4z9zLknAUBEal2q/tXFV+oGzcGpvi3uXWNvF9Gctj+IsuPwJjoA==",
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/darwin-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+      "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@intlify/core-base": "9.13.1",
-        "@intlify/shared": "9.13.1"
-      },
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": ">= 16"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/kazupon"
+        "node": ">=12"
       }
     },
-    "node_modules/@intlify/core-base": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.13.1.tgz",
-      "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+      "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@intlify/message-compiler": "9.13.1",
-        "@intlify/shared": "9.13.1"
-      },
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
       "engines": {
-        "node": ">= 16"
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/freebsd-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+      "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-arm": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+      "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-arm64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+      "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-ia32": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+      "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-loong64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+      "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-mips64el": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+      "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+      "cpu": [
+        "mips64el"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-ppc64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+      "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-riscv64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+      "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-s390x": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+      "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+      "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/netbsd-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+      "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/openbsd-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+      "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/sunos-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+      "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/win32-arm64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+      "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/win32-ia32": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+      "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/@esbuild/win32-x64": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+      "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/define-lazy-prop": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+      "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/esbuild": {
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+      "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+      "dev": true,
+      "hasInstallScript": true,
+      "license": "MIT",
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.21.5",
+        "@esbuild/android-arm": "0.21.5",
+        "@esbuild/android-arm64": "0.21.5",
+        "@esbuild/android-x64": "0.21.5",
+        "@esbuild/darwin-arm64": "0.21.5",
+        "@esbuild/darwin-x64": "0.21.5",
+        "@esbuild/freebsd-arm64": "0.21.5",
+        "@esbuild/freebsd-x64": "0.21.5",
+        "@esbuild/linux-arm": "0.21.5",
+        "@esbuild/linux-arm64": "0.21.5",
+        "@esbuild/linux-ia32": "0.21.5",
+        "@esbuild/linux-loong64": "0.21.5",
+        "@esbuild/linux-mips64el": "0.21.5",
+        "@esbuild/linux-ppc64": "0.21.5",
+        "@esbuild/linux-riscv64": "0.21.5",
+        "@esbuild/linux-s390x": "0.21.5",
+        "@esbuild/linux-x64": "0.21.5",
+        "@esbuild/netbsd-x64": "0.21.5",
+        "@esbuild/openbsd-x64": "0.21.5",
+        "@esbuild/sunos-x64": "0.21.5",
+        "@esbuild/win32-arm64": "0.21.5",
+        "@esbuild/win32-ia32": "0.21.5",
+        "@esbuild/win32-x64": "0.21.5"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/find-up": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz",
+      "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "locate-path": "^7.2.0",
+        "path-exists": "^5.0.0",
+        "unicorn-magic": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/locate-path": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+      "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-locate": "^6.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/open": {
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz",
+      "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "default-browser": "^5.2.1",
+        "define-lazy-prop": "^3.0.0",
+        "is-inside-container": "^1.0.0",
+        "is-wsl": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/p-limit": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+      "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "yocto-queue": "^1.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/p-locate": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+      "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-limit": "^4.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/path-exists": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+      "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
+    "node_modules/@eslint/config-inspector/node_modules/yocto-queue": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
+      "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12.20"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@eslint/eslintrc": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+      "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^10.0.1",
+        "globals": "^14.0.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/globals": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/@eslint/js": {
+      "version": "9.9.1",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
+      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/@eslint/object-schema": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
+      "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      }
+    },
+    "node_modules/@fastify/busboy": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
+      "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@humanwhocodes/config-array": {
+      "version": "0.11.14",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+      "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+      "deprecated": "Use @eslint/config-array instead",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@humanwhocodes/object-schema": "^2.0.2",
+        "debug": "^4.3.1",
+        "minimatch": "^3.0.5"
+      },
+      "engines": {
+        "node": ">=10.10.0"
+      }
+    },
+    "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/@humanwhocodes/module-importer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=12.22"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
+      }
+    },
+    "node_modules/@humanwhocodes/object-schema": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+      "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+      "deprecated": "Use @eslint/object-schema instead",
+      "dev": true,
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@intlify/bundle-utils": {
+      "version": "7.5.1",
+      "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-7.5.1.tgz",
+      "integrity": "sha512-UovJl10oBIlmYEcWw+VIHdKY5Uv5sdPG0b/b6bOYxGLln3UwB75+2dlc0F3Fsa0RhoznQ5Rp589/BZpABpE4Xw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/message-compiler": "^9.4.0",
+        "@intlify/shared": "^9.4.0",
+        "acorn": "^8.8.2",
+        "escodegen": "^2.1.0",
+        "estree-walker": "^2.0.2",
+        "jsonc-eslint-parser": "^2.3.0",
+        "magic-string": "^0.30.0",
+        "mlly": "^1.2.0",
+        "source-map-js": "^1.0.1",
+        "yaml-eslint-parser": "^1.2.2"
+      },
+      "engines": {
+        "node": ">= 14.16"
+      },
+      "peerDependenciesMeta": {
+        "petite-vue-i18n": {
+          "optional": true
+        },
+        "vue-i18n": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@intlify/bundle-utils/node_modules/estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@intlify/core": {
+      "version": "9.13.1",
+      "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.13.1.tgz",
+      "integrity": "sha512-R+l9DRqzfK0yT9UgaCq3sl24NJAP4f/djAu4z9zLknAUBEal2q/tXFV+oGzcGpvi3uXWNvF9Gctj+IsuPwJjoA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/core-base": "9.13.1",
+        "@intlify/shared": "9.13.1"
+      },
+      "engines": {
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
+      }
+    },
+    "node_modules/@intlify/core-base": {
+      "version": "9.13.1",
+      "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.13.1.tgz",
+      "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/message-compiler": "9.13.1",
+        "@intlify/shared": "9.13.1"
+      },
+      "engines": {
+        "node": ">= 16"
       },
       "funding": {
         "url": "https://github.com/sponsors/kazupon"
@@ -1600,6 +2254,8 @@
       "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "@sinclair/typebox": "^0.27.8"
       },
@@ -1613,6 +2269,8 @@
       "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "@jest/schemas": "^29.6.3",
         "@types/istanbul-lib-coverage": "^2.0.0",
@@ -1688,6 +2346,13 @@
         "@jridgewell/sourcemap-codec": "^1.4.14"
       }
     },
+    "node_modules/@jsdevtools/ono": {
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
+      "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/@koa/router": {
       "version": "12.0.1",
       "resolved": "https://registry.npmjs.org/@koa/router/-/router-12.0.1.tgz",
@@ -2026,6 +2691,41 @@
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
+    "node_modules/@nuxt/eslint": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint/-/eslint-0.5.3.tgz",
+      "integrity": "sha512-v5qhTou69hHEC0UmxJAPBS9h6fXVpyzCYIicEx6CyTbgYB6Vf1XJ5nSMVjWrgDu5LmUJ9tAEYvVRRmVQ3gxMIg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint/config-inspector": "^0.5.4",
+        "@nuxt/devtools-kit": "^1.4.1",
+        "@nuxt/eslint-config": "0.5.3",
+        "@nuxt/eslint-plugin": "0.5.3",
+        "@nuxt/kit": "^3.13.0",
+        "chokidar": "^3.6.0",
+        "eslint-flat-config-utils": "^0.3.1",
+        "eslint-typegen": "^0.3.1",
+        "find-up": "^7.0.0",
+        "get-port-please": "^3.1.2",
+        "mlly": "^1.7.1",
+        "pathe": "^1.1.2",
+        "unimport": "^3.11.1"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0",
+        "eslint-webpack-plugin": "^4.1.0",
+        "vite-plugin-eslint2": "^4.4.0"
+      },
+      "peerDependenciesMeta": {
+        "eslint-webpack-plugin": {
+          "optional": true
+        },
+        "vite-plugin-eslint2": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@nuxt/eslint-config": {
       "version": "0.5.3",
       "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.3.tgz",
@@ -2052,22 +2752,126 @@
         "tslib": "^2.7.0",
         "vue-eslint-parser": "^9.4.3"
       },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0"
+      }
+    },
+    "node_modules/@nuxt/eslint-plugin": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.3.tgz",
+      "integrity": "sha512-Qcm33Jv+BIQNreSyG0Rold64iL0VBTaL6s+dh2/88UwKknnb5GWnkP19Op7+w1xkl74okky6LIPkHPSJq3Ue7A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "^8.3.0",
+        "@typescript-eslint/utils": "^8.3.0"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0"
+      }
+    },
+    "node_modules/@nuxt/eslint/node_modules/@nuxt/devtools-kit": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.4.1.tgz",
+      "integrity": "sha512-6h7T9B0tSZVap13/hf7prEAgIzraj/kyux6/Iif455Trew96jHIFCCboBApUMastYEuCo3l17tgZKe0HW+jrtA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nuxt/kit": "^3.13.0",
+        "@nuxt/schema": "^3.13.0",
+        "execa": "^7.2.0"
+      },
+      "peerDependencies": {
+        "vite": "*"
+      }
+    },
+    "node_modules/@nuxt/eslint/node_modules/find-up": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz",
+      "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "locate-path": "^7.2.0",
+        "path-exists": "^5.0.0",
+        "unicorn-magic": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@nuxt/eslint/node_modules/locate-path": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+      "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-locate": "^6.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@nuxt/eslint/node_modules/p-limit": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+      "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "yocto-queue": "^1.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/@nuxt/eslint-plugin": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.3.tgz",
-      "integrity": "sha512-Qcm33Jv+BIQNreSyG0Rold64iL0VBTaL6s+dh2/88UwKknnb5GWnkP19Op7+w1xkl74okky6LIPkHPSJq3Ue7A==",
+    "node_modules/@nuxt/eslint/node_modules/p-locate": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+      "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "^8.3.0",
-        "@typescript-eslint/utils": "^8.3.0"
+        "p-limit": "^4.0.0"
       },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@nuxt/eslint/node_modules/path-exists": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+      "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
+    "node_modules/@nuxt/eslint/node_modules/yocto-queue": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
+      "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12.20"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/@nuxt/kit": {
@@ -2216,23 +3020,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/@nuxtjs/eslint-module": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/@nuxtjs/eslint-module/-/eslint-module-4.1.0.tgz",
-      "integrity": "sha512-lW9ozEjOrnU8Uot3GOAZ/0ThNAds0d6UAp9n46TNxcTvH/MOcAggGbMNs16c0HYT2HlyPQvXORCHQ5+9p87mmw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nuxt/kit": "^3.5.0",
-        "chokidar": "^3.5.3",
-        "eslint-webpack-plugin": "^4.0.1",
-        "pathe": "^1.1.0",
-        "vite-plugin-eslint": "^1.8.1"
-      },
-      "peerDependencies": {
-        "eslint": ">=7"
-      }
-    },
     "node_modules/@nuxtjs/i18n": {
       "version": "8.5.1",
       "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.5.1.tgz",
@@ -3719,7 +4506,9 @@
       "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
       "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true,
+      "peer": true
     },
     "node_modules/@sindresorhus/merge-streams": {
       "version": "2.3.0",
@@ -3905,6 +4694,7 @@
       "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@types/eslint": "*",
@@ -3933,7 +4723,9 @@
       "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
       "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true,
+      "peer": true
     },
     "node_modules/@types/istanbul-lib-report": {
       "version": "3.0.3",
@@ -3941,6 +4733,8 @@
       "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "@types/istanbul-lib-coverage": "*"
       }
@@ -3951,6 +4745,8 @@
       "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "@types/istanbul-lib-report": "*"
       }
@@ -4032,6 +4828,8 @@
       "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "@types/yargs-parser": "*"
       }
@@ -4041,7 +4839,9 @@
       "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
       "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true,
+      "peer": true
     },
     "node_modules/@types/yauzl": {
       "version": "2.10.3",
@@ -4588,6 +5388,60 @@
         "url": "https://opencollective.com/vitest"
       }
     },
+    "node_modules/@voxpelli/config-array-find-files": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/@voxpelli/config-array-find-files/-/config-array-find-files-0.1.2.tgz",
+      "integrity": "sha512-jOva73R+0Nc5/pyS/piBSjQzO4EehME7rPSkBpPC9PYSta+yj3OpF14v0m0HLLYLVNuyHbBjQh5QvGIZwTH2eA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.walk": "^2.0.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "peerDependencies": {
+        "@eslint/config-array": ">=0.16.0"
+      }
+    },
+    "node_modules/@voxpelli/config-array-find-files/node_modules/@nodelib/fs.scandir": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-3.0.0.tgz",
+      "integrity": "sha512-ktI9+PxfHYtKjF3cLTUAh2N+b8MijCRPNwKJNqTVdL0gB0QxLU2rIRaZ1t71oEa3YBDE6bukH1sR0+CDnpp/Mg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "3.0.0",
+        "run-parallel": "^1.2.0"
+      },
+      "engines": {
+        "node": ">=16.14.0"
+      }
+    },
+    "node_modules/@voxpelli/config-array-find-files/node_modules/@nodelib/fs.stat": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-3.0.0.tgz",
+      "integrity": "sha512-2tQOI38s19P9i7X/Drt0v8iMA+KMsgdhB/dyPER+e+2Y8L1Z7QvnuRdW/uLuf5YRFUYmnj4bMA6qCuZHFI1GDQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=16.14.0"
+      }
+    },
+    "node_modules/@voxpelli/config-array-find-files/node_modules/@nodelib/fs.walk": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-2.0.0.tgz",
+      "integrity": "sha512-54voNDBobGdMl3BUXSu7UaDh1P85PGHWlJ5e0XhPugo1JulOyCtp2I+5ri4wplGDJ8QGwPEQW7/x3yTLU7yF1A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.scandir": "3.0.0",
+        "fastq": "^1.15.0"
+      },
+      "engines": {
+        "node": ">=16.14.0"
+      }
+    },
     "node_modules/@vue-macros/common": {
       "version": "1.12.2",
       "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.12.2.tgz",
@@ -4887,6 +5741,7 @@
       "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@webassemblyjs/helper-numbers": "1.11.6",
@@ -4899,6 +5754,7 @@
       "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true
     },
     "node_modules/@webassemblyjs/helper-api-error": {
@@ -4907,6 +5763,7 @@
       "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true
     },
     "node_modules/@webassemblyjs/helper-buffer": {
@@ -4915,6 +5772,7 @@
       "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true
     },
     "node_modules/@webassemblyjs/helper-numbers": {
@@ -4923,6 +5781,7 @@
       "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@webassemblyjs/floating-point-hex-parser": "1.11.6",
@@ -4936,6 +5795,7 @@
       "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true
     },
     "node_modules/@webassemblyjs/helper-wasm-section": {
@@ -4944,6 +5804,7 @@
       "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@webassemblyjs/ast": "1.12.1",
@@ -4958,6 +5819,7 @@
       "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@xtuc/ieee754": "^1.2.0"
@@ -4969,6 +5831,7 @@
       "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
       "dev": true,
       "license": "Apache-2.0",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@xtuc/long": "4.2.2"
@@ -4980,6 +5843,7 @@
       "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true
     },
     "node_modules/@webassemblyjs/wasm-edit": {
@@ -4988,6 +5852,7 @@
       "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@webassemblyjs/ast": "1.12.1",
@@ -5006,6 +5871,7 @@
       "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@webassemblyjs/ast": "1.12.1",
@@ -5021,6 +5887,7 @@
       "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@webassemblyjs/ast": "1.12.1",
@@ -5035,6 +5902,7 @@
       "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@webassemblyjs/ast": "1.12.1",
@@ -5051,6 +5919,7 @@
       "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@webassemblyjs/ast": "1.12.1",
@@ -5063,6 +5932,7 @@
       "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
       "dev": true,
       "license": "BSD-3-Clause",
+      "optional": true,
       "peer": true
     },
     "node_modules/@xtuc/long": {
@@ -5071,6 +5941,7 @@
       "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
       "dev": true,
       "license": "Apache-2.0",
+      "optional": true,
       "peer": true
     },
     "node_modules/abbrev": {
@@ -5186,6 +6057,8 @@
       "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "ajv": "^8.0.0"
       },
@@ -5204,6 +6077,8 @@
       "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "fast-deep-equal": "^3.1.3",
         "fast-uri": "^3.0.1",
@@ -5220,7 +6095,9 @@
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
       "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true,
+      "peer": true
     },
     "node_modules/ajv-keywords": {
       "version": "3.5.2",
@@ -5228,6 +6105,7 @@
       "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "peerDependencies": {
         "ajv": "^6.9.1"
@@ -5826,6 +6704,22 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/bundle-require": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.0.0.tgz",
+      "integrity": "sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "load-tsconfig": "^0.2.3"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "esbuild": ">=0.18"
+      }
+    },
     "node_modules/c12": {
       "version": "1.11.1",
       "resolved": "https://registry.npmjs.org/c12/-/c12-1.11.1.tgz",
@@ -6031,6 +6925,7 @@
       "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "engines": {
         "node": ">=6.0"
@@ -7825,6 +8720,24 @@
         "url": "https://opencollective.com/eslint"
       }
     },
+    "node_modules/eslint-typegen": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/eslint-typegen/-/eslint-typegen-0.3.1.tgz",
+      "integrity": "sha512-D1hMMOuQw+WmN1uMk5lDfc9XCgOZMRlvOWwQfME6dyAgJqxGJ/STEyN7YBmt3zMqKkN7XJJ+4mjB82JcR4s/UA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@types/eslint": "^9.6.0",
+        "json-schema-to-typescript-lite": "^14.1.0",
+        "ohash": "^1.1.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "eslint": "^8.45.0 || ^9.0.0"
+      }
+    },
     "node_modules/eslint-visitor-keys": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
@@ -7844,6 +8757,8 @@
       "integrity": "sha512-rsfpFQ01AWQbqtjgPRr2usVRxhWDuG0YDYcG8DJOteD3EFnpeuYuOwk0PQiN7PRBTqS6ElNdtPZPggj8If9WnA==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "@types/eslint": "^8.56.10",
         "jest-worker": "^29.7.0",
@@ -7869,6 +8784,8 @@
       "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "@types/estree": "*",
         "@types/json-schema": "*"
@@ -8265,7 +9182,9 @@
       "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
       "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true,
+      "peer": true
     },
     "node_modules/fastq": {
       "version": "1.17.1",
@@ -8743,6 +9662,7 @@
       "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
       "dev": true,
       "license": "BSD-2-Clause",
+      "optional": true,
       "peer": true
     },
     "node_modules/global-directory": {
@@ -9676,6 +10596,8 @@
       "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "@jest/types": "^29.6.3",
         "@types/node": "*",
@@ -9700,6 +10622,8 @@
         }
       ],
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "engines": {
         "node": ">=8"
       }
@@ -9710,6 +10634,8 @@
       "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "@types/node": "*",
         "jest-util": "^29.7.0",
@@ -9726,6 +10652,8 @@
       "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "has-flag": "^4.0.0"
       },
@@ -9890,6 +10818,17 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/json-schema-to-typescript-lite": {
+      "version": "14.1.0",
+      "resolved": "https://registry.npmjs.org/json-schema-to-typescript-lite/-/json-schema-to-typescript-lite-14.1.0.tgz",
+      "integrity": "sha512-b8K6P3aiLgiYKYcHacgZKrwPXPyjekqRPV5vkNfBt0EoohcOSXEbcuGzgi6KQmsAhuy5Mh2KMxofXodRhMxURA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@apidevtools/json-schema-ref-parser": "^11.7.0",
+        "@types/json-schema": "^7.0.15"
+      }
+    },
     "node_modules/json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -10327,12 +11266,23 @@
         "listhen": "bin/listhen.mjs"
       }
     },
+    "node_modules/load-tsconfig": {
+      "version": "0.2.5",
+      "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz",
+      "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      }
+    },
     "node_modules/loader-runner": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
       "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "engines": {
         "node": ">=6.11.5"
@@ -10808,6 +11758,7 @@
       "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true
     },
     "node_modules/netmask": {
@@ -12365,9 +13316,9 @@
       }
     },
     "node_modules/pkg-types": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz",
-      "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz",
+      "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -13887,6 +14838,8 @@
       "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "engines": {
         "node": ">=0.10.0"
       }
@@ -14288,6 +15241,8 @@
       "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "@types/json-schema": "^7.0.9",
         "ajv": "^8.9.0",
@@ -14308,6 +15263,8 @@
       "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "fast-deep-equal": "^3.1.3",
         "fast-uri": "^3.0.1",
@@ -14325,6 +15282,8 @@
       "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "peer": true,
       "dependencies": {
         "fast-deep-equal": "^3.1.3"
       },
@@ -14337,7 +15296,9 @@
       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
       "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true,
+      "peer": true
     },
     "node_modules/scslre": {
       "version": "0.3.0",
@@ -15508,6 +16469,7 @@
       "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@jridgewell/trace-mapping": "^0.3.20",
@@ -15544,6 +16506,7 @@
       "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@types/node": "*",
@@ -15560,6 +16523,7 @@
       "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@types/json-schema": "^7.0.8",
@@ -15580,6 +16544,7 @@
       "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "has-flag": "^4.0.0"
@@ -16024,9 +16989,9 @@
       }
     },
     "node_modules/unimport": {
-      "version": "3.11.0",
-      "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.11.0.tgz",
-      "integrity": "sha512-mPrvWwy+li8TLUeglC7CIREFAbeEMkJ8X2Bhxg4iLdh+HraxjFyxqWv8V+4lzekoGHChx9ofv1qGOfvHBJBl0A==",
+      "version": "3.11.1",
+      "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.11.1.tgz",
+      "integrity": "sha512-DuB1Uoq01LrrXTScxnwOoMSlTXxyKcULguFxbLrMDFcE/CO0ZWHpEiyhovN0mycPt7K6luAHe8laqvwvuoeUPg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -16039,7 +17004,7 @@
         "magic-string": "^0.30.11",
         "mlly": "^1.7.1",
         "pathe": "^1.1.2",
-        "pkg-types": "^1.1.3",
+        "pkg-types": "^1.2.0",
         "scule": "^1.3.0",
         "strip-literal": "^2.1.0",
         "unplugin": "^1.12.2"
@@ -16541,68 +17506,30 @@
         "node": ">=8"
       }
     },
-    "node_modules/vite-plugin-eslint": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/vite-plugin-eslint/-/vite-plugin-eslint-1.8.1.tgz",
-      "integrity": "sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@rollup/pluginutils": "^4.2.1",
-        "@types/eslint": "^8.4.5",
-        "rollup": "^2.77.2"
-      },
-      "peerDependencies": {
-        "eslint": ">=7",
-        "vite": ">=2"
-      }
-    },
-    "node_modules/vite-plugin-eslint/node_modules/@rollup/pluginutils": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
-      "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
+    "node_modules/vite-plugin-eslint2": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/vite-plugin-eslint2/-/vite-plugin-eslint2-4.4.0.tgz",
+      "integrity": "sha512-xy5G4Gj18ke1bO5OS0zgyunkPvPy/vSLJFTyMpGmKGKTlYuuhPad3Xy1PWLuqRMoWnuCoFMf2ST1EGhz89uqrA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "estree-walker": "^2.0.1",
-        "picomatch": "^2.2.2"
+        "@rollup/pluginutils": "^5.1.0",
+        "chokidar": "^3.6.0",
+        "debug": "^4.3.4"
       },
       "engines": {
-        "node": ">= 8.0.0"
-      }
-    },
-    "node_modules/vite-plugin-eslint/node_modules/@types/eslint": {
-      "version": "8.56.11",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz",
-      "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/estree": "*",
-        "@types/json-schema": "*"
-      }
-    },
-    "node_modules/vite-plugin-eslint/node_modules/estree-walker": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/vite-plugin-eslint/node_modules/rollup": {
-      "version": "2.79.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
-      "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
-      "dev": true,
-      "license": "MIT",
-      "bin": {
-        "rollup": "dist/bin/rollup"
+        "node": ">=18"
       },
-      "engines": {
-        "node": ">=10.0.0"
+      "peerDependencies": {
+        "@types/eslint": "^7.0.0 || ^8.0.0 || ^9.0.0-0",
+        "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0-0",
+        "rollup": "^2.0.0 || ^3.0.0 || ^4.0.0",
+        "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0"
       },
-      "optionalDependencies": {
-        "fsevents": "~2.3.2"
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
       }
     },
     "node_modules/vite-plugin-inspect": {
@@ -17516,6 +18443,7 @@
       "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "glob-to-regexp": "^0.4.1",
@@ -17540,6 +18468,7 @@
       "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@types/eslint-scope": "^3.7.3",
@@ -17606,6 +18535,7 @@
       "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
       "dev": true,
       "license": "BSD-2-Clause",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "esrecurse": "^4.3.0",
@@ -17621,6 +18551,7 @@
       "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
       "dev": true,
       "license": "BSD-2-Clause",
+      "optional": true,
       "peer": true,
       "engines": {
         "node": ">=4.0"
@@ -17632,6 +18563,7 @@
       "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
       "dev": true,
       "license": "MIT",
+      "optional": true,
       "peer": true,
       "dependencies": {
         "@types/json-schema": "^7.0.8",
diff --git a/print/package.json b/print/package.json
index 9ecf9b7d10..7115c723db 100644
--- a/print/package.json
+++ b/print/package.json
@@ -33,8 +33,8 @@
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
     "@eslint/js": "9.9.1",
+    "@nuxt/eslint": "0.5.3",
     "@nuxt/eslint-config": "0.5.3",
-    "@nuxtjs/eslint-module": "4.1.0",
     "@nuxtjs/i18n": "8.5.1",
     "@nuxtjs/tailwindcss": "6.12.1",
     "@tailwindcss/typography": "0.5.14",
@@ -56,8 +56,9 @@
     "nuxt": "3.13.0",
     "prettier": "3.3.3",
     "sass": "1.69.4",
-    "vitest": "2.0.5",
+    "vite-plugin-eslint2": "4.4.0",
     "vite-svg-loader": "5.1.0",
+    "vitest": "2.0.5",
     "vue": "3.4.38"
   }
 }

From 743a5caa60dae6d599a3b4d8848be312a639979d Mon Sep 17 00:00:00 2001
From: Urban Suppiger <urban@suppiger.net>
Date: Tue, 27 Aug 2024 22:13:54 +0200
Subject: [PATCH 176/273] fix 'useAsyncData should return a value that is not
 null or undefined'

---
 print/components/PicassoPeriod.vue                         | 2 +-
 print/components/Toc/TocScheduleEntry.vue                  | 2 +-
 print/components/generic/CategoryLabel.vue                 | 2 +-
 print/components/scheduleEntry/ScheduleEntry.vue           | 2 +-
 print/components/scheduleEntry/contentNode/ContentNode.vue | 2 +-
 print/components/scheduleEntry/contentNode/Material.vue    | 2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/print/components/PicassoPeriod.vue b/print/components/PicassoPeriod.vue
index 4f4aebe2b5..6d1bdd27dd 100644
--- a/print/components/PicassoPeriod.vue
+++ b/print/components/PicassoPeriod.vue
@@ -26,7 +26,7 @@ const props = defineProps({
 const { error } = await useAsyncData(
   `PicassoPeriod-${props.period._meta.self}`,
   async () => {
-    await Promise.all([
+    return await Promise.all([
       props.period.scheduleEntries().$loadItems(),
       props.camp
         .activities()
diff --git a/print/components/Toc/TocScheduleEntry.vue b/print/components/Toc/TocScheduleEntry.vue
index 53a7fe5971..d915ed6ae3 100644
--- a/print/components/Toc/TocScheduleEntry.vue
+++ b/print/components/Toc/TocScheduleEntry.vue
@@ -18,7 +18,7 @@ const props = defineProps({
 const { error } = await useAsyncData(
   `TocScheduleEntry-${props.scheduleEntry._meta.self}`,
   async () => {
-    await Promise.all([
+    return await Promise.all([
       props.scheduleEntry._meta.load,
       props.scheduleEntry.activity()._meta.load,
     ])
diff --git a/print/components/generic/CategoryLabel.vue b/print/components/generic/CategoryLabel.vue
index 8df5d05fc2..2a9f7499db 100644
--- a/print/components/generic/CategoryLabel.vue
+++ b/print/components/generic/CategoryLabel.vue
@@ -13,7 +13,7 @@ const props = defineProps({
 })
 
 await useAsyncData(`CategoryLabel-${props.category._meta.self}`, async () => {
-  await Promise.all([props.category._meta.load])
+  return await Promise.all([props.category._meta.load])
 })
 </script>
 
diff --git a/print/components/scheduleEntry/ScheduleEntry.vue b/print/components/scheduleEntry/ScheduleEntry.vue
index 0b354465d8..2b4e17b290 100644
--- a/print/components/scheduleEntry/ScheduleEntry.vue
+++ b/print/components/scheduleEntry/ScheduleEntry.vue
@@ -61,7 +61,7 @@ const props = defineProps({
 const { error } = await useAsyncData(
   `ScheduleEntry-${props.scheduleEntry._meta.self}`,
   async () => {
-    await Promise.all([
+    return await Promise.all([
       props.scheduleEntry._meta.load,
       props.scheduleEntry.activity()._meta.load,
       props.scheduleEntry.activity().rootContentNode()._meta.load,
diff --git a/print/components/scheduleEntry/contentNode/ContentNode.vue b/print/components/scheduleEntry/contentNode/ContentNode.vue
index 649b861126..954462de0c 100644
--- a/print/components/scheduleEntry/contentNode/ContentNode.vue
+++ b/print/components/scheduleEntry/contentNode/ContentNode.vue
@@ -16,7 +16,7 @@ const props = defineProps({
 const { error } = await useAsyncData(
   `ContentNode-${props.contentNode._meta.self}`,
   async () => {
-    await Promise.all([
+    return await Promise.all([
       props.contentNode._meta.load,
       props.contentNode.children().$loadItems(),
       props.contentNode.contentType()._meta.load,
diff --git a/print/components/scheduleEntry/contentNode/Material.vue b/print/components/scheduleEntry/contentNode/Material.vue
index 01e01e1c0e..2def6f1f6f 100644
--- a/print/components/scheduleEntry/contentNode/Material.vue
+++ b/print/components/scheduleEntry/contentNode/Material.vue
@@ -30,7 +30,7 @@ const props = defineProps({
 const { error } = await useAsyncData(
   `ContentNodeMaterial-${props.contentNode._meta.self}`,
   async () => {
-    await props.contentNode.materialItems().$loadItems()
+    return await props.contentNode.materialItems().$loadItems()
   }
 )
 </script>

From 6a89e654dce79ea9e6e5288b42ea7f65b7d79f05 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 27 Aug 2024 20:15:11 +0000
Subject: [PATCH 177/273] Update amazon/aws-cli Docker tag to v2.17.39

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 31deb92209..f7805c1339 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.38
+    image: amazon/aws-cli:2.17.39
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From 95e4b7ebbd07a45afd33f46e4546a7a0d2f6a5a3 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Wed, 17 Jul 2024 18:50:01 +0200
Subject: [PATCH 178/273] reusable-e2e-tests-run.yml: prepare api before
 running tests

Else the api may still be running migrations during the tests.
---
 .github/workflows/reusable-e2e-tests-run.yml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/.github/workflows/reusable-e2e-tests-run.yml b/.github/workflows/reusable-e2e-tests-run.yml
index fe2c719c41..892ed1628a 100644
--- a/.github/workflows/reusable-e2e-tests-run.yml
+++ b/.github/workflows/reusable-e2e-tests-run.yml
@@ -49,6 +49,10 @@ jobs:
           restore-keys: |
             docker-compose-
 
+      - run: docker compose up --wait -d database
+        
+      - run: docker compose run --rm api composer install --prefer-dist --no-progress --no-interaction
+
       # start necessary containers
       - run: docker compose up -d api frontend pdf print browserless database docker-host http-cache mail
 

From b20b74d3eb3c35d882c7c1832e18ccb0d0f9cd88 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Wed, 17 Jul 2024 16:52:43 +0200
Subject: [PATCH 179/273] seperate frankenphp from ingress for local
 development

That we have a more similar setup in development as in prod.
Use the same Caddyfile for dev and prod.

Issue: #5277
---
 .github/workflows/reusable-e2e-tests-run.yml |  2 +-
 api/Dockerfile                               |  4 +-
 api/docker/caddy/Caddyfile                   | 86 ++++++++------------
 api/docker/caddy/Caddyfile.prod              | 59 --------------
 api/docker/varnish/vcl/_config.vcl           |  2 +-
 api/docker/varnish/vcl/default.vcl           |  6 --
 docker-compose.yml                           | 25 ++++--
 print/print.env                              |  2 +-
 reverse-proxy-nginx.conf                     | 70 ++++++++++++++++
 9 files changed, 125 insertions(+), 131 deletions(-)
 delete mode 100644 api/docker/caddy/Caddyfile.prod
 create mode 100644 reverse-proxy-nginx.conf

diff --git a/.github/workflows/reusable-e2e-tests-run.yml b/.github/workflows/reusable-e2e-tests-run.yml
index 892ed1628a..324498a836 100644
--- a/.github/workflows/reusable-e2e-tests-run.yml
+++ b/.github/workflows/reusable-e2e-tests-run.yml
@@ -54,7 +54,7 @@ jobs:
       - run: docker compose run --rm api composer install --prefer-dist --no-progress --no-interaction
 
       # start necessary containers
-      - run: docker compose up -d api frontend pdf print browserless database docker-host http-cache mail
+      - run: docker compose up -d api frontend pdf print browserless database docker-host http-cache mail reverse-proxy
 
       # pull cypress while container are starting up
       - run: docker compose pull e2e
diff --git a/api/Dockerfile b/api/Dockerfile
index 6178a0dcf1..3098dd5626 100644
--- a/api/Dockerfile
+++ b/api/Dockerfile
@@ -48,6 +48,8 @@ RUN set -eux; \
 ###< recipes ###
 
 COPY --link docker/php/conf.d/api-platform.ini $PHP_INI_DIR/conf.d/
+ENV LOG_LEVEL=info
+COPY --link docker/caddy/Caddyfile /etc/caddy/Caddyfile
 COPY --link --chmod=755 docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
 COPY --link --chmod=755 docker/php/migrate-database.sh /usr/local/bin/migrate-database
 
@@ -63,7 +65,6 @@ ENV APP_ENV=dev XDEBUG_MODE=off
 RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"
 
 COPY --link docker/php/conf.d/api-platform.dev.ini $PHP_INI_DIR/conf.d/
-COPY --link docker/caddy/Caddyfile /etc/caddy/Caddyfile
 
 # renovate: datasource=github-tags depName=xdebug/xdebug
 ARG XDEBUG_VERSION=3.3.2
@@ -84,7 +85,6 @@ ENV APP_ENV=prod
 RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
 
 COPY --link docker/php/conf.d/api-platform.prod.ini $PHP_INI_DIR/conf.d/
-COPY --link docker/caddy/Caddyfile.prod /etc/caddy/Caddyfile
 #COPY --link docker/caddy/worker.Caddyfile /etc/caddy/worker.Caddyfile
 
 # prevent the reinstallation of vendors at every changes in the source code
diff --git a/api/docker/caddy/Caddyfile b/api/docker/caddy/Caddyfile
index bf5924d1f5..b82e556ae5 100644
--- a/api/docker/caddy/Caddyfile
+++ b/api/docker/caddy/Caddyfile
@@ -1,4 +1,7 @@
 {
+	log {
+		level {$LOG_LEVEL}
+	}
 	{$CADDY_GLOBAL_OPTIONS}
 
 	frankenphp {
@@ -8,7 +11,9 @@
 	# https://caddyserver.com/docs/caddyfile/directives#sorting-algorithm
 	order php_server before file_server
 
-	auto_https disable_redirects
+	http_port 3001
+	https_port 3443
+	auto_https off
 	# make it possible to connect from remote host to admin endpoint
 	# https://caddyserver.com/docs/caddyfile/options#admin
 	# note, restricting to specific origins is not possible with the wildcard interface
@@ -22,62 +27,35 @@
 
 {$CADDY_EXTRA_CONFIG}
 
-:3000 {
-	log {
-		level DEBUG
-	}
-
-	handle_path /api* {
-		# rewriting the uri used for php-fcgi did not work
-		# so we make a hop more to localhost:3001 with the rewritten url where the fcgi happens
-		# this may slow down the request
-
-		reverse_proxy localhost:3001 {
-			header_up X-Forwarded-Prefix "/api"
+{$SERVER_NAME:localhost} {
+	log
+
+	root * /app/public
+
+	encode {
+		zstd
+		br
+		gzip
+
+		match {
+			header Content-Type text/*
+			header Content-Type application/json*
+			header Content-Type application/javascript*
+			header Content-Type application/xhtml+xml*
+			header Content-Type application/atom+xml*
+			header Content-Type application/rss+xml*
+			header Content-Type image/svg+xml*
+			# Custom formats supported
+			header Content-Type application/ld+json*
+			header Content-Type application/hal+json*
 		}
 	}
 
-	handle /print* {
-		reverse_proxy print:3003
-	}
-
-	handle /mail* {
-		reverse_proxy mail:1080
-	}
-
-	handle {
-		reverse_proxy frontend:3000
-	}
-}
+	# Add links to the API docs if not set explicitly (e.g. the PWA)
+	header ?Link `</docs.jsonld>; rel="http://www.w3.org/ns/hydra/core#apiDocumentation"`
 
-:3001 {
-	route {
-		root * /app/public
+	# Disable Topics tracking if not enabled explicitly: https://github.com/jkarlin/topics
+	header ?Permissions-Policy "browsing-topics=()"
 
-		encode {
-			zstd
-			br
-			gzip
-
-			match {
-				header Content-Type text/*
-				header Content-Type application/json*
-				header Content-Type application/javascript*
-				header Content-Type application/xhtml+xml*
-				header Content-Type application/atom+xml*
-				header Content-Type application/rss+xml*
-				header Content-Type image/svg+xml*
-				# Custom formats supported
-				header Content-Type application/ld+json*
-			}
-		}
-
-		# Add links to the API docs if not set explicitly (e.g. the PWA)
-		header ?Link `</docs.jsonld>; rel="www.w3.org/ns/hydra/core#apiDocumentation"`
-
-		# Disable Topics tracking if not enabled explicitly: https://github.com/jkarlin/topics
-		header ?Permissions-Policy "browsing-topics=()"
-
-		php_server
-	}
+	php_server
 }
diff --git a/api/docker/caddy/Caddyfile.prod b/api/docker/caddy/Caddyfile.prod
deleted file mode 100644
index 4311891b43..0000000000
--- a/api/docker/caddy/Caddyfile.prod
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-	{$CADDY_GLOBAL_OPTIONS}
-
-	frankenphp {
-		{$FRANKENPHP_CONFIG}
-	}
-
-	# https://caddyserver.com/docs/caddyfile/directives#sorting-algorithm
-	order php_server before file_server
-
-	http_port 3001
-	https_port 3443
-	auto_https off
-	# make it possible to connect from remote host to admin endpoint
-	# https://caddyserver.com/docs/caddyfile/options#admin
-	# note, restricting to specific origins is not possible with the wildcard interface
-	# due to https://github.com/caddyserver/caddy/commit/f5ccb904a3db2bffd980feee685afaa762224cb2
-	admin 0.0.0.0:2019
-	# enable Prometheus metrics endpoint https://caddyserver.com/docs/metrics
-	servers {
-		metrics
-	}
-}
-
-{$CADDY_EXTRA_CONFIG}
-
-
-{$SERVER_NAME:localhost} {
-	log
-
-	root * /app/public
-
-	encode {
-		zstd
-		br
-		gzip
-
-		match {
-			header Content-Type text/*
-			header Content-Type application/json*
-			header Content-Type application/javascript*
-			header Content-Type application/xhtml+xml*
-			header Content-Type application/atom+xml*
-			header Content-Type application/rss+xml*
-			header Content-Type image/svg+xml*
-			# Custom formats supported
-			header Content-Type application/ld+json*
-			header Content-Type application/hal+json*
-		}
-	}
-
-	# Add links to the API docs if not set explicitly (e.g. the PWA)
-	header ?Link `</docs.jsonld>; rel="http://www.w3.org/ns/hydra/core#apiDocumentation"`
-
-	# Disable Topics tracking if not enabled explicitly: https://github.com/jkarlin/topics
-	header ?Permissions-Policy "browsing-topics=()"
-
-	php_server
-}
diff --git a/api/docker/varnish/vcl/_config.vcl b/api/docker/varnish/vcl/_config.vcl
index 980a1cac54..5db396b1a2 100644
--- a/api/docker/varnish/vcl/_config.vcl
+++ b/api/docker/varnish/vcl/_config.vcl
@@ -1,4 +1,4 @@
 backend default {
   .host = "api";
-  .port = "3000";
+  .port = "3001";
 }
\ No newline at end of file
diff --git a/api/docker/varnish/vcl/default.vcl b/api/docker/varnish/vcl/default.vcl
index 15df5b7472..526d7c1e59 100644
--- a/api/docker/varnish/vcl/default.vcl
+++ b/api/docker/varnish/vcl/default.vcl
@@ -20,11 +20,6 @@ sub vcl_recv {
   # Support xkey purge requests
   # see https://raw.githubusercontent.com/varnish/varnish-modules/master/src/vmod_xkey.vcc
   call fos_tags_xkey_recv;
-  
-  # exclude other services (frontend, print, etc.)
-  if (var.get("originalUrl") !~ "^/api") {
-    return(pass);
-  }
 
   # exclude API documentation, profiler and graphql endpoint
   if (var.get("originalUrl") ~ "^/api/docs" 
@@ -100,4 +95,3 @@ sub vcl_deliver {
     set resp.http.Cache-Control = "no-cache, private";
   }
 }
-
diff --git a/docker-compose.yml b/docker-compose.yml
index fcf404b495..97e50c5949 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -36,9 +36,6 @@ services:
       - database
       - docker-host
     ports:
-      - target: 3000
-        published: 3000
-        protocol: tcp
       - target: 2019
         published: 2019
         protocol: tcp
@@ -52,6 +49,7 @@ services:
       - ./.cache/composer:/tmp/composer/cache:delegated
     environment:
       DATA_MIGRATIONS_DIR: dev-data
+      LOG_LEVEL: debug
       # See https://docs.docker.com/docker-for-mac/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host
       # See https://github.com/docker/for-linux/issues/264
       # The `remote_host` below may optionally be replaced with `remote_connect_back`
@@ -63,6 +61,7 @@ services:
       # This should correspond to the server declared in PHPStorm `Preferences | Languages & Frameworks | PHP | Servers`
       # Then PHPStorm will use the corresponding path mappings
       PHP_IDE_CONFIG: serverName=localhost
+      SERVER_NAME: ":3001"
       ADDITIONAL_TRUSTED_HOSTS: '.*'
       PERFORMANCE_TEST_DEBUG_OUTPUT: ${PERFORMANCE_TEST_DEBUG_OUTPUT:-}
     healthcheck:
@@ -81,10 +80,6 @@ services:
       - api
     volumes:
       - ./api/docker/varnish/vcl/:/etc/varnish/:ro
-    ports:
-      - target: 8080
-        published: 3004
-        protocol: tcp
     command: -a :8081,HTTP -p http_max_hdr=96
     environment:
       - COOKIE_PREFIX=localhost_
@@ -192,6 +187,22 @@ services:
       - /tmp/.X11-unix:/tmp/.X11-unix:rw
     network_mode: host
     working_dir: /e2e
+    
+  reverse-proxy:
+    image: nginx:1.26
+    container_name: 'ecamp3-reverse-proxy'
+    volumes:
+      - ./reverse-proxy-nginx.conf:/etc/nginx/nginx.conf
+    depends_on:
+      - frontend
+      - api
+    ports:
+      - target: 3000
+        published: 3000
+        protocol: tcp
+      - target: 3004
+        published: 3004
+        protocol: tcp
 
   translation:
     image: node:22.6.0
diff --git a/print/print.env b/print/print.env
index 04e3244978..f9743e66f0 100644
--- a/print/print.env
+++ b/print/print.env
@@ -1,4 +1,4 @@
-NUXT_INTERNAL_API_ROOT_URL=http://http-cache:8080/api
+NUXT_INTERNAL_API_ROOT_URL=http://reverse-proxy:3004/api
 NUXT_SENTRY_PRINT_DSN=
 NUXT_SENTRY_ENVIRONMENT=local
 NUXT_BROWSER_WS_ENDPOINT=ws://browserless:3000
diff --git a/reverse-proxy-nginx.conf b/reverse-proxy-nginx.conf
new file mode 100644
index 0000000000..eccbd8df6f
--- /dev/null
+++ b/reverse-proxy-nginx.conf
@@ -0,0 +1,70 @@
+user nginx;
+worker_processes auto;
+error_log /var/log/nginx/error.log warn;
+pid /var/run/nginx.pid;
+events {
+  worker_connections  1024;
+}
+http {
+  resolver 127.0.0.11;
+  include /etc/nginx/mime.types;
+  default_type application/octet-stream;
+  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
+                    '$status $body_bytes_sent "$http_referer" '
+                    '"$http_user_agent" "$http_x_forwarded_for"';
+  access_log /var/log/nginx/access.log  main;
+  sendfile on;
+  keepalive_timeout 65;
+  server {
+    listen 3000;
+    server_name localhost;
+
+    location / {
+      proxy_pass http://frontend:3000;
+    }
+    
+    location /api/ {
+      # the Set-Cookie: XDEBUG_SESSION=PHPSTORM; path=/; SameSite=Lax header is set too many times
+      # temporary workaround from https://stackoverflow.com/a/27551259
+      proxy_buffer_size 128k;
+      proxy_buffers 4 256k;
+      proxy_busy_buffers_size 256k;
+      proxy_set_header X-Forwarded-Prefix /api;
+      proxy_pass http://api:3001/;
+    }
+    
+    location /print {
+      proxy_pass http://print:3003;
+    }
+    
+    location /mail {
+      proxy_pass http://mail:1080;
+    }
+  }
+  server {
+    listen 3004;
+    server_name localhost;
+
+    location / {
+      proxy_pass http://frontend:3000;
+    }
+    
+    location /api/ {
+      # the Set-Cookie: XDEBUG_SESSION=PHPSTORM; path=/; SameSite=Lax header is set too many times
+      # temporary workaround from https://stackoverflow.com/a/27551259
+      proxy_buffer_size 128k;
+      proxy_buffers 4 256k;
+      proxy_busy_buffers_size 256k;
+      proxy_set_header X-Forwarded-Prefix /api;
+      proxy_pass http://http-cache:8080/;
+    }
+    
+    location /print {
+      proxy_pass http://print:3003;
+    }
+    
+    location /mail {
+      proxy_pass http://mail:1080;
+    }
+  }
+}

From 5eb033d3ab279beb8ee7eeba280b0e04fc29734e Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Fri, 19 Jul 2024 23:30:24 +0200
Subject: [PATCH 180/273] api: allow to use insecure cookies in prod
 environment in lexik_jwt_authentication.yaml

When we want to run the prod image on localhost,
we must use insecure cookies for firefox for our e2e tests.
---
 .helm/ecamp3/templates/api_deployment.yaml            |  2 ++
 api/.env                                              |  1 +
 api/config/packages/dev/lexik_jwt_authentication.yaml | 10 ----------
 api/config/packages/lexik_jwt_authentication.yaml     |  3 +++
 4 files changed, 6 insertions(+), 10 deletions(-)
 delete mode 100644 api/config/packages/dev/lexik_jwt_authentication.yaml

diff --git a/.helm/ecamp3/templates/api_deployment.yaml b/.helm/ecamp3/templates/api_deployment.yaml
index f51ead4c90..86ee7bec43 100644
--- a/.helm/ecamp3/templates/api_deployment.yaml
+++ b/.helm/ecamp3/templates/api_deployment.yaml
@@ -51,6 +51,8 @@ spec:
           env:
             - name: SERVER_NAME
               value: :3001
+            - name: COOKIE_SECURE
+              value: 'true'
             - name: APP_SECRET
               valueFrom:
                 secretKeyRef:
diff --git a/api/.env b/api/.env
index f02a90fa5e..cf58c589b6 100644
--- a/api/.env
+++ b/api/.env
@@ -17,6 +17,7 @@
 TRUSTED_PROXIES=::1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
 ADDITIONAL_TRUSTED_HOSTS=localhost
 COOKIE_PREFIX=localhost_
+COOKIE_SECURE=false
 VARNISH_API_URL=http://http-cache:8081
 API_CACHE_ENABLED=true
 
diff --git a/api/config/packages/dev/lexik_jwt_authentication.yaml b/api/config/packages/dev/lexik_jwt_authentication.yaml
deleted file mode 100644
index eddc86d492..0000000000
--- a/api/config/packages/dev/lexik_jwt_authentication.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-parameters:
-    env(COOKIE_PREFIX): ""
-
-lexik_jwt_authentication:
-    set_cookies:
-        '%env(COOKIE_PREFIX)%jwt_hp':
-            secure: false
-        
-        '%env(COOKIE_PREFIX)%jwt_s':
-            secure: false
\ No newline at end of file
diff --git a/api/config/packages/lexik_jwt_authentication.yaml b/api/config/packages/lexik_jwt_authentication.yaml
index 1aa9c3f5a1..9c41d2d8c3 100644
--- a/api/config/packages/lexik_jwt_authentication.yaml
+++ b/api/config/packages/lexik_jwt_authentication.yaml
@@ -1,5 +1,6 @@
 parameters:
     env(COOKIE_PREFIX): ""
+    env(COOKIE_SECURE): "true"
 
 lexik_jwt_authentication:
     secret_key: '%env(resolve:JWT_SECRET_KEY)%'
@@ -31,6 +32,7 @@ lexik_jwt_authentication:
             split:
                 - header
                 - payload
+            secure: '%env(bool:COOKIE_SECURE)%'
         '%env(COOKIE_PREFIX)%jwt_s':
             lifetime: null
             samesite: strict
@@ -38,3 +40,4 @@ lexik_jwt_authentication:
             httpOnly: true
             split:
                 - signature
+            secure: '%env(bool:COOKIE_SECURE)%'

From d91decc34fa0202d9e2ab7f265618d4d5eb21a08 Mon Sep 17 00:00:00 2001
From: Manuel Meister <news.manuelsworld@gmail.com>
Date: Tue, 27 Aug 2024 22:38:48 +0200
Subject: [PATCH 181/273] Improve dev-login-button

---
 frontend/src/views/auth/Login.vue | 38 +++++++++++++++++++------------
 1 file changed, 23 insertions(+), 15 deletions(-)

diff --git a/frontend/src/views/auth/Login.vue b/frontend/src/views/auth/Login.vue
index 7a0a3310dc..752c206a1d 100644
--- a/frontend/src/views/auth/Login.vue
+++ b/frontend/src/views/auth/Login.vue
@@ -21,21 +21,23 @@
         <i18n :path="infoTextKey">
           <template #br><br /></template>
         </i18n>
-        <div class="text-right" style="margin-top: -26px">
-          <v-btn
-            color="warning"
-            height="32px"
-            @click="
-              () => {
-                email = 'test@example.com'
-                password = 'test'
-                login()
-              }
-            "
-          >
-            Login
-          </v-btn>
-        </div>
+        <v-btn
+          text
+          elevation="0"
+          color="warning darken-3"
+          height="32px"
+          class="v-btn--has-bg float-end dev-login-button"
+          @click="
+            () => {
+              email = 'test@example.com'
+              password = 'test'
+              login()
+            }
+          "
+        >
+          Login
+          <v-icon right>mdi-auto-fix</v-icon>
+        </v-btn>
       </div>
     </v-alert>
     <v-alert v-if="error" outlined text border="left" type="error">
@@ -287,4 +289,10 @@ export default {
     flex-direction: column;
   }
 }
+.dev-login-button {
+  background-color: #f7e4cc !important;
+  margin-top: 12px;
+  margin-bottom: -12px;
+  translate: 0 -12px;
+}
 </style>

From 4c466a103dd788ec364b27d08edb6a293019a902 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Wed, 17 Jul 2024 16:55:00 +0200
Subject: [PATCH 182/273] reusable-e2e-tests-build.yml: use prod build of the
 api container

Because the dev container may stop responding during the e2e tests.
---
 .../workflows/reusable-e2e-tests-build.yml    |  2 +-
 .github/workflows/reusable-e2e-tests-run.yml  | 14 ++++++++--
 docker-compose.override.yml                   | 26 +++++++++++++++++
 docker-compose.yml                            | 28 ++++---------------
 e2e/README.md                                 | 20 +++++++++++++
 5 files changed, 64 insertions(+), 26 deletions(-)
 create mode 100644 docker-compose.override.yml

diff --git a/.github/workflows/reusable-e2e-tests-build.yml b/.github/workflows/reusable-e2e-tests-build.yml
index e1e1450d59..6b655bb365 100644
--- a/.github/workflows/reusable-e2e-tests-build.yml
+++ b/.github/workflows/reusable-e2e-tests-build.yml
@@ -23,7 +23,7 @@ jobs:
           context: './api'
           push: false
           load: true
-          target: frankenphp_dev
+          target: frankenphp_prod
           builder: ${{ steps.buildx.outputs.name }}
           tags: ecamp/ecamp3-dev-api
           cache-from: type=gha,scope=api
diff --git a/.github/workflows/reusable-e2e-tests-run.yml b/.github/workflows/reusable-e2e-tests-run.yml
index 324498a836..089f2a3e49 100644
--- a/.github/workflows/reusable-e2e-tests-run.yml
+++ b/.github/workflows/reusable-e2e-tests-run.yml
@@ -48,13 +48,23 @@ jobs:
           key: docker-compose-${{ hashFiles('frontend/package-lock.json', 'print/package-lock.json', 'api/composer.lock') }}-${{ matrix.browser }}
           restore-keys: |
             docker-compose-
+            
+      - run: |
+          jwt_passphrase=${JWT_PASSPHRASE:-$(grep ''^JWT_PASSPHRASE='' .env | cut -f 2 -d ''='')}
+          echo "Generating public / private keys for JWT"
+          mkdir -p config/jwt
+          echo "$jwt_passphrase" | openssl genpkey -out config/jwt/private.pem -pass stdin -aes256 -algorithm rsa -pkeyopt rsa_keygen_bits:4096
+          echo "$jwt_passphrase" | openssl pkey -in config/jwt/private.pem -passin stdin -out config/jwt/public.pem -pubout
+          setfacl -R -m u:www-data:rX -m u:"$(whoami)":rwX config/jwt
+          setfacl -dR -m u:www-data:rX -m u:"$(whoami)":rwX config/jwt
+        working-directory: api
 
       - run: docker compose up --wait -d database
         
-      - run: docker compose run --rm api composer install --prefer-dist --no-progress --no-interaction
+      - run: docker compose -f docker-compose.yml run --rm api migrate-database
 
       # start necessary containers
-      - run: docker compose up -d api frontend pdf print browserless database docker-host http-cache mail reverse-proxy
+      - run: docker compose -f docker-compose.yml up -d api frontend pdf print browserless database docker-host http-cache mail reverse-proxy
 
       # pull cypress while container are starting up
       - run: docker compose pull e2e
diff --git a/docker-compose.override.yml b/docker-compose.override.yml
new file mode 100644
index 0000000000..e116a9401a
--- /dev/null
+++ b/docker-compose.override.yml
@@ -0,0 +1,26 @@
+services:
+  api:
+    build:
+      target: frankenphp_dev
+    volumes:
+      - ./api:/app:rw,delegated
+      - caddy_data:/data
+      - caddy_config:/config
+      - ./api/docker/caddy/Caddyfile:/etc/caddy/Caddyfile:ro
+      - ./api/docker/php/conf.d/api-platform.dev.ini:/usr/local/etc/php/conf.d/api-platform.ini:delegated
+      - ./api/docker/php/docker-entrypoint.sh:/usr/local/bin/docker-entrypoint:delegated
+      - ./.cache/composer:/tmp/composer/cache:delegated
+    environment:
+      # See https://docs.docker.com/docker-for-mac/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host
+      # See https://github.com/docker/for-linux/issues/264
+      # The `remote_host` below may optionally be replaced with `remote_connect_back`
+      # XDEBUG_MODE required for step debugging
+      XDEBUG_MODE: ${XDEBUG_MODE:-off}
+      # default port for Xdebug 3 is 9003
+      # idekey=VSCODE if you are debugging with VSCode
+      XDEBUG_CONFIG: ${XDEBUG_CONFIG}
+      # This should correspond to the server declared in PHPStorm `Preferences | Languages & Frameworks | PHP | Servers`
+      # Then PHPStorm will use the corresponding path mappings
+      PHP_IDE_CONFIG: serverName=localhost
+      PERFORMANCE_TEST_DEBUG_OUTPUT: ${PERFORMANCE_TEST_DEBUG_OUTPUT:-}
+    user: ${USER_ID:-1000}
diff --git a/docker-compose.yml b/docker-compose.yml
index 97e50c5949..413edf60a1 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -28,48 +28,30 @@ services:
     image: ecamp/ecamp3-dev-api
     build:
       context: ./api
-      target: frankenphp_dev
+      target: frankenphp_prod
       cache_from:
         - ecamp/ecamp3-dev-api
     container_name: 'ecamp3-api'
     depends_on:
       - database
       - docker-host
+    volumes:
+      - ./api/config/jwt:/app/config/jwt:rw,delegated
     ports:
       - target: 2019
         published: 2019
         protocol: tcp
-    volumes:
-      - ./api:/app:rw,delegated
-      - caddy_data:/data
-      - caddy_config:/config
-      - ./api/docker/caddy/Caddyfile:/etc/caddy/Caddyfile:ro
-      - ./api/docker/php/conf.d/api-platform.dev.ini:/usr/local/etc/php/conf.d/api-platform.ini:delegated
-      - ./api/docker/php/docker-entrypoint.sh:/usr/local/bin/docker-entrypoint:delegated
-      - ./.cache/composer:/tmp/composer/cache:delegated
     environment:
       DATA_MIGRATIONS_DIR: dev-data
+      DATABASE_URL: "postgresql://ecamp3:ecamp3@database:5432/ecamp3dev?serverVersion=15&charset=utf8"
       LOG_LEVEL: debug
-      # See https://docs.docker.com/docker-for-mac/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host
-      # See https://github.com/docker/for-linux/issues/264
-      # The `remote_host` below may optionally be replaced with `remote_connect_back`
-      # XDEBUG_MODE required for step debugging
-      XDEBUG_MODE: ${XDEBUG_MODE:-off}
-      # default port for Xdebug 3 is 9003
-      # idekey=VSCODE if you are debugging with VSCode
-      XDEBUG_CONFIG: ${XDEBUG_CONFIG}
-      # This should correspond to the server declared in PHPStorm `Preferences | Languages & Frameworks | PHP | Servers`
-      # Then PHPStorm will use the corresponding path mappings
-      PHP_IDE_CONFIG: serverName=localhost
-      SERVER_NAME: ":3001"
       ADDITIONAL_TRUSTED_HOSTS: '.*'
-      PERFORMANCE_TEST_DEBUG_OUTPUT: ${PERFORMANCE_TEST_DEBUG_OUTPUT:-}
+      SERVER_NAME: ":3001"
     healthcheck:
       interval: 10s
       timeout: 3s
       retries: 3
       start_period: 30s
-    user: ${USER_ID:-1000}
     extra_hosts:
       - 'host.docker.internal:host-gateway'
 
diff --git a/e2e/README.md b/e2e/README.md
index 08188d9384..6fc4245a64 100644
--- a/e2e/README.md
+++ b/e2e/README.md
@@ -90,3 +90,23 @@ npm run cypress:open
 ```shell
 docker compose run --rm --entrypoint="npm run lint" e2e
 ```
+
+## For both options: run against prod api image
+
+### Run the dev api image to generate jwt pair
+
+```shell
+docker compose up -d --wait
+```
+
+### Build the prod api image
+
+```shell
+docker compose -f ../docker-compose.yml build api
+```
+
+### Run the prod api image
+
+```shell
+docker compose -f ../docker-compose.yml up --wait -d api
+```

From 5f2ad59f5adae6f7626906039084cd5d580444ec Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 27 Aug 2024 21:08:53 +0000
Subject: [PATCH 183/273] chore(deps): update nginx docker tag to v1.27

---
 docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docker-compose.yml b/docker-compose.yml
index 6cd9b5fd6a..cdc640fdd2 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -171,7 +171,7 @@ services:
     working_dir: /e2e
     
   reverse-proxy:
-    image: nginx:1.26
+    image: nginx:1.27
     container_name: 'ecamp3-reverse-proxy'
     volumes:
       - ./reverse-proxy-nginx.conf:/etc/nginx/nginx.conf

From f9831566db86c15b40bbbf242b9f456243a851c2 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 27 Aug 2024 21:18:50 +0000
Subject: [PATCH 184/273] fix(deps): update dependency puppeteer-core to
 v23.2.0

---
 print/package-lock.json | 16 ++++++++--------
 print/package.json      |  2 +-
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index 2983144839..bf215b2fce 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -16,7 +16,7 @@
         "hal-json-vuex": "3.0.0-alpha.1",
         "isomorphic-dompurify": "2.15.0",
         "lodash": "4.17.21",
-        "puppeteer-core": "23.1.1",
+        "puppeteer-core": "23.2.0",
         "runes": "0.4.3",
         "vuex": "4.1.0"
       },
@@ -7059,9 +7059,9 @@
       "license": "MIT"
     },
     "node_modules/devtools-protocol": {
-      "version": "0.0.1312386",
-      "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1312386.tgz",
-      "integrity": "sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==",
+      "version": "0.0.1330662",
+      "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1330662.tgz",
+      "integrity": "sha512-pzh6YQ8zZfz3iKlCvgzVCu22NdpZ8hNmwU6WnQjNVquh0A9iVosPtNLWDwaWVGyrntQlltPFztTMK5Cg6lfCuw==",
       "license": "BSD-3-Clause"
     },
     "node_modules/didyoumean": {
@@ -13467,15 +13467,15 @@
       }
     },
     "node_modules/puppeteer-core": {
-      "version": "23.1.1",
-      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.1.1.tgz",
-      "integrity": "sha512-OeTqNiYGF9qZtwZU4Yc88DDqFJs4TJ4rnK81jkillh6MwDeQodyisM9xe5lBmPhwiDy92s5J5DQtQLjCKHFQ3g==",
+      "version": "23.2.0",
+      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.2.0.tgz",
+      "integrity": "sha512-OFyPp2oolGSesx6ZrpmorE5tCaCKY1Z5e/h8f6sB0NpiezenB72jdWBdOrvBO/bUXyq14XyGJsDRUsv0ZOPdZA==",
       "license": "Apache-2.0",
       "dependencies": {
         "@puppeteer/browsers": "2.3.1",
         "chromium-bidi": "0.6.4",
         "debug": "^4.3.6",
-        "devtools-protocol": "0.0.1312386",
+        "devtools-protocol": "0.0.1330662",
         "typed-query-selector": "^2.12.0",
         "ws": "^8.18.0"
       },
diff --git a/print/package.json b/print/package.json
index bcb22367d5..b8879e5ab5 100644
--- a/print/package.json
+++ b/print/package.json
@@ -25,7 +25,7 @@
     "hal-json-vuex": "3.0.0-alpha.1",
     "isomorphic-dompurify": "2.15.0",
     "lodash": "4.17.21",
-    "puppeteer-core": "23.1.1",
+    "puppeteer-core": "23.2.0",
     "runes": "0.4.3",
     "vuex": "4.1.0"
   },

From 76bf621525be73a5daaec3d53cb16c665cac0a5c Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 28 Aug 2024 01:28:36 +0000
Subject: [PATCH 185/273] chore(deps): update dependency @types/node to
 v20.16.2

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index c4f8653401..d2464e8ed5 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -15,7 +15,7 @@
                 "@eslint/compat": "1.1.1",
                 "@eslint/eslintrc": "3.1.0",
                 "@eslint/js": "9.9.1",
-                "@types/node": "20.16.1",
+                "@types/node": "20.16.2",
                 "eslint": "8.57.0",
                 "eslint-config-prettier": "9.1.0",
                 "eslint-plugin-n": "17.10.2",
@@ -2911,9 +2911,9 @@
             }
         },
         "node_modules/@types/node": {
-            "version": "20.16.1",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz",
-            "integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==",
+            "version": "20.16.2",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.2.tgz",
+            "integrity": "sha512-91s/n4qUPV/wg8eE9KHYW1kouTfDk2FPGjXbBMfRWP/2vg1rCXNQL1OCabwGs0XSdukuK+MwCDXE30QpSeMUhQ==",
             "license": "MIT",
             "dependencies": {
                 "undici-types": "~6.19.2"
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index fba314aa75..58df16ab43 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -19,7 +19,7 @@
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.1",
-        "@types/node": "20.16.1",
+        "@types/node": "20.16.2",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
         "eslint-plugin-n": "17.10.2",

From f31e05c9a3ef4e43738948e23b5baf41bad21174 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 28 Aug 2024 08:30:57 +0000
Subject: [PATCH 186/273] chore(deps): update helm release fluent-operator to
 v3.1.0

---
 .ops/ecamp3-logging/Chart.lock | 6 +++---
 .ops/ecamp3-logging/Chart.yaml | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/.ops/ecamp3-logging/Chart.lock b/.ops/ecamp3-logging/Chart.lock
index bb470f7f99..29b32bd9df 100644
--- a/.ops/ecamp3-logging/Chart.lock
+++ b/.ops/ecamp3-logging/Chart.lock
@@ -1,6 +1,6 @@
 dependencies:
 - name: fluent-operator
   repository: https://fluent.github.io/helm-charts
-  version: 3.0.0
-digest: sha256:eb4362eba502d3b6674bb1b5105b3cad87433a8375ada7f148b376e8da131b17
-generated: "2024-07-09T09:28:58.748745351Z"
+  version: 3.1.0
+digest: sha256:fc6a9e896d1d8657cc7ede64ab9255be1b3d92915e32f5c3bf50d8fc0ee15db8
+generated: "2024-08-28T08:30:46.76124464Z"
diff --git a/.ops/ecamp3-logging/Chart.yaml b/.ops/ecamp3-logging/Chart.yaml
index 65f49c8714..4ab1772876 100644
--- a/.ops/ecamp3-logging/Chart.yaml
+++ b/.ops/ecamp3-logging/Chart.yaml
@@ -25,5 +25,5 @@ appVersion: 0.1.0
 
 dependencies:
   - name: fluent-operator
-    version: 3.0.0
+    version: 3.1.0
     repository:  https://fluent.github.io/helm-charts

From 025fc20e69b20347444e8eb4955a691b7fe9a051 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 28 Aug 2024 11:37:52 +0000
Subject: [PATCH 187/273] chore(deps): update dependency @sentry/vite-plugin to
 v2.22.3

---
 frontend/package-lock.json | 24 ++++++++++++------------
 frontend/package.json      |  2 +-
 2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index a18c2b7825..bd7e25d563 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -75,7 +75,7 @@
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.1",
-        "@sentry/vite-plugin": "2.22.2",
+        "@sentry/vite-plugin": "2.22.3",
         "@testing-library/jest-dom": "6.5.0",
         "@testing-library/user-event": "14.5.2",
         "@testing-library/vue": "5.9.0",
@@ -3359,9 +3359,9 @@
       }
     },
     "node_modules/@sentry/babel-plugin-component-annotate": {
-      "version": "2.22.2",
-      "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.22.2.tgz",
-      "integrity": "sha512-6kFAHGcs0npIC4HTt4ULs8uOfEucvMI7VW4hoyk17jhRaW8CbxzxfWCfIeRbDkE8pYwnARaq83tu025Hrk2zgA==",
+      "version": "2.22.3",
+      "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.22.3.tgz",
+      "integrity": "sha512-OlHA+i+vnQHRIdry4glpiS/xTOtgjmpXOt6IBOUqynx5Jd/iK1+fj+t8CckqOx9wRacO/hru2wfW/jFq0iViLg==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -3387,14 +3387,14 @@
       }
     },
     "node_modules/@sentry/bundler-plugin-core": {
-      "version": "2.22.2",
-      "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.22.2.tgz",
-      "integrity": "sha512-TwEEW4FeEJ5Mamp4fGnktfVjzN77KAW0xFQsEPuxZtOAPG17zX/PGvdyRX/TE1jkZWhTzqUDIdgzqlNLjyEnUw==",
+      "version": "2.22.3",
+      "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.22.3.tgz",
+      "integrity": "sha512-DeoUl0WffcqZZRl5Wy9aHvX4WfZbbWt0QbJ7NJrcEViq+dRAI2FQTYECFLwdZi5Gtb3oyqZICO+P7k8wDnzsjQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/core": "^7.18.5",
-        "@sentry/babel-plugin-component-annotate": "2.22.2",
+        "@sentry/babel-plugin-component-annotate": "2.22.3",
         "@sentry/cli": "^2.33.1",
         "dotenv": "^16.3.1",
         "find-up": "^5.0.0",
@@ -3593,13 +3593,13 @@
       }
     },
     "node_modules/@sentry/vite-plugin": {
-      "version": "2.22.2",
-      "resolved": "https://registry.npmjs.org/@sentry/vite-plugin/-/vite-plugin-2.22.2.tgz",
-      "integrity": "sha512-LJSNTw75UJq77v2jCan8cRh0w1u6W30jxQsbqF7YyyhhfjPTyFUXYday9RDDe84qDEnspbZmgeTSWTvaTGsBRg==",
+      "version": "2.22.3",
+      "resolved": "https://registry.npmjs.org/@sentry/vite-plugin/-/vite-plugin-2.22.3.tgz",
+      "integrity": "sha512-+5bsLFRKOZzBp68XigoNE1pJ3tJ4gt2jXluApu54ui0N/yjfqGQ7LQTD7nL4tmJvB5Agwi0e7M7+fcxe9gSgBA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@sentry/bundler-plugin-core": "2.22.2",
+        "@sentry/bundler-plugin-core": "2.22.3",
         "unplugin": "1.0.1"
       },
       "engines": {
diff --git a/frontend/package.json b/frontend/package.json
index 54a2321f9e..c115f21522 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -87,7 +87,7 @@
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
     "@eslint/js": "9.9.1",
-    "@sentry/vite-plugin": "2.22.2",
+    "@sentry/vite-plugin": "2.22.3",
     "@testing-library/jest-dom": "6.5.0",
     "@testing-library/user-event": "14.5.2",
     "@testing-library/vue": "5.9.0",

From 4b501d07afbffb7e61b25006ad672957bb2f8986 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 28 Aug 2024 11:38:15 +0000
Subject: [PATCH 188/273] chore(deps): update dependency
 friendsofphp/php-cs-fixer to v3.63.2

---
 api/composer.json |  2 +-
 api/composer.lock | 26 +++++++++++++-------------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index de5fac252c..693d2fd43c 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -52,7 +52,7 @@
     },
     "require-dev": {
         "brianium/paratest": "^7.4",
-        "friendsofphp/php-cs-fixer": "3.63.1",
+        "friendsofphp/php-cs-fixer": "3.63.2",
         "hautelook/alice-bundle": "2.13.0",
         "justinrainbow/json-schema": "6.0.0",
         "php-coveralls/php-coveralls": "2.7.0",
diff --git a/api/composer.lock b/api/composer.lock
index 5089860f29..7901d3c308 100644
--- a/api/composer.lock
+++ b/api/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": "3fcabb8987c45d9cf27f5f7e78ead0a0",
+    "content-hash": "7de7e74804a67c17934b6bb1a2742dad",
     "packages": [
         {
             "name": "api-platform/core",
@@ -10462,16 +10462,16 @@
         },
         {
             "name": "composer/pcre",
-            "version": "3.3.0",
+            "version": "3.3.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/composer/pcre.git",
-                "reference": "1637e067347a0c40bbb1e3cd786b20dcab556a81"
+                "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/composer/pcre/zipball/1637e067347a0c40bbb1e3cd786b20dcab556a81",
-                "reference": "1637e067347a0c40bbb1e3cd786b20dcab556a81",
+                "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4",
+                "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4",
                 "shasum": ""
             },
             "require": {
@@ -10521,7 +10521,7 @@
             ],
             "support": {
                 "issues": "https://github.com/composer/pcre/issues",
-                "source": "https://github.com/composer/pcre/tree/3.3.0"
+                "source": "https://github.com/composer/pcre/tree/3.3.1"
             },
             "funding": [
                 {
@@ -10537,7 +10537,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-08-19T19:43:53+00:00"
+            "time": "2024-08-27T18:44:43+00:00"
         },
         {
             "name": "composer/semver",
@@ -11081,16 +11081,16 @@
         },
         {
             "name": "friendsofphp/php-cs-fixer",
-            "version": "v3.63.1",
+            "version": "v3.63.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
-                "reference": "ee3cc2e1fbfbddf98c17d4615db574a2a311c1ea"
+                "reference": "9d427f3f14984403a6ae9fc726b61765ca0c005e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/ee3cc2e1fbfbddf98c17d4615db574a2a311c1ea",
-                "reference": "ee3cc2e1fbfbddf98c17d4615db574a2a311c1ea",
+                "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/9d427f3f14984403a6ae9fc726b61765ca0c005e",
+                "reference": "9d427f3f14984403a6ae9fc726b61765ca0c005e",
                 "shasum": ""
             },
             "require": {
@@ -11172,7 +11172,7 @@
             ],
             "support": {
                 "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
-                "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.63.1"
+                "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.63.2"
             },
             "funding": [
                 {
@@ -11180,7 +11180,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-26T14:03:20+00:00"
+            "time": "2024-08-28T10:47:21+00:00"
         },
         {
             "name": "hautelook/alice-bundle",

From 2fc58f1af882f855455e83fadb1f0d215cc80263 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 28 Aug 2024 13:54:18 +0000
Subject: [PATCH 189/273] chore(deps): update dependency
 @tailwindcss/typography to v0.5.15

---
 print/package-lock.json | 10 +++++-----
 print/package.json      |  2 +-
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index bf215b2fce..58f6537b94 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -28,7 +28,7 @@
         "@nuxtjs/eslint-module": "4.1.0",
         "@nuxtjs/i18n": "8.5.1",
         "@nuxtjs/tailwindcss": "6.12.1",
-        "@tailwindcss/typography": "0.5.14",
+        "@tailwindcss/typography": "0.5.15",
         "@typescript-eslint/eslint-plugin": "8.3.0",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/compiler-dom": "3.4.38",
@@ -3839,9 +3839,9 @@
       }
     },
     "node_modules/@tailwindcss/typography": {
-      "version": "0.5.14",
-      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.14.tgz",
-      "integrity": "sha512-ZvOCjUbsJBjL9CxQBn+VEnFpouzuKhxh2dH8xMIWHILL+HfOYtlAkWcyoon8LlzE53d2Yo6YO6pahKKNW3q1YQ==",
+      "version": "0.5.15",
+      "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.15.tgz",
+      "integrity": "sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -3851,7 +3851,7 @@
         "postcss-selector-parser": "6.0.10"
       },
       "peerDependencies": {
-        "tailwindcss": ">=3.0.0 || insiders"
+        "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20"
       }
     },
     "node_modules/@tootallnate/quickjs-emscripten": {
diff --git a/print/package.json b/print/package.json
index b8879e5ab5..83545fce0f 100644
--- a/print/package.json
+++ b/print/package.json
@@ -37,7 +37,7 @@
     "@nuxtjs/eslint-module": "4.1.0",
     "@nuxtjs/i18n": "8.5.1",
     "@nuxtjs/tailwindcss": "6.12.1",
-    "@tailwindcss/typography": "0.5.14",
+    "@tailwindcss/typography": "0.5.15",
     "@typescript-eslint/eslint-plugin": "8.3.0",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/compiler-dom": "3.4.38",

From 54a4840bbc1ad2f414a29db680cadf3d739a4d6f Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 28 Aug 2024 18:13:10 +0000
Subject: [PATCH 190/273] chore(deps): lock file maintenance

---
 .ops/aws-setup/package-lock.json |   848 +--
 api/composer.lock                |    13 +-
 e2e/package-lock.json            |   844 ++-
 frontend/package-lock.json       |   617 +-
 pdf/package-lock.json            |   411 +-
 print/package-lock.json          | 10203 +++++++++++++----------------
 translation/package-lock.json    |    20 +-
 7 files changed, 6163 insertions(+), 6793 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index d2464e8ed5..e655d238a8 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -166,47 +166,47 @@
             }
         },
         "node_modules/@aws-sdk/client-ecs": {
-            "version": "3.629.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecs/-/client-ecs-3.629.0.tgz",
-            "integrity": "sha512-yZP0bPzZgpYPdDRNPYTZY0p5D/GTLZzhxpt3Os9kWZmyRtk/JXR69aaFPf1urTAjQAezQyRG38x/kzyRMYPmzw==",
+            "version": "3.637.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecs/-/client-ecs-3.637.0.tgz",
+            "integrity": "sha512-/PcQKx4kBoWBpSu+10HXfU4LtUjTq92mCcJXYhjtlI8sQwkA1zvPThW0bjLJ34mIXhxvHSnUXG1NrjNZQ9ps4g==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
                 "@aws-crypto/sha256-js": "5.2.0",
-                "@aws-sdk/client-sso-oidc": "3.629.0",
-                "@aws-sdk/client-sts": "3.629.0",
-                "@aws-sdk/core": "3.629.0",
-                "@aws-sdk/credential-provider-node": "3.629.0",
+                "@aws-sdk/client-sso-oidc": "3.637.0",
+                "@aws-sdk/client-sts": "3.637.0",
+                "@aws-sdk/core": "3.635.0",
+                "@aws-sdk/credential-provider-node": "3.637.0",
                 "@aws-sdk/middleware-host-header": "3.620.0",
                 "@aws-sdk/middleware-logger": "3.609.0",
                 "@aws-sdk/middleware-recursion-detection": "3.620.0",
-                "@aws-sdk/middleware-user-agent": "3.620.0",
+                "@aws-sdk/middleware-user-agent": "3.637.0",
                 "@aws-sdk/region-config-resolver": "3.614.0",
                 "@aws-sdk/types": "3.609.0",
-                "@aws-sdk/util-endpoints": "3.614.0",
+                "@aws-sdk/util-endpoints": "3.637.0",
                 "@aws-sdk/util-user-agent-browser": "3.609.0",
                 "@aws-sdk/util-user-agent-node": "3.614.0",
                 "@smithy/config-resolver": "^3.0.5",
-                "@smithy/core": "^2.3.2",
+                "@smithy/core": "^2.4.0",
                 "@smithy/fetch-http-handler": "^3.2.4",
                 "@smithy/hash-node": "^3.0.3",
                 "@smithy/invalid-dependency": "^3.0.3",
                 "@smithy/middleware-content-length": "^3.0.5",
                 "@smithy/middleware-endpoint": "^3.1.0",
-                "@smithy/middleware-retry": "^3.0.14",
+                "@smithy/middleware-retry": "^3.0.15",
                 "@smithy/middleware-serde": "^3.0.3",
                 "@smithy/middleware-stack": "^3.0.3",
                 "@smithy/node-config-provider": "^3.1.4",
                 "@smithy/node-http-handler": "^3.1.4",
                 "@smithy/protocol-http": "^4.1.0",
-                "@smithy/smithy-client": "^3.1.12",
+                "@smithy/smithy-client": "^3.2.0",
                 "@smithy/types": "^3.3.0",
                 "@smithy/url-parser": "^3.0.3",
                 "@smithy/util-base64": "^3.0.0",
                 "@smithy/util-body-length-browser": "^3.0.0",
                 "@smithy/util-body-length-node": "^3.0.0",
-                "@smithy/util-defaults-mode-browser": "^3.0.14",
-                "@smithy/util-defaults-mode-node": "^3.0.14",
+                "@smithy/util-defaults-mode-browser": "^3.0.15",
+                "@smithy/util-defaults-mode-node": "^3.0.15",
                 "@smithy/util-endpoints": "^2.0.5",
                 "@smithy/util-middleware": "^3.0.3",
                 "@smithy/util-retry": "^3.0.3",
@@ -220,44 +220,44 @@
             }
         },
         "node_modules/@aws-sdk/client-sso": {
-            "version": "3.629.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.629.0.tgz",
-            "integrity": "sha512-2w8xU4O0Grca5HmT2dXZ5fF0g39RxODtmoqHJDsK5DSt750LqDG4w3ktmBvQs3+SrpkkJOjlX5v/hb2PCxVbww==",
+            "version": "3.637.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.637.0.tgz",
+            "integrity": "sha512-+KjLvgX5yJYROWo3TQuwBJlHCY0zz9PsLuEolmXQn0BVK1L/m9GteZHtd+rEdAoDGBpE0Xqjy1oz5+SmtsaRUw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
                 "@aws-crypto/sha256-js": "5.2.0",
-                "@aws-sdk/core": "3.629.0",
+                "@aws-sdk/core": "3.635.0",
                 "@aws-sdk/middleware-host-header": "3.620.0",
                 "@aws-sdk/middleware-logger": "3.609.0",
                 "@aws-sdk/middleware-recursion-detection": "3.620.0",
-                "@aws-sdk/middleware-user-agent": "3.620.0",
+                "@aws-sdk/middleware-user-agent": "3.637.0",
                 "@aws-sdk/region-config-resolver": "3.614.0",
                 "@aws-sdk/types": "3.609.0",
-                "@aws-sdk/util-endpoints": "3.614.0",
+                "@aws-sdk/util-endpoints": "3.637.0",
                 "@aws-sdk/util-user-agent-browser": "3.609.0",
                 "@aws-sdk/util-user-agent-node": "3.614.0",
                 "@smithy/config-resolver": "^3.0.5",
-                "@smithy/core": "^2.3.2",
+                "@smithy/core": "^2.4.0",
                 "@smithy/fetch-http-handler": "^3.2.4",
                 "@smithy/hash-node": "^3.0.3",
                 "@smithy/invalid-dependency": "^3.0.3",
                 "@smithy/middleware-content-length": "^3.0.5",
                 "@smithy/middleware-endpoint": "^3.1.0",
-                "@smithy/middleware-retry": "^3.0.14",
+                "@smithy/middleware-retry": "^3.0.15",
                 "@smithy/middleware-serde": "^3.0.3",
                 "@smithy/middleware-stack": "^3.0.3",
                 "@smithy/node-config-provider": "^3.1.4",
                 "@smithy/node-http-handler": "^3.1.4",
                 "@smithy/protocol-http": "^4.1.0",
-                "@smithy/smithy-client": "^3.1.12",
+                "@smithy/smithy-client": "^3.2.0",
                 "@smithy/types": "^3.3.0",
                 "@smithy/url-parser": "^3.0.3",
                 "@smithy/util-base64": "^3.0.0",
                 "@smithy/util-body-length-browser": "^3.0.0",
                 "@smithy/util-body-length-node": "^3.0.0",
-                "@smithy/util-defaults-mode-browser": "^3.0.14",
-                "@smithy/util-defaults-mode-node": "^3.0.14",
+                "@smithy/util-defaults-mode-browser": "^3.0.15",
+                "@smithy/util-defaults-mode-node": "^3.0.15",
                 "@smithy/util-endpoints": "^2.0.5",
                 "@smithy/util-middleware": "^3.0.3",
                 "@smithy/util-retry": "^3.0.3",
@@ -269,45 +269,45 @@
             }
         },
         "node_modules/@aws-sdk/client-sso-oidc": {
-            "version": "3.629.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.629.0.tgz",
-            "integrity": "sha512-3if0LauNJPqubGYf8vnlkp+B3yAeKRuRNxfNbHlE6l510xWGcKK/ZsEmiFmfePzKKSRrDh/cxMFMScgOrXptNg==",
+            "version": "3.637.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.637.0.tgz",
+            "integrity": "sha512-27bHALN6Qb6m6KZmPvRieJ/QRlj1lyac/GT2Rn5kJpre8Mpp+yxrtvp3h9PjNBty4lCeFEENfY4dGNSozBuBcw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
                 "@aws-crypto/sha256-js": "5.2.0",
-                "@aws-sdk/core": "3.629.0",
-                "@aws-sdk/credential-provider-node": "3.629.0",
+                "@aws-sdk/core": "3.635.0",
+                "@aws-sdk/credential-provider-node": "3.637.0",
                 "@aws-sdk/middleware-host-header": "3.620.0",
                 "@aws-sdk/middleware-logger": "3.609.0",
                 "@aws-sdk/middleware-recursion-detection": "3.620.0",
-                "@aws-sdk/middleware-user-agent": "3.620.0",
+                "@aws-sdk/middleware-user-agent": "3.637.0",
                 "@aws-sdk/region-config-resolver": "3.614.0",
                 "@aws-sdk/types": "3.609.0",
-                "@aws-sdk/util-endpoints": "3.614.0",
+                "@aws-sdk/util-endpoints": "3.637.0",
                 "@aws-sdk/util-user-agent-browser": "3.609.0",
                 "@aws-sdk/util-user-agent-node": "3.614.0",
                 "@smithy/config-resolver": "^3.0.5",
-                "@smithy/core": "^2.3.2",
+                "@smithy/core": "^2.4.0",
                 "@smithy/fetch-http-handler": "^3.2.4",
                 "@smithy/hash-node": "^3.0.3",
                 "@smithy/invalid-dependency": "^3.0.3",
                 "@smithy/middleware-content-length": "^3.0.5",
                 "@smithy/middleware-endpoint": "^3.1.0",
-                "@smithy/middleware-retry": "^3.0.14",
+                "@smithy/middleware-retry": "^3.0.15",
                 "@smithy/middleware-serde": "^3.0.3",
                 "@smithy/middleware-stack": "^3.0.3",
                 "@smithy/node-config-provider": "^3.1.4",
                 "@smithy/node-http-handler": "^3.1.4",
                 "@smithy/protocol-http": "^4.1.0",
-                "@smithy/smithy-client": "^3.1.12",
+                "@smithy/smithy-client": "^3.2.0",
                 "@smithy/types": "^3.3.0",
                 "@smithy/url-parser": "^3.0.3",
                 "@smithy/util-base64": "^3.0.0",
                 "@smithy/util-body-length-browser": "^3.0.0",
                 "@smithy/util-body-length-node": "^3.0.0",
-                "@smithy/util-defaults-mode-browser": "^3.0.14",
-                "@smithy/util-defaults-mode-node": "^3.0.14",
+                "@smithy/util-defaults-mode-browser": "^3.0.15",
+                "@smithy/util-defaults-mode-node": "^3.0.15",
                 "@smithy/util-endpoints": "^2.0.5",
                 "@smithy/util-middleware": "^3.0.3",
                 "@smithy/util-retry": "^3.0.3",
@@ -318,50 +318,50 @@
                 "node": ">=16.0.0"
             },
             "peerDependencies": {
-                "@aws-sdk/client-sts": "^3.629.0"
+                "@aws-sdk/client-sts": "^3.637.0"
             }
         },
         "node_modules/@aws-sdk/client-sts": {
-            "version": "3.629.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.629.0.tgz",
-            "integrity": "sha512-RjOs371YwnSVGxhPjuluJKaxl4gcPYTAky0nPjwBime0i9/iS9nI8R8l5j7k7ec9tpFWjBPvNnThCU07pvjdzw==",
+            "version": "3.637.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.637.0.tgz",
+            "integrity": "sha512-xUi7x4qDubtA8QREtlblPuAcn91GS/09YVEY/RwU7xCY0aqGuFwgszAANlha4OUIqva8oVj2WO4gJuG+iaSnhw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
                 "@aws-crypto/sha256-js": "5.2.0",
-                "@aws-sdk/client-sso-oidc": "3.629.0",
-                "@aws-sdk/core": "3.629.0",
-                "@aws-sdk/credential-provider-node": "3.629.0",
+                "@aws-sdk/client-sso-oidc": "3.637.0",
+                "@aws-sdk/core": "3.635.0",
+                "@aws-sdk/credential-provider-node": "3.637.0",
                 "@aws-sdk/middleware-host-header": "3.620.0",
                 "@aws-sdk/middleware-logger": "3.609.0",
                 "@aws-sdk/middleware-recursion-detection": "3.620.0",
-                "@aws-sdk/middleware-user-agent": "3.620.0",
+                "@aws-sdk/middleware-user-agent": "3.637.0",
                 "@aws-sdk/region-config-resolver": "3.614.0",
                 "@aws-sdk/types": "3.609.0",
-                "@aws-sdk/util-endpoints": "3.614.0",
+                "@aws-sdk/util-endpoints": "3.637.0",
                 "@aws-sdk/util-user-agent-browser": "3.609.0",
                 "@aws-sdk/util-user-agent-node": "3.614.0",
                 "@smithy/config-resolver": "^3.0.5",
-                "@smithy/core": "^2.3.2",
+                "@smithy/core": "^2.4.0",
                 "@smithy/fetch-http-handler": "^3.2.4",
                 "@smithy/hash-node": "^3.0.3",
                 "@smithy/invalid-dependency": "^3.0.3",
                 "@smithy/middleware-content-length": "^3.0.5",
                 "@smithy/middleware-endpoint": "^3.1.0",
-                "@smithy/middleware-retry": "^3.0.14",
+                "@smithy/middleware-retry": "^3.0.15",
                 "@smithy/middleware-serde": "^3.0.3",
                 "@smithy/middleware-stack": "^3.0.3",
                 "@smithy/node-config-provider": "^3.1.4",
                 "@smithy/node-http-handler": "^3.1.4",
                 "@smithy/protocol-http": "^4.1.0",
-                "@smithy/smithy-client": "^3.1.12",
+                "@smithy/smithy-client": "^3.2.0",
                 "@smithy/types": "^3.3.0",
                 "@smithy/url-parser": "^3.0.3",
                 "@smithy/util-base64": "^3.0.0",
                 "@smithy/util-body-length-browser": "^3.0.0",
                 "@smithy/util-body-length-node": "^3.0.0",
-                "@smithy/util-defaults-mode-browser": "^3.0.14",
-                "@smithy/util-defaults-mode-node": "^3.0.14",
+                "@smithy/util-defaults-mode-browser": "^3.0.15",
+                "@smithy/util-defaults-mode-node": "^3.0.15",
                 "@smithy/util-endpoints": "^2.0.5",
                 "@smithy/util-middleware": "^3.0.3",
                 "@smithy/util-retry": "^3.0.3",
@@ -373,17 +373,17 @@
             }
         },
         "node_modules/@aws-sdk/core": {
-            "version": "3.629.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.629.0.tgz",
-            "integrity": "sha512-+/ShPU/tyIBM3oY1cnjgNA/tFyHtlWq+wXF9xEKRv19NOpYbWQ+xzNwVjGq8vR07cCRqy/sDQLWPhxjtuV/FiQ==",
+            "version": "3.635.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz",
+            "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/core": "^2.3.2",
+                "@smithy/core": "^2.4.0",
                 "@smithy/node-config-provider": "^3.1.4",
                 "@smithy/property-provider": "^3.1.3",
                 "@smithy/protocol-http": "^4.1.0",
                 "@smithy/signature-v4": "^4.1.0",
-                "@smithy/smithy-client": "^3.1.12",
+                "@smithy/smithy-client": "^3.2.0",
                 "@smithy/types": "^3.3.0",
                 "@smithy/util-middleware": "^3.0.3",
                 "fast-xml-parser": "4.4.1",
@@ -409,9 +409,9 @@
             }
         },
         "node_modules/@aws-sdk/credential-provider-http": {
-            "version": "3.622.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.622.0.tgz",
-            "integrity": "sha512-VUHbr24Oll1RK3WR8XLUugLpgK9ZuxEm/NVeVqyFts1Ck9gsKpRg1x4eH7L7tW3SJ4TDEQNMbD7/7J+eoL2svg==",
+            "version": "3.635.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz",
+            "integrity": "sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/types": "3.609.0",
@@ -419,7 +419,7 @@
                 "@smithy/node-http-handler": "^3.1.4",
                 "@smithy/property-provider": "^3.1.3",
                 "@smithy/protocol-http": "^4.1.0",
-                "@smithy/smithy-client": "^3.1.12",
+                "@smithy/smithy-client": "^3.2.0",
                 "@smithy/types": "^3.3.0",
                 "@smithy/util-stream": "^3.1.3",
                 "tslib": "^2.6.2"
@@ -429,15 +429,15 @@
             }
         },
         "node_modules/@aws-sdk/credential-provider-ini": {
-            "version": "3.629.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.629.0.tgz",
-            "integrity": "sha512-r9fI7BABARvVDp77DBUImQzYdvarAIdhbvpCEZib0rlpvfWu3zxE9KZcapCAAi0MPjxeDfb7RMehFQIkAP7mYw==",
+            "version": "3.637.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.637.0.tgz",
+            "integrity": "sha512-h+PFCWfZ0Q3Dx84SppET/TFpcQHmxFW8/oV9ArEvMilw4EBN+IlxgbL0CnHwjHW64szcmrM0mbebjEfHf4FXmw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/credential-provider-env": "3.620.1",
-                "@aws-sdk/credential-provider-http": "3.622.0",
+                "@aws-sdk/credential-provider-http": "3.635.0",
                 "@aws-sdk/credential-provider-process": "3.620.1",
-                "@aws-sdk/credential-provider-sso": "3.629.0",
+                "@aws-sdk/credential-provider-sso": "3.637.0",
                 "@aws-sdk/credential-provider-web-identity": "3.621.0",
                 "@aws-sdk/types": "3.609.0",
                 "@smithy/credential-provider-imds": "^3.2.0",
@@ -450,20 +450,20 @@
                 "node": ">=16.0.0"
             },
             "peerDependencies": {
-                "@aws-sdk/client-sts": "^3.629.0"
+                "@aws-sdk/client-sts": "^3.637.0"
             }
         },
         "node_modules/@aws-sdk/credential-provider-node": {
-            "version": "3.629.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.629.0.tgz",
-            "integrity": "sha512-868hnVOLlXOBHk91Rl0jZIRgr/M4WJCa0nOrW9A9yidsQxuZp9P0vshDmm4hMvNZadmPIfo0Rra2MpA4RELoCw==",
+            "version": "3.637.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.637.0.tgz",
+            "integrity": "sha512-yoEhoxJJfs7sPVQ6Is939BDQJZpZCoUgKr/ySse4YKOZ24t4VqgHA6+wV7rYh+7IW24Rd91UTvEzSuHYTlxlNA==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/credential-provider-env": "3.620.1",
-                "@aws-sdk/credential-provider-http": "3.622.0",
-                "@aws-sdk/credential-provider-ini": "3.629.0",
+                "@aws-sdk/credential-provider-http": "3.635.0",
+                "@aws-sdk/credential-provider-ini": "3.637.0",
                 "@aws-sdk/credential-provider-process": "3.620.1",
-                "@aws-sdk/credential-provider-sso": "3.629.0",
+                "@aws-sdk/credential-provider-sso": "3.637.0",
                 "@aws-sdk/credential-provider-web-identity": "3.621.0",
                 "@aws-sdk/types": "3.609.0",
                 "@smithy/credential-provider-imds": "^3.2.0",
@@ -493,12 +493,12 @@
             }
         },
         "node_modules/@aws-sdk/credential-provider-sso": {
-            "version": "3.629.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.629.0.tgz",
-            "integrity": "sha512-Lf4XOuj6jamxgGZGrVojERh5S+NS2t2S4CUOnAu6tJ5U0GPlpjhINUKlcVxJBpsIXudMGW1nkumAd3+kazCPig==",
+            "version": "3.637.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.637.0.tgz",
+            "integrity": "sha512-Mvz+h+e62/tl+dVikLafhv+qkZJ9RUb8l2YN/LeKMWkxQylPT83CPk9aimVhCV89zth1zpREArl97+3xsfgQvA==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@aws-sdk/client-sso": "3.629.0",
+                "@aws-sdk/client-sso": "3.637.0",
                 "@aws-sdk/token-providers": "3.614.0",
                 "@aws-sdk/types": "3.609.0",
                 "@smithy/property-provider": "^3.1.3",
@@ -573,13 +573,13 @@
             }
         },
         "node_modules/@aws-sdk/middleware-user-agent": {
-            "version": "3.620.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.620.0.tgz",
-            "integrity": "sha512-bvS6etn+KsuL32ubY5D3xNof1qkenpbJXf/ugGXbg0n98DvDFQ/F+SMLxHgbnER5dsKYchNnhmtI6/FC3HFu/A==",
+            "version": "3.637.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.637.0.tgz",
+            "integrity": "sha512-EYo0NE9/da/OY8STDsK2LvM4kNa79DBsf4YVtaG4P5pZ615IeFsD8xOHZeuJmUrSMlVQ8ywPRX7WMucUybsKug==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/types": "3.609.0",
-                "@aws-sdk/util-endpoints": "3.614.0",
+                "@aws-sdk/util-endpoints": "3.637.0",
                 "@smithy/protocol-http": "^4.1.0",
                 "@smithy/types": "^3.3.0",
                 "tslib": "^2.6.2"
@@ -638,9 +638,9 @@
             }
         },
         "node_modules/@aws-sdk/util-endpoints": {
-            "version": "3.614.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.614.0.tgz",
-            "integrity": "sha512-wK2cdrXHH4oz4IomV/yrGkftU9A+ITB6nFL+rxxyO78is2ifHJpFdV4aqk4LSkXYPi6CXWNru/Dqc7yiKXgJPw==",
+            "version": "3.637.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.637.0.tgz",
+            "integrity": "sha512-pAqOKUHeVWHEXXDIp/qoMk/6jyxIb6GGjnK1/f8dKHtKIEs4tKsnnL563gceEvdad53OPXIt86uoevCcCzmBnw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/types": "3.609.0",
@@ -715,9 +715,9 @@
             }
         },
         "node_modules/@babel/compat-data": {
-            "version": "7.25.2",
-            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
-            "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==",
+            "version": "7.25.4",
+            "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
+            "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
             "dev": true,
             "license": "MIT",
             "peer": true,
@@ -777,14 +777,14 @@
             }
         },
         "node_modules/@babel/generator": {
-            "version": "7.25.0",
-            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
-            "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
+            "version": "7.25.5",
+            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz",
+            "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==",
             "dev": true,
             "license": "MIT",
             "peer": true,
             "dependencies": {
-                "@babel/types": "^7.25.0",
+                "@babel/types": "^7.25.4",
                 "@jridgewell/gen-mapping": "^0.3.5",
                 "@jridgewell/trace-mapping": "^0.3.25",
                 "jsesc": "^2.5.1"
@@ -927,14 +927,14 @@
             }
         },
         "node_modules/@babel/parser": {
-            "version": "7.25.3",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
-            "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
+            "version": "7.25.4",
+            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz",
+            "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==",
             "dev": true,
             "license": "MIT",
             "peer": true,
             "dependencies": {
-                "@babel/types": "^7.25.2"
+                "@babel/types": "^7.25.4"
             },
             "bin": {
                 "parser": "bin/babel-parser.js"
@@ -960,18 +960,18 @@
             }
         },
         "node_modules/@babel/traverse": {
-            "version": "7.25.3",
-            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
-            "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
+            "version": "7.25.4",
+            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz",
+            "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==",
             "dev": true,
             "license": "MIT",
             "peer": true,
             "dependencies": {
                 "@babel/code-frame": "^7.24.7",
-                "@babel/generator": "^7.25.0",
-                "@babel/parser": "^7.25.3",
+                "@babel/generator": "^7.25.4",
+                "@babel/parser": "^7.25.4",
                 "@babel/template": "^7.25.0",
-                "@babel/types": "^7.25.2",
+                "@babel/types": "^7.25.4",
                 "debug": "^4.3.1",
                 "globals": "^11.1.0"
             },
@@ -991,9 +991,9 @@
             }
         },
         "node_modules/@babel/types": {
-            "version": "7.25.2",
-            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
-            "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
+            "version": "7.25.4",
+            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz",
+            "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==",
             "dev": true,
             "license": "MIT",
             "peer": true,
@@ -1079,55 +1079,6 @@
                 "url": "https://opencollective.com/eslint"
             }
         },
-        "node_modules/@eslint/eslintrc/node_modules/argparse": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-            "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-            "dev": true,
-            "license": "Python-2.0"
-        },
-        "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
-            "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "balanced-match": "^1.0.0",
-                "concat-map": "0.0.1"
-            }
-        },
-        "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
-            "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
-            "dev": true,
-            "license": "Apache-2.0",
-            "engines": {
-                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-            },
-            "funding": {
-                "url": "https://opencollective.com/eslint"
-            }
-        },
-        "node_modules/@eslint/eslintrc/node_modules/espree": {
-            "version": "10.1.0",
-            "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
-            "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
-            "dev": true,
-            "license": "BSD-2-Clause",
-            "dependencies": {
-                "acorn": "^8.12.0",
-                "acorn-jsx": "^5.3.2",
-                "eslint-visitor-keys": "^4.0.0"
-            },
-            "engines": {
-                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-            },
-            "funding": {
-                "url": "https://opencollective.com/eslint"
-            }
-        },
         "node_modules/@eslint/eslintrc/node_modules/globals": {
             "version": "14.0.0",
             "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
@@ -1141,32 +1092,6 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-            "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "argparse": "^2.0.1"
-            },
-            "bin": {
-                "js-yaml": "bin/js-yaml.js"
-            }
-        },
-        "node_modules/@eslint/eslintrc/node_modules/minimatch": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-            "dev": true,
-            "license": "ISC",
-            "dependencies": {
-                "brace-expansion": "^1.1.7"
-            },
-            "engines": {
-                "node": "*"
-            }
-        },
         "node_modules/@eslint/js": {
             "version": "9.9.1",
             "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
@@ -1224,30 +1149,6 @@
                 "node": ">=10.10.0"
             }
         },
-        "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
-            "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "balanced-match": "^1.0.0",
-                "concat-map": "0.0.1"
-            }
-        },
-        "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-            "dev": true,
-            "license": "ISC",
-            "dependencies": {
-                "brace-expansion": "^1.1.7"
-            },
-            "engines": {
-                "node": "*"
-            }
-        },
         "node_modules/@humanwhocodes/module-importer": {
             "version": "1.0.1",
             "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
@@ -1516,12 +1417,36 @@
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
+        "node_modules/@npmcli/arborist/node_modules/brace-expansion": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+            "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+            "license": "MIT",
+            "dependencies": {
+                "balanced-match": "^1.0.0"
+            }
+        },
         "node_modules/@npmcli/arborist/node_modules/lru-cache": {
             "version": "10.4.3",
             "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
             "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
             "license": "ISC"
         },
+        "node_modules/@npmcli/arborist/node_modules/minimatch": {
+            "version": "9.0.5",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+            "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+            "license": "ISC",
+            "dependencies": {
+                "brace-expansion": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
         "node_modules/@npmcli/arborist/node_modules/semver": {
             "version": "7.6.3",
             "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
@@ -1636,6 +1561,30 @@
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
+        "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+            "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+            "license": "MIT",
+            "dependencies": {
+                "balanced-match": "^1.0.0"
+            }
+        },
+        "node_modules/@npmcli/map-workspaces/node_modules/minimatch": {
+            "version": "9.0.5",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+            "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+            "license": "ISC",
+            "dependencies": {
+                "brace-expansion": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
         "node_modules/@npmcli/metavuln-calculator": {
             "version": "7.1.1",
             "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz",
@@ -1784,9 +1733,9 @@
             }
         },
         "node_modules/@opentelemetry/context-async-hooks": {
-            "version": "1.25.1",
-            "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz",
-            "integrity": "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==",
+            "version": "1.26.0",
+            "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.26.0.tgz",
+            "integrity": "sha512-HedpXXYzzbaoutw6DFLWLDket2FwLkLpil4hGCZ1xYEIMTcivdfwEOISgdbLEWyG3HW52gTq2V9mOVJrONgiwg==",
             "license": "Apache-2.0",
             "engines": {
                 "node": ">=14"
@@ -1796,12 +1745,12 @@
             }
         },
         "node_modules/@opentelemetry/core": {
-            "version": "1.25.1",
-            "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz",
-            "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==",
+            "version": "1.26.0",
+            "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.26.0.tgz",
+            "integrity": "sha512-1iKxXXE8415Cdv0yjG3G6hQnB5eVEsJce3QaawX8SjDn0mAS0ZM8fAbZZJD4ajvhC15cePvosSCut404KrIIvQ==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@opentelemetry/semantic-conventions": "1.25.1"
+                "@opentelemetry/semantic-conventions": "1.27.0"
             },
             "engines": {
                 "node": ">=14"
@@ -1811,15 +1760,15 @@
             }
         },
         "node_modules/@opentelemetry/exporter-zipkin": {
-            "version": "1.25.1",
-            "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz",
-            "integrity": "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==",
+            "version": "1.26.0",
+            "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.26.0.tgz",
+            "integrity": "sha512-PW5R34n3SJHO4t0UetyHKiXL6LixIqWN6lWncg3eRXhKuT30x+b7m5sDJS0kEWRfHeS+kG7uCw2vBzmB2lk3Dw==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@opentelemetry/core": "1.25.1",
-                "@opentelemetry/resources": "1.25.1",
-                "@opentelemetry/sdk-trace-base": "1.25.1",
-                "@opentelemetry/semantic-conventions": "1.25.1"
+                "@opentelemetry/core": "1.26.0",
+                "@opentelemetry/resources": "1.26.0",
+                "@opentelemetry/sdk-trace-base": "1.26.0",
+                "@opentelemetry/semantic-conventions": "1.27.0"
             },
             "engines": {
                 "node": ">=14"
@@ -1864,6 +1813,15 @@
                 "@opentelemetry/api": "^1.3.0"
             }
         },
+        "node_modules/@opentelemetry/instrumentation-grpc/node_modules/@opentelemetry/semantic-conventions": {
+            "version": "1.25.1",
+            "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz",
+            "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==",
+            "license": "Apache-2.0",
+            "engines": {
+                "node": ">=14"
+            }
+        },
         "node_modules/@opentelemetry/instrumentation/node_modules/semver": {
             "version": "7.6.3",
             "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
@@ -1877,12 +1835,12 @@
             }
         },
         "node_modules/@opentelemetry/propagator-b3": {
-            "version": "1.25.1",
-            "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz",
-            "integrity": "sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==",
+            "version": "1.26.0",
+            "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.26.0.tgz",
+            "integrity": "sha512-vvVkQLQ/lGGyEy9GT8uFnI047pajSOVnZI2poJqVGD3nJ+B9sFGdlHNnQKophE3lHfnIH0pw2ubrCTjZCgIj+Q==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@opentelemetry/core": "1.25.1"
+                "@opentelemetry/core": "1.26.0"
             },
             "engines": {
                 "node": ">=14"
@@ -1892,12 +1850,12 @@
             }
         },
         "node_modules/@opentelemetry/propagator-jaeger": {
-            "version": "1.25.1",
-            "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz",
-            "integrity": "sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==",
+            "version": "1.26.0",
+            "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.26.0.tgz",
+            "integrity": "sha512-DelFGkCdaxA1C/QA0Xilszfr0t4YbGd3DjxiCDPh34lfnFr+VkkrjV9S8ZTJvAzfdKERXhfOxIKBoGPJwoSz7Q==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@opentelemetry/core": "1.25.1"
+                "@opentelemetry/core": "1.26.0"
             },
             "engines": {
                 "node": ">=14"
@@ -1907,13 +1865,13 @@
             }
         },
         "node_modules/@opentelemetry/resources": {
-            "version": "1.25.1",
-            "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz",
-            "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==",
+            "version": "1.26.0",
+            "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.26.0.tgz",
+            "integrity": "sha512-CPNYchBE7MBecCSVy0HKpUISEeJOniWqcHaAHpmasZ3j9o6V3AyBzhRc90jdmemq0HOxDr6ylhUbDhBqqPpeNw==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@opentelemetry/core": "1.25.1",
-                "@opentelemetry/semantic-conventions": "1.25.1"
+                "@opentelemetry/core": "1.26.0",
+                "@opentelemetry/semantic-conventions": "1.27.0"
             },
             "engines": {
                 "node": ">=14"
@@ -1923,14 +1881,14 @@
             }
         },
         "node_modules/@opentelemetry/sdk-trace-base": {
-            "version": "1.25.1",
-            "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz",
-            "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==",
+            "version": "1.26.0",
+            "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.26.0.tgz",
+            "integrity": "sha512-olWQldtvbK4v22ymrKLbIcBi9L2SpMO84sCPY54IVsJhP9fRsxJT194C/AVaAuJzLE30EdhhM1VmvVYR7az+cw==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@opentelemetry/core": "1.25.1",
-                "@opentelemetry/resources": "1.25.1",
-                "@opentelemetry/semantic-conventions": "1.25.1"
+                "@opentelemetry/core": "1.26.0",
+                "@opentelemetry/resources": "1.26.0",
+                "@opentelemetry/semantic-conventions": "1.27.0"
             },
             "engines": {
                 "node": ">=14"
@@ -1940,16 +1898,16 @@
             }
         },
         "node_modules/@opentelemetry/sdk-trace-node": {
-            "version": "1.25.1",
-            "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz",
-            "integrity": "sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==",
+            "version": "1.26.0",
+            "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.26.0.tgz",
+            "integrity": "sha512-Fj5IVKrj0yeUwlewCRwzOVcr5avTuNnMHWf7GPc1t6WaT78J6CJyF3saZ/0RkZfdeNO8IcBl/bNcWMVZBMRW8Q==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@opentelemetry/context-async-hooks": "1.25.1",
-                "@opentelemetry/core": "1.25.1",
-                "@opentelemetry/propagator-b3": "1.25.1",
-                "@opentelemetry/propagator-jaeger": "1.25.1",
-                "@opentelemetry/sdk-trace-base": "1.25.1",
+                "@opentelemetry/context-async-hooks": "1.26.0",
+                "@opentelemetry/core": "1.26.0",
+                "@opentelemetry/propagator-b3": "1.26.0",
+                "@opentelemetry/propagator-jaeger": "1.26.0",
+                "@opentelemetry/sdk-trace-base": "1.26.0",
                 "semver": "^7.5.2"
             },
             "engines": {
@@ -1972,9 +1930,9 @@
             }
         },
         "node_modules/@opentelemetry/semantic-conventions": {
-            "version": "1.25.1",
-            "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz",
-            "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==",
+            "version": "1.27.0",
+            "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz",
+            "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==",
             "license": "Apache-2.0",
             "engines": {
                 "node": ">=14"
@@ -2168,6 +2126,28 @@
                 }
             }
         },
+        "node_modules/@pulumi/pulumi/node_modules/argparse": {
+            "version": "1.0.10",
+            "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+            "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+            "license": "MIT",
+            "dependencies": {
+                "sprintf-js": "~1.0.2"
+            }
+        },
+        "node_modules/@pulumi/pulumi/node_modules/js-yaml": {
+            "version": "3.14.1",
+            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+            "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+            "license": "MIT",
+            "dependencies": {
+                "argparse": "^1.0.7",
+                "esprima": "^4.0.0"
+            },
+            "bin": {
+                "js-yaml": "bin/js-yaml.js"
+            }
+        },
         "node_modules/@pulumi/pulumi/node_modules/semver": {
             "version": "7.6.3",
             "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
@@ -2180,6 +2160,12 @@
                 "node": ">=10"
             }
         },
+        "node_modules/@pulumi/pulumi/node_modules/sprintf-js": {
+            "version": "1.0.3",
+            "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+            "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+            "license": "BSD-3-Clause"
+        },
         "node_modules/@pulumi/query": {
             "version": "0.3.0",
             "resolved": "https://registry.npmjs.org/@pulumi/query/-/query-0.3.0.tgz",
@@ -2302,18 +2288,20 @@
             }
         },
         "node_modules/@smithy/core": {
-            "version": "2.3.2",
-            "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.3.2.tgz",
-            "integrity": "sha512-in5wwt6chDBcUv1Lw1+QzZxN9fBffi+qOixfb65yK4sDuKG7zAUO9HAFqmVzsZM3N+3tTyvZjtnDXePpvp007Q==",
+            "version": "2.4.0",
+            "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.0.tgz",
+            "integrity": "sha512-cHXq+FneIF/KJbt4q4pjN186+Jf4ZB0ZOqEaZMBhT79srEyGDDBV31NqBRBjazz8ppQ1bJbDJMY9ba5wKFV36w==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@smithy/middleware-endpoint": "^3.1.0",
-                "@smithy/middleware-retry": "^3.0.14",
+                "@smithy/middleware-retry": "^3.0.15",
                 "@smithy/middleware-serde": "^3.0.3",
                 "@smithy/protocol-http": "^4.1.0",
-                "@smithy/smithy-client": "^3.1.12",
+                "@smithy/smithy-client": "^3.2.0",
                 "@smithy/types": "^3.3.0",
+                "@smithy/util-body-length-browser": "^3.0.0",
                 "@smithy/util-middleware": "^3.0.3",
+                "@smithy/util-utf8": "^3.0.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2419,15 +2407,15 @@
             }
         },
         "node_modules/@smithy/middleware-retry": {
-            "version": "3.0.14",
-            "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.14.tgz",
-            "integrity": "sha512-7ZaWZJOjUxa5hgmuMspyt8v/zVsh0GXYuF7OvCmdcbVa/xbnKQoYC+uYKunAqRGTkxjOyuOCw9rmFUFOqqC0eQ==",
+            "version": "3.0.15",
+            "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.15.tgz",
+            "integrity": "sha512-iTMedvNt1ApdvkaoE8aSDuwaoc+BhvHqttbA/FO4Ty+y/S5hW6Ci/CTScG7vam4RYJWZxdTElc3MEfHRVH6cgQ==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@smithy/node-config-provider": "^3.1.4",
                 "@smithy/protocol-http": "^4.1.0",
                 "@smithy/service-error-classification": "^3.0.3",
-                "@smithy/smithy-client": "^3.1.12",
+                "@smithy/smithy-client": "^3.2.0",
                 "@smithy/types": "^3.3.0",
                 "@smithy/util-middleware": "^3.0.3",
                 "@smithy/util-retry": "^3.0.3",
@@ -2593,9 +2581,9 @@
             }
         },
         "node_modules/@smithy/smithy-client": {
-            "version": "3.1.12",
-            "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.12.tgz",
-            "integrity": "sha512-wtm8JtsycthkHy1YA4zjIh2thJgIQ9vGkoR639DBx5lLlLNU0v4GARpQZkr2WjXue74nZ7MiTSWfVrLkyD8RkA==",
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz",
+            "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@smithy/middleware-endpoint": "^3.1.0",
@@ -2693,13 +2681,13 @@
             }
         },
         "node_modules/@smithy/util-defaults-mode-browser": {
-            "version": "3.0.14",
-            "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.14.tgz",
-            "integrity": "sha512-0iwTgKKmAIf+vFLV8fji21Jb2px11ktKVxbX6LIDPAUJyWQqGqBVfwba7xwa1f2FZUoolYQgLvxQEpJycXuQ5w==",
+            "version": "3.0.15",
+            "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.15.tgz",
+            "integrity": "sha512-FZ4Psa3vjp8kOXcd3HJOiDPBCWtiilLl57r0cnNtq/Ga9RSDrM5ERL6xt+tO43+2af6Pn5Yp92x2n5vPuduNfg==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@smithy/property-provider": "^3.1.3",
-                "@smithy/smithy-client": "^3.1.12",
+                "@smithy/smithy-client": "^3.2.0",
                 "@smithy/types": "^3.3.0",
                 "bowser": "^2.11.0",
                 "tslib": "^2.6.2"
@@ -2709,16 +2697,16 @@
             }
         },
         "node_modules/@smithy/util-defaults-mode-node": {
-            "version": "3.0.14",
-            "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.14.tgz",
-            "integrity": "sha512-e9uQarJKfXApkTMMruIdxHprhcXivH1flYCe8JRDTzkkLx8dA3V5J8GZlST9yfDiRWkJpZJlUXGN9Rc9Ade3OQ==",
+            "version": "3.0.15",
+            "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.15.tgz",
+            "integrity": "sha512-KSyAAx2q6d0t6f/S4XB2+3+6aQacm3aLMhs9aLMqn18uYGUepbdssfogW5JQZpc6lXNBnp0tEnR5e9CEKmEd7A==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@smithy/config-resolver": "^3.0.5",
                 "@smithy/credential-provider-imds": "^3.2.0",
                 "@smithy/node-config-provider": "^3.1.4",
                 "@smithy/property-provider": "^3.1.3",
-                "@smithy/smithy-client": "^3.1.12",
+                "@smithy/smithy-client": "^3.2.0",
                 "@smithy/types": "^3.3.0",
                 "tslib": "^2.6.2"
             },
@@ -2871,10 +2859,34 @@
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
+        "node_modules/@tufjs/models/node_modules/brace-expansion": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+            "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+            "license": "MIT",
+            "dependencies": {
+                "balanced-match": "^1.0.0"
+            }
+        },
+        "node_modules/@tufjs/models/node_modules/minimatch": {
+            "version": "9.0.5",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+            "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+            "license": "ISC",
+            "dependencies": {
+                "brace-expansion": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
         "node_modules/@types/aws-lambda": {
-            "version": "8.10.143",
-            "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.143.tgz",
-            "integrity": "sha512-u5vzlcR14ge/4pMTTMDQr3MF0wEe38B2F9o84uC4F43vN5DGTy63npRrB6jQhyt+C0lGv4ZfiRcRkqJoZuPnmg==",
+            "version": "8.10.145",
+            "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.145.tgz",
+            "integrity": "sha512-dtByW6WiFk5W5Jfgz1VM+YPA21xMXTuSFoLYIDY0L44jDLLflVPtZkYuu3/YxpGcvjzKFBZLU+GyKjR0HOYtyw==",
             "license": "MIT"
         },
         "node_modules/@types/cacheable-request": {
@@ -3059,13 +3071,11 @@
             }
         },
         "node_modules/argparse": {
-            "version": "1.0.10",
-            "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
-            "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
-            "license": "MIT",
-            "dependencies": {
-                "sprintf-js": "~1.0.2"
-            }
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+            "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+            "dev": true,
+            "license": "Python-2.0"
         },
         "node_modules/available-typed-arrays": {
             "version": "1.0.7",
@@ -3083,9 +3093,9 @@
             }
         },
         "node_modules/aws-sdk": {
-            "version": "2.1673.0",
-            "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1673.0.tgz",
-            "integrity": "sha512-7tcc+y7XmCt2aq3vq46xpJTDMNqukFhJOXsQuuwsMZiydZpGG7l7wbpTOtfFhktieSjLg4V9eyznpnZNz5aooA==",
+            "version": "2.1684.0",
+            "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1684.0.tgz",
+            "integrity": "sha512-Womhydf2UhEeLALLOUEDIuJ1Iv2k9aOsqAeDaQT3AhayiYt7pguvncs5IgEAxZ0TRH7driA7kTk+iGnCP2jMMA==",
             "hasInstallScript": true,
             "license": "Apache-2.0",
             "dependencies": {
@@ -3161,12 +3171,14 @@
             "license": "MIT"
         },
         "node_modules/brace-expansion": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-            "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+            "version": "1.1.11",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+            "dev": true,
             "license": "MIT",
             "dependencies": {
-                "balanced-match": "^1.0.0"
+                "balanced-match": "^1.0.0",
+                "concat-map": "0.0.1"
             }
         },
         "node_modules/browserslist": {
@@ -3330,9 +3342,9 @@
             }
         },
         "node_modules/caniuse-lite": {
-            "version": "1.0.30001651",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
-            "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
+            "version": "1.0.30001653",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz",
+            "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==",
             "dev": true,
             "funding": [
                 {
@@ -3377,9 +3389,9 @@
             }
         },
         "node_modules/cjs-module-lexer": {
-            "version": "1.3.1",
-            "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz",
-            "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==",
+            "version": "1.4.0",
+            "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.0.tgz",
+            "integrity": "sha512-N1NGmowPlGBLsOZLPvm48StN04V4YvQRL0i6b7ctrVY3epjP/ct7hFLOItz6pDIvRjwpfPxi52a2UWV2ziir8g==",
             "license": "MIT"
         },
         "node_modules/clean-stack": {
@@ -3701,9 +3713,9 @@
             "license": "MIT"
         },
         "node_modules/electron-to-chromium": {
-            "version": "1.5.6",
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz",
-            "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==",
+            "version": "1.5.13",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
+            "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
             "dev": true,
             "license": "ISC",
             "peer": true
@@ -3949,6 +3961,32 @@
                 "eslint": ">=8.23.0"
             }
         },
+        "node_modules/eslint-plugin-n/node_modules/brace-expansion": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+            "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+            "dev": true,
+            "license": "MIT",
+            "dependencies": {
+                "balanced-match": "^1.0.0"
+            }
+        },
+        "node_modules/eslint-plugin-n/node_modules/minimatch": {
+            "version": "9.0.5",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+            "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+            "dev": true,
+            "license": "ISC",
+            "dependencies": {
+                "brace-expansion": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
         "node_modules/eslint-plugin-n/node_modules/semver": {
             "version": "7.6.3",
             "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
@@ -4083,24 +4121,6 @@
                 "url": "https://github.com/chalk/ansi-styles?sponsor=1"
             }
         },
-        "node_modules/eslint/node_modules/argparse": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-            "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-            "dev": true,
-            "license": "Python-2.0"
-        },
-        "node_modules/eslint/node_modules/brace-expansion": {
-            "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "balanced-match": "^1.0.0",
-                "concat-map": "0.0.1"
-            }
-        },
         "node_modules/eslint/node_modules/chalk": {
             "version": "4.1.2",
             "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -4181,6 +4201,24 @@
                 "url": "https://opencollective.com/eslint"
             }
         },
+        "node_modules/eslint/node_modules/espree": {
+            "version": "9.6.1",
+            "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+            "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+            "dev": true,
+            "license": "BSD-2-Clause",
+            "dependencies": {
+                "acorn": "^8.9.0",
+                "acorn-jsx": "^5.3.2",
+                "eslint-visitor-keys": "^3.4.1"
+            },
+            "engines": {
+                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+            },
+            "funding": {
+                "url": "https://opencollective.com/eslint"
+            }
+        },
         "node_modules/eslint/node_modules/estraverse": {
             "version": "5.3.0",
             "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
@@ -4217,32 +4255,6 @@
                 "node": ">=8"
             }
         },
-        "node_modules/eslint/node_modules/js-yaml": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-            "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "argparse": "^2.0.1"
-            },
-            "bin": {
-                "js-yaml": "bin/js-yaml.js"
-            }
-        },
-        "node_modules/eslint/node_modules/minimatch": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-            "dev": true,
-            "license": "ISC",
-            "dependencies": {
-                "brace-expansion": "^1.1.7"
-            },
-            "engines": {
-                "node": "*"
-            }
-        },
         "node_modules/eslint/node_modules/supports-color": {
             "version": "7.2.0",
             "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -4257,31 +4269,31 @@
             }
         },
         "node_modules/espree": {
-            "version": "9.6.1",
-            "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
-            "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+            "version": "10.1.0",
+            "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+            "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
             "dev": true,
             "license": "BSD-2-Clause",
             "dependencies": {
-                "acorn": "^8.9.0",
+                "acorn": "^8.12.0",
                 "acorn-jsx": "^5.3.2",
-                "eslint-visitor-keys": "^3.4.1"
+                "eslint-visitor-keys": "^4.0.0"
             },
             "engines": {
-                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
             },
             "funding": {
                 "url": "https://opencollective.com/eslint"
             }
         },
         "node_modules/espree/node_modules/eslint-visitor-keys": {
-            "version": "3.4.3",
-            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-            "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+            "version": "4.0.0",
+            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+            "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
             "dev": true,
             "license": "Apache-2.0",
             "engines": {
-                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
             },
             "funding": {
                 "url": "https://opencollective.com/eslint"
@@ -4465,9 +4477,9 @@
             }
         },
         "node_modules/fdir": {
-            "version": "6.2.0",
-            "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.2.0.tgz",
-            "integrity": "sha512-9XaWcDl0riOX5j2kYfy0kKdg7skw3IY6kA4LFT8Tk2yF9UdrADUy8D6AJuBLtf7ISm/MksumwAHE3WVbMRyCLw==",
+            "version": "6.3.0",
+            "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.3.0.tgz",
+            "integrity": "sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==",
             "license": "MIT",
             "peerDependencies": {
                 "picomatch": "^3 || ^4"
@@ -4692,6 +4704,30 @@
                 "node": ">=10.13.0"
             }
         },
+        "node_modules/glob/node_modules/brace-expansion": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+            "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+            "license": "MIT",
+            "dependencies": {
+                "balanced-match": "^1.0.0"
+            }
+        },
+        "node_modules/glob/node_modules/minimatch": {
+            "version": "9.0.5",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+            "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+            "license": "ISC",
+            "dependencies": {
+                "brace-expansion": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
         "node_modules/globals": {
             "version": "15.9.0",
             "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
@@ -4948,6 +4984,30 @@
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
+        "node_modules/ignore-walk/node_modules/brace-expansion": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+            "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+            "license": "MIT",
+            "dependencies": {
+                "balanced-match": "^1.0.0"
+            }
+        },
+        "node_modules/ignore-walk/node_modules/minimatch": {
+            "version": "9.0.5",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+            "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+            "license": "ISC",
+            "dependencies": {
+                "brace-expansion": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
         "node_modules/import-fresh": {
             "version": "3.3.0",
             "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -5035,12 +5095,6 @@
                 "node": ">= 12"
             }
         },
-        "node_modules/ip-address/node_modules/sprintf-js": {
-            "version": "1.1.3",
-            "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
-            "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
-            "license": "BSD-3-Clause"
-        },
         "node_modules/is-arguments": {
             "version": "1.1.1",
             "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
@@ -5070,9 +5124,9 @@
             }
         },
         "node_modules/is-core-module": {
-            "version": "2.15.0",
-            "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
-            "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
+            "version": "2.15.1",
+            "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
+            "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
             "license": "MIT",
             "dependencies": {
                 "hasown": "^2.0.2"
@@ -5222,13 +5276,13 @@
             "peer": true
         },
         "node_modules/js-yaml": {
-            "version": "3.14.1",
-            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
-            "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+            "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+            "dev": true,
             "license": "MIT",
             "dependencies": {
-                "argparse": "^1.0.7",
-                "esprima": "^4.0.0"
+                "argparse": "^2.0.1"
             },
             "bin": {
                 "js-yaml": "bin/js-yaml.js"
@@ -5465,18 +5519,16 @@
             }
         },
         "node_modules/minimatch": {
-            "version": "9.0.5",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-            "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+            "dev": true,
             "license": "ISC",
             "dependencies": {
-                "brace-expansion": "^2.0.1"
+                "brace-expansion": "^1.1.7"
             },
             "engines": {
-                "node": ">=16 || 14 >=14.17"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/isaacs"
+                "node": "*"
             }
         },
         "node_modules/minimist": {
@@ -6379,9 +6431,9 @@
             }
         },
         "node_modules/protobufjs": {
-            "version": "7.3.2",
-            "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz",
-            "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==",
+            "version": "7.4.0",
+            "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz",
+            "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==",
             "hasInstallScript": true,
             "license": "BSD-3-Clause",
             "dependencies": {
@@ -6610,17 +6662,6 @@
                 "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "node_modules/rimraf/node_modules/brace-expansion": {
-            "version": "1.1.11",
-            "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-            "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "balanced-match": "^1.0.0",
-                "concat-map": "0.0.1"
-            }
-        },
         "node_modules/rimraf/node_modules/glob": {
             "version": "7.2.3",
             "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@@ -6643,19 +6684,6 @@
                 "url": "https://github.com/sponsors/isaacs"
             }
         },
-        "node_modules/rimraf/node_modules/minimatch": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-            "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-            "dev": true,
-            "license": "ISC",
-            "dependencies": {
-                "brace-expansion": "^1.1.7"
-            },
-            "engines": {
-                "node": "*"
-            }
-        },
         "node_modules/run-parallel": {
             "version": "1.2.0",
             "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -6854,15 +6882,15 @@
             }
         },
         "node_modules/spdx-license-ids": {
-            "version": "3.0.18",
-            "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
-            "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
+            "version": "3.0.20",
+            "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz",
+            "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==",
             "license": "CC0-1.0"
         },
         "node_modules/sprintf-js": {
-            "version": "1.0.3",
-            "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-            "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+            "version": "1.1.3",
+            "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
+            "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
             "license": "BSD-3-Clause"
         },
         "node_modules/ssri": {
@@ -7141,9 +7169,9 @@
             }
         },
         "node_modules/tslib": {
-            "version": "2.6.3",
-            "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
-            "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+            "version": "2.7.0",
+            "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
+            "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
             "license": "0BSD"
         },
         "node_modules/tuf-js": {
@@ -7187,9 +7215,9 @@
             }
         },
         "node_modules/undici-types": {
-            "version": "6.19.6",
-            "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.6.tgz",
-            "integrity": "sha512-e/vggGopEfTKSvj4ihnOLTsqhrKRN3LeO6qSN/GxohhuRv8qH9bNQ4B8W7e/vFL+0XTnmHPB4/kegunZGA4Org==",
+            "version": "6.19.8",
+            "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+            "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
             "license": "MIT"
         },
         "node_modules/unique-filename": {
diff --git a/api/composer.lock b/api/composer.lock
index 7901d3c308..a97d97cc08 100644
--- a/api/composer.lock
+++ b/api/composer.lock
@@ -1463,16 +1463,16 @@
         },
         {
             "name": "doctrine/migrations",
-            "version": "3.8.0",
+            "version": "3.8.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/migrations.git",
-                "reference": "535a70dcbd88b8c6ba945be050977457f4f4c06c"
+                "reference": "7760fbd0b7cb58bfb50415505a7bab821adf0877"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/migrations/zipball/535a70dcbd88b8c6ba945be050977457f4f4c06c",
-                "reference": "535a70dcbd88b8c6ba945be050977457f4f4c06c",
+                "url": "https://api.github.com/repos/doctrine/migrations/zipball/7760fbd0b7cb58bfb50415505a7bab821adf0877",
+                "reference": "7760fbd0b7cb58bfb50415505a7bab821adf0877",
                 "shasum": ""
             },
             "require": {
@@ -1495,6 +1495,7 @@
                 "doctrine/persistence": "^2 || ^3",
                 "doctrine/sql-formatter": "^1.0",
                 "ext-pdo_sqlite": "*",
+                "fig/log-test": "^1",
                 "phpstan/phpstan": "^1.10",
                 "phpstan/phpstan-deprecation-rules": "^1.1",
                 "phpstan/phpstan-phpunit": "^1.3",
@@ -1545,7 +1546,7 @@
             ],
             "support": {
                 "issues": "https://github.com/doctrine/migrations/issues",
-                "source": "https://github.com/doctrine/migrations/tree/3.8.0"
+                "source": "https://github.com/doctrine/migrations/tree/3.8.1"
             },
             "funding": [
                 {
@@ -1561,7 +1562,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-06-26T14:12:46+00:00"
+            "time": "2024-08-28T13:17:28+00:00"
         },
         {
             "name": "doctrine/orm",
diff --git a/e2e/package-lock.json b/e2e/package-lock.json
index 6bb508c99a..09d8a7e664 100644
--- a/e2e/package-lock.json
+++ b/e2e/package-lock.json
@@ -50,9 +50,9 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
-      "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
+      "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
       "dev": true,
       "license": "MIT",
       "peer": true,
@@ -92,17 +92,6 @@
         "url": "https://opencollective.com/babel"
       }
     },
-    "node_modules/@babel/core/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "license": "ISC",
-      "peer": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
     "node_modules/@babel/eslint-parser": {
       "version": "7.25.1",
       "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.25.1.tgz",
@@ -122,35 +111,15 @@
         "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0"
       }
     },
-    "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
-      "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@babel/eslint-parser/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
     "node_modules/@babel/generator": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
-      "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
+      "version": "7.25.5",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz",
+      "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
-        "@babel/types": "^7.25.0",
+        "@babel/types": "^7.25.4",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
         "jsesc": "^2.5.1"
@@ -177,17 +146,6 @@
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "license": "ISC",
-      "peer": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
     "node_modules/@babel/helper-module-imports": {
       "version": "7.24.7",
       "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz",
@@ -303,100 +261,15 @@
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/highlight/node_modules/ansi-styles": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
-      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
-      "dev": true,
-      "license": "MIT",
-      "peer": true,
-      "dependencies": {
-        "color-convert": "^1.9.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-      "dev": true,
-      "license": "MIT",
-      "peer": true,
-      "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/color-convert": {
-      "version": "1.9.3",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
-      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
-      "dev": true,
-      "license": "MIT",
-      "peer": true,
-      "dependencies": {
-        "color-name": "1.1.3"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/color-name": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
-      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
-      "dev": true,
-      "license": "MIT",
-      "peer": true
-    },
-    "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-      "dev": true,
-      "license": "MIT",
-      "peer": true,
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
-      "dev": true,
-      "license": "MIT",
-      "peer": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/@babel/highlight/node_modules/supports-color": {
-      "version": "5.5.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
-      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
-      "dev": true,
-      "license": "MIT",
-      "peer": true,
-      "dependencies": {
-        "has-flag": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/@babel/parser": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
-      "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz",
+      "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
-        "@babel/types": "^7.25.2"
+        "@babel/types": "^7.25.4"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -422,18 +295,18 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
-      "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz",
+      "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
         "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.0",
-        "@babel/parser": "^7.25.3",
+        "@babel/generator": "^7.25.4",
+        "@babel/parser": "^7.25.4",
         "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.2",
+        "@babel/types": "^7.25.4",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -453,9 +326,9 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
-      "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz",
+      "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==",
       "dev": true,
       "license": "MIT",
       "peer": true,
@@ -546,6 +419,19 @@
         "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
       }
     },
+    "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/@eslint-community/regexpp": {
       "version": "4.11.0",
       "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz",
@@ -719,30 +605,6 @@
         "eslint-scope": "5.1.1"
       }
     },
-    "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^4.1.1"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
     "node_modules/@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -795,14 +657,14 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.2.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.2.0.tgz",
-      "integrity": "sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==",
+      "version": "22.5.1",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.1.tgz",
+      "integrity": "sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw==",
       "dev": true,
       "license": "MIT",
       "optional": true,
       "dependencies": {
-        "undici-types": "~6.13.0"
+        "undici-types": "~6.19.2"
       }
     },
     "node_modules/@types/sinonjs__fake-timers": {
@@ -928,19 +790,17 @@
       }
     },
     "node_modules/ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
-        "color-convert": "^2.0.1"
+        "color-convert": "^1.9.0"
       },
       "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+        "node": ">=4"
       }
     },
     "node_modules/arch": {
@@ -1002,9 +862,9 @@
       }
     },
     "node_modules/async": {
-      "version": "3.2.5",
-      "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
-      "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
+      "version": "3.2.6",
+      "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+      "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
       "dev": true,
       "license": "MIT"
     },
@@ -1036,9 +896,9 @@
       }
     },
     "node_modules/aws4": {
-      "version": "1.13.1",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.1.tgz",
-      "integrity": "sha512-u5w79Rd7SU4JaIlA/zFqG+gOiuq25q5VLyZ8E+ijJeILuTxVzZgp2CaGw/UTw6pXYN9XMO9yiqj/nEHmhTG5CA==",
+      "version": "1.13.2",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz",
+      "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==",
       "dev": true,
       "license": "MIT"
     },
@@ -1215,9 +1075,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001651",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
-      "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
+      "version": "1.0.30001653",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz",
+      "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==",
       "dev": true,
       "funding": [
         {
@@ -1244,33 +1104,19 @@
       "license": "Apache-2.0"
     },
     "node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/chalk/node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
-        "has-flag": "^4.0.0"
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=4"
       }
     },
     "node_modules/check-more-types": {
@@ -1356,24 +1202,23 @@
       }
     },
     "node_modules/color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
-        "color-name": "~1.1.4"
-      },
-      "engines": {
-        "node": ">=7.0.0"
+        "color-name": "1.1.3"
       }
     },
     "node_modules/color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "peer": true
     },
     "node_modules/colorette": {
       "version": "2.0.20",
@@ -1510,6 +1355,111 @@
         "node": "^16.0.0 || ^18.0.0 || >=20.0.0"
       }
     },
+    "node_modules/cypress/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/cypress/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/cypress/node_modules/chalk/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cypress/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/cypress/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/cypress/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cypress/node_modules/semver": {
+      "version": "7.6.3",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+      "dev": true,
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/cypress/node_modules/supports-color": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
     "node_modules/dashdash": {
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -1524,9 +1474,9 @@
       }
     },
     "node_modules/dayjs": {
-      "version": "1.11.12",
-      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz",
-      "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==",
+      "version": "1.11.13",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz",
+      "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
       "dev": true,
       "license": "MIT"
     },
@@ -1608,9 +1558,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.6",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz",
-      "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==",
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
+      "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
       "dev": true,
       "license": "ISC",
       "peer": true
@@ -1681,16 +1631,13 @@
       }
     },
     "node_modules/escape-string-regexp": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
-      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=0.8.0"
       }
     },
     "node_modules/eslint": {
@@ -1836,33 +1783,27 @@
       }
     },
     "node_modules/eslint-scope": {
-      "version": "7.2.2",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
-      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
         "esrecurse": "^4.3.0",
-        "estraverse": "^5.2.0"
+        "estraverse": "^4.1.1"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
+        "node": ">=8.0.0"
       }
     },
     "node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+      "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
       "dev": true,
       "license": "Apache-2.0",
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
+        "node": ">=10"
       }
     },
     "node_modules/eslint/node_modules/@eslint/eslintrc": {
@@ -1899,6 +1840,102 @@
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
+    "node_modules/eslint/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/eslint/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/eslint/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/eslint/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/eslint/node_modules/escape-string-regexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/eslint/node_modules/eslint-scope": {
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+      "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^5.2.0"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/eslint/node_modules/espree": {
       "version": "9.6.1",
       "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
@@ -1911,10 +1948,20 @@
         "eslint-visitor-keys": "^3.4.1"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/eslint/node_modules/estraverse": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
       }
     },
     "node_modules/eslint/node_modules/globals": {
@@ -1933,6 +1980,29 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/eslint/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/eslint/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/eslint/node_modules/type-fest": {
       "version": "0.20.2",
       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
@@ -1990,6 +2060,16 @@
         "node": ">=0.10"
       }
     },
+    "node_modules/esquery/node_modules/estraverse": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
     "node_modules/esrecurse": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
@@ -2003,7 +2083,7 @@
         "node": ">=4.0"
       }
     },
-    "node_modules/estraverse": {
+    "node_modules/esrecurse/node_modules/estraverse": {
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
       "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
@@ -2013,6 +2093,16 @@
         "node": ">=4.0"
       }
     },
+    "node_modules/estraverse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
     "node_modules/esutils": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -2169,16 +2259,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/figures/node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.8.0"
-      }
-    },
     "node_modules/file-entry-cache": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@@ -2448,13 +2528,14 @@
       "license": "MIT"
     },
     "node_modules/has-flag": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "engines": {
-        "node": ">=8"
+        "node": ">=4"
       }
     },
     "node_modules/has-property-descriptors": {
@@ -2987,6 +3068,82 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/log-symbols/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/log-symbols/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/log-symbols/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/log-symbols/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/log-symbols/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/log-symbols/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
     "node_modules/log-update": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz",
@@ -3006,6 +3163,42 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/log-update/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/log-update/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/log-update/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/log-update/node_modules/slice-ansi": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
@@ -3615,16 +3808,13 @@
       "license": "MIT"
     },
     "node_modules/semver": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
       "dev": true,
       "license": "ISC",
       "bin": {
         "semver": "bin/semver.js"
-      },
-      "engines": {
-        "node": ">=10"
       }
     },
     "node_modules/set-function-length": {
@@ -3709,6 +3899,42 @@
         "node": ">=8"
       }
     },
+    "node_modules/slice-ansi/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/slice-ansi/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/slice-ansi/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/sshpk": {
       "version": "1.18.0",
       "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
@@ -3787,19 +4013,17 @@
       }
     },
     "node_modules/supports-color": {
-      "version": "8.1.1",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
       "dev": true,
       "license": "MIT",
+      "peer": true,
       "dependencies": {
-        "has-flag": "^4.0.0"
+        "has-flag": "^3.0.0"
       },
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/supports-color?sponsor=1"
+        "node": ">=4"
       }
     },
     "node_modules/synckit": {
@@ -3891,9 +4115,9 @@
       }
     },
     "node_modules/tslib": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
-      "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
+      "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
       "dev": true,
       "license": "0BSD"
     },
@@ -3944,9 +4168,9 @@
       }
     },
     "node_modules/undici-types": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz",
-      "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==",
+      "version": "6.19.8",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+      "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
       "dev": true,
       "license": "MIT",
       "optional": true
@@ -4093,6 +4317,42 @@
         "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
       }
     },
+    "node_modules/wrap-ansi/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/wrap-ansi/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/wrap-ansi/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index bd7e25d563..be19ae3859 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -156,9 +156,9 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
-      "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
+      "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -216,13 +216,13 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
-      "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
+      "version": "7.25.5",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz",
+      "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.0",
+        "@babel/types": "^7.25.4",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
         "jsesc": "^2.5.1"
@@ -276,9 +276,9 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz",
-      "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
+      "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -287,7 +287,7 @@
         "@babel/helper-optimise-call-expression": "^7.24.7",
         "@babel/helper-replace-supers": "^7.25.0",
         "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/traverse": "^7.25.0",
+        "@babel/traverse": "^7.25.4",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -540,12 +540,12 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
-      "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz",
+      "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.2"
+        "@babel/types": "^7.25.4"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -989,16 +989,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-generator-functions": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz",
-      "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz",
+      "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/helper-plugin-utils": "^7.24.8",
         "@babel/helper-remap-async-to-generator": "^7.25.0",
         "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/traverse": "^7.25.0"
+        "@babel/traverse": "^7.25.4"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1058,14 +1058,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz",
-      "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
+      "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-class-features-plugin": "^7.25.4",
+        "@babel/helper-plugin-utils": "^7.24.8"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1093,17 +1093,17 @@
       }
     },
     "node_modules/@babel/plugin-transform-classes": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz",
-      "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
+      "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-compilation-targets": "^7.24.8",
+        "@babel/helper-compilation-targets": "^7.25.2",
         "@babel/helper-plugin-utils": "^7.24.8",
         "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/traverse": "^7.25.0",
+        "@babel/traverse": "^7.25.4",
         "globals": "^11.1.0"
       },
       "engines": {
@@ -1584,14 +1584,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-methods": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz",
-      "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
+      "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-class-features-plugin": "^7.25.4",
+        "@babel/helper-plugin-utils": "^7.24.8"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1669,16 +1669,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-runtime": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz",
-      "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz",
+      "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.8",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
-        "babel-plugin-polyfill-corejs3": "^0.10.1",
+        "babel-plugin-polyfill-corejs3": "^0.10.6",
         "babel-plugin-polyfill-regenerator": "^0.6.1",
         "semver": "^6.3.1"
       },
@@ -1821,14 +1821,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-sets-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz",
-      "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
+      "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.2",
+        "@babel/helper-plugin-utils": "^7.24.8"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1838,13 +1838,13 @@
       }
     },
     "node_modules/@babel/preset-env": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz",
-      "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz",
+      "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.25.2",
+        "@babel/compat-data": "^7.25.4",
         "@babel/helper-compilation-targets": "^7.25.2",
         "@babel/helper-plugin-utils": "^7.24.8",
         "@babel/helper-validator-option": "^7.24.8",
@@ -1873,13 +1873,13 @@
         "@babel/plugin-syntax-top-level-await": "^7.14.5",
         "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
         "@babel/plugin-transform-arrow-functions": "^7.24.7",
-        "@babel/plugin-transform-async-generator-functions": "^7.25.0",
+        "@babel/plugin-transform-async-generator-functions": "^7.25.4",
         "@babel/plugin-transform-async-to-generator": "^7.24.7",
         "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
         "@babel/plugin-transform-block-scoping": "^7.25.0",
-        "@babel/plugin-transform-class-properties": "^7.24.7",
+        "@babel/plugin-transform-class-properties": "^7.25.4",
         "@babel/plugin-transform-class-static-block": "^7.24.7",
-        "@babel/plugin-transform-classes": "^7.25.0",
+        "@babel/plugin-transform-classes": "^7.25.4",
         "@babel/plugin-transform-computed-properties": "^7.24.7",
         "@babel/plugin-transform-destructuring": "^7.24.8",
         "@babel/plugin-transform-dotall-regex": "^7.24.7",
@@ -1907,7 +1907,7 @@
         "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
         "@babel/plugin-transform-optional-chaining": "^7.24.8",
         "@babel/plugin-transform-parameters": "^7.24.7",
-        "@babel/plugin-transform-private-methods": "^7.24.7",
+        "@babel/plugin-transform-private-methods": "^7.25.4",
         "@babel/plugin-transform-private-property-in-object": "^7.24.7",
         "@babel/plugin-transform-property-literals": "^7.24.7",
         "@babel/plugin-transform-regenerator": "^7.24.7",
@@ -1920,10 +1920,10 @@
         "@babel/plugin-transform-unicode-escapes": "^7.24.7",
         "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
         "@babel/plugin-transform-unicode-regex": "^7.24.7",
-        "@babel/plugin-transform-unicode-sets-regex": "^7.24.7",
+        "@babel/plugin-transform-unicode-sets-regex": "^7.25.4",
         "@babel/preset-modules": "0.1.6-no-external-plugins",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
-        "babel-plugin-polyfill-corejs3": "^0.10.4",
+        "babel-plugin-polyfill-corejs3": "^0.10.6",
         "babel-plugin-polyfill-regenerator": "^0.6.1",
         "core-js-compat": "^3.37.1",
         "semver": "^6.3.1"
@@ -1958,9 +1958,9 @@
       "license": "MIT"
     },
     "node_modules/@babel/runtime": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz",
-      "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.4.tgz",
+      "integrity": "sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==",
       "license": "MIT",
       "dependencies": {
         "regenerator-runtime": "^0.14.0"
@@ -1985,17 +1985,17 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
-      "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz",
+      "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.0",
-        "@babel/parser": "^7.25.3",
+        "@babel/generator": "^7.25.4",
+        "@babel/parser": "^7.25.4",
         "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.2",
+        "@babel/types": "^7.25.4",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -2014,9 +2014,9 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
-      "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz",
+      "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==",
       "license": "MIT",
       "dependencies": {
         "@babel/helper-string-parser": "^7.24.8",
@@ -2498,37 +2498,6 @@
         "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
-      "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@eslint/eslintrc/node_modules/espree": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
-      "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "acorn": "^8.12.0",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^4.0.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
     "node_modules/@eslint/eslintrc/node_modules/globals": {
       "version": "14.0.0",
       "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
@@ -3077,9 +3046,9 @@
       }
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz",
-      "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.1.tgz",
+      "integrity": "sha512-2thheikVEuU7ZxFXubPDOtspKn1x0yqaYQwvALVtEcvFhMifPADBrgRPyHV0TF3b+9BgvgjgagVyvA/UqPZHmg==",
       "cpu": [
         "arm"
       ],
@@ -3091,9 +3060,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz",
-      "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.1.tgz",
+      "integrity": "sha512-t1lLYn4V9WgnIFHXy1d2Di/7gyzBWS8G5pQSXdZqfrdCGTwi1VasRMSS81DTYb+avDs/Zz4A6dzERki5oRYz1g==",
       "cpu": [
         "arm64"
       ],
@@ -3105,9 +3074,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz",
-      "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.1.tgz",
+      "integrity": "sha512-AH/wNWSEEHvs6t4iJ3RANxW5ZCK3fUnmf0gyMxWCesY1AlUj8jY7GC+rQE4wd3gwmZ9XDOpL0kcFnCjtN7FXlA==",
       "cpu": [
         "arm64"
       ],
@@ -3119,9 +3088,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz",
-      "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.1.tgz",
+      "integrity": "sha512-dO0BIz/+5ZdkLZrVgQrDdW7m2RkrLwYTh2YMFG9IpBtlC1x1NPNSXkfczhZieOlOLEqgXOFH3wYHB7PmBtf+Bg==",
       "cpu": [
         "x64"
       ],
@@ -3133,9 +3102,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz",
-      "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.1.tgz",
+      "integrity": "sha512-sWWgdQ1fq+XKrlda8PsMCfut8caFwZBmhYeoehJ05FdI0YZXk6ZyUjWLrIgbR/VgiGycrFKMMgp7eJ69HOF2pQ==",
       "cpu": [
         "arm"
       ],
@@ -3147,9 +3116,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz",
-      "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.1.tgz",
+      "integrity": "sha512-9OIiSuj5EsYQlmwhmFRA0LRO0dRRjdCVZA3hnmZe1rEwRk11Jy3ECGGq3a7RrVEZ0/pCsYWx8jG3IvcrJ6RCew==",
       "cpu": [
         "arm"
       ],
@@ -3161,9 +3130,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz",
-      "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.1.tgz",
+      "integrity": "sha512-0kuAkRK4MeIUbzQYu63NrJmfoUVicajoRAL1bpwdYIYRcs57iyIV9NLcuyDyDXE2GiZCL4uhKSYAnyWpjZkWow==",
       "cpu": [
         "arm64"
       ],
@@ -3175,9 +3144,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz",
-      "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.1.tgz",
+      "integrity": "sha512-/6dYC9fZtfEY0vozpc5bx1RP4VrtEOhNQGb0HwvYNwXD1BBbwQ5cKIbUVVU7G2d5WRE90NfB922elN8ASXAJEA==",
       "cpu": [
         "arm64"
       ],
@@ -3189,9 +3158,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz",
-      "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.1.tgz",
+      "integrity": "sha512-ltUWy+sHeAh3YZ91NUsV4Xg3uBXAlscQe8ZOXRCVAKLsivGuJsrkawYPUEyCV3DYa9urgJugMLn8Z3Z/6CeyRQ==",
       "cpu": [
         "ppc64"
       ],
@@ -3203,9 +3172,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz",
-      "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.1.tgz",
+      "integrity": "sha512-BggMndzI7Tlv4/abrgLwa/dxNEMn2gC61DCLrTzw8LkpSKel4o+O+gtjbnkevZ18SKkeN3ihRGPuBxjaetWzWg==",
       "cpu": [
         "riscv64"
       ],
@@ -3217,9 +3186,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz",
-      "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.1.tgz",
+      "integrity": "sha512-z/9rtlGd/OMv+gb1mNSjElasMf9yXusAxnRDrBaYB+eS1shFm6/4/xDH1SAISO5729fFKUkJ88TkGPRUh8WSAA==",
       "cpu": [
         "s390x"
       ],
@@ -3231,9 +3200,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz",
-      "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.1.tgz",
+      "integrity": "sha512-kXQVcWqDcDKw0S2E0TmhlTLlUgAmMVqPrJZR+KpH/1ZaZhLSl23GZpQVmawBQGVhyP5WXIsIQ/zqbDBBYmxm5w==",
       "cpu": [
         "x64"
       ],
@@ -3245,9 +3214,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz",
-      "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.1.tgz",
+      "integrity": "sha512-CbFv/WMQsSdl+bpX6rVbzR4kAjSSBuDgCqb1l4J68UYsQNalz5wOqLGYj4ZI0thGpyX5kc+LLZ9CL+kpqDovZA==",
       "cpu": [
         "x64"
       ],
@@ -3259,9 +3228,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz",
-      "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.1.tgz",
+      "integrity": "sha512-3Q3brDgA86gHXWHklrwdREKIrIbxC0ZgU8lwpj0eEKGBQH+31uPqr0P2v11pn0tSIxHvcdOWxa4j+YvLNx1i6g==",
       "cpu": [
         "arm64"
       ],
@@ -3273,9 +3242,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz",
-      "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.1.tgz",
+      "integrity": "sha512-tNg+jJcKR3Uwe4L0/wY3Ro0H+u3nrb04+tcq1GSYzBEmKLeOQF2emk1whxlzNqb6MMrQ2JOcQEpuuiPLyRcSIw==",
       "cpu": [
         "ia32"
       ],
@@ -3287,9 +3256,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz",
-      "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.1.tgz",
+      "integrity": "sha512-xGiIH95H1zU7naUyTKEyOA/I0aexNMUdO9qRv0bLKN3qu25bBdrxZHqA3PTJ24YNN/GdMzG4xkDcd/GvjuhfLg==",
       "cpu": [
         "x64"
       ],
@@ -3407,9 +3376,9 @@
       }
     },
     "node_modules/@sentry/cli": {
-      "version": "2.33.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.33.1.tgz",
-      "integrity": "sha512-dUlZ4EFh98VFRPJ+f6OW3JEYQ7VvqGNMa0AMcmvk07ePNeK/GicAWmSQE4ZfJTTl80ul6HZw1kY01fGQOQlVRA==",
+      "version": "2.34.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.34.1.tgz",
+      "integrity": "sha512-hAHvu+XH1kn1ee2NUWvuqAZenK/MrxqQzeIrIYATqF2XGjtSOr7irjAKWjd97/vXdLHA6TBnMW1wHwLcuJK2tg==",
       "dev": true,
       "hasInstallScript": true,
       "license": "BSD-3-Clause",
@@ -3427,19 +3396,19 @@
         "node": ">= 10"
       },
       "optionalDependencies": {
-        "@sentry/cli-darwin": "2.33.1",
-        "@sentry/cli-linux-arm": "2.33.1",
-        "@sentry/cli-linux-arm64": "2.33.1",
-        "@sentry/cli-linux-i686": "2.33.1",
-        "@sentry/cli-linux-x64": "2.33.1",
-        "@sentry/cli-win32-i686": "2.33.1",
-        "@sentry/cli-win32-x64": "2.33.1"
+        "@sentry/cli-darwin": "2.34.1",
+        "@sentry/cli-linux-arm": "2.34.1",
+        "@sentry/cli-linux-arm64": "2.34.1",
+        "@sentry/cli-linux-i686": "2.34.1",
+        "@sentry/cli-linux-x64": "2.34.1",
+        "@sentry/cli-win32-i686": "2.34.1",
+        "@sentry/cli-win32-x64": "2.34.1"
       }
     },
     "node_modules/@sentry/cli-darwin": {
-      "version": "2.33.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.33.1.tgz",
-      "integrity": "sha512-+4/VIx/E1L2hChj5nGf5MHyEPHUNHJ/HoG5RY+B+vyEutGily1c1+DM2bum7RbD0xs6wKLIyup5F02guzSzG8A==",
+      "version": "2.34.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.34.1.tgz",
+      "integrity": "sha512-SqlCunwhweMDJNKVf3kabiN6FwpvCIffn2cjfaZD0zqZQ3M1tWMJ/kSA0TGfe7lWu9JloNmVm+ArcudGitvX3w==",
       "dev": true,
       "license": "BSD-3-Clause",
       "optional": true,
@@ -3451,9 +3420,9 @@
       }
     },
     "node_modules/@sentry/cli-linux-arm": {
-      "version": "2.33.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.33.1.tgz",
-      "integrity": "sha512-zbxEvQju+tgNvzTOt635le4kS/Fbm2XC2RtYbCTs034Vb8xjrAxLnK0z1bQnStUV8BkeBHtsNVrG+NSQDym2wg==",
+      "version": "2.34.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.34.1.tgz",
+      "integrity": "sha512-CDhtFbUs16CoU10wEbxnn/pEuenFIMosTcxI7v0gWp3Wo0B2h0bOsLEk9dlT0YsqRTAldKUzef9AVX82m5Svwg==",
       "cpu": [
         "arm"
       ],
@@ -3469,9 +3438,9 @@
       }
     },
     "node_modules/@sentry/cli-linux-arm64": {
-      "version": "2.33.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.33.1.tgz",
-      "integrity": "sha512-DbGV56PRKOLsAZJX27Jt2uZ11QfQEMmWB4cIvxkKcFVE+LJP4MVA+MGGRUL6p+Bs1R9ZUuGbpKGtj0JiG6CoXw==",
+      "version": "2.34.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.34.1.tgz",
+      "integrity": "sha512-iSl/uNWjKbVPb6ll12SmHG9iGcC3oN8jjzdycm/mD3H/d8DLMloEiaz8lHQnsYCaPiNKwap1ThKlPvnKOU4SNg==",
       "cpu": [
         "arm64"
       ],
@@ -3487,9 +3456,9 @@
       }
     },
     "node_modules/@sentry/cli-linux-i686": {
-      "version": "2.33.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.33.1.tgz",
-      "integrity": "sha512-g2LS4oPXkPWOfKWukKzYp4FnXVRRSwBxhuQ9eSw2peeb58ZIObr4YKGOA/8HJRGkooBJIKGaAR2mH2Pk1TKaiA==",
+      "version": "2.34.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.34.1.tgz",
+      "integrity": "sha512-jq5o49pgzJFv/CQtvx4FLVO1xra22gzP76FtmvPwEhZQhJT6QduW9fpnvVDnOaY8YLzC7GAeszUV6sqZ0MZUqg==",
       "cpu": [
         "x86",
         "ia32"
@@ -3506,9 +3475,9 @@
       }
     },
     "node_modules/@sentry/cli-linux-x64": {
-      "version": "2.33.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.33.1.tgz",
-      "integrity": "sha512-IV3dcYV/ZcvO+VGu9U6kuxSdbsV2kzxaBwWUQxtzxJ+cOa7J8Hn1t0koKGtU53JVZNBa06qJWIcqgl4/pCuKIg==",
+      "version": "2.34.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.34.1.tgz",
+      "integrity": "sha512-O99RAkrcMErWLPRdza6HaG7kmHCx9MYFNDX6FLrAgSP3oz+X3ral1oDTIrMs4hVbPDK287ZGAqCJtk+1iOjEBg==",
       "cpu": [
         "x64"
       ],
@@ -3524,9 +3493,9 @@
       }
     },
     "node_modules/@sentry/cli-win32-i686": {
-      "version": "2.33.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.33.1.tgz",
-      "integrity": "sha512-F7cJySvkpzIu7fnLKNHYwBzZYYwlhoDbAUnaFX0UZCN+5DNp/5LwTp37a5TWOsmCaHMZT4i9IO4SIsnNw16/zQ==",
+      "version": "2.34.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.34.1.tgz",
+      "integrity": "sha512-yEeuneEVmExCbWlnSauhIg8wZDfKxRaou8XRfM6oPlSBu0XO5HUI3uRK5t2xT0zX8Syzh2kCZpdVE1KLavVeKA==",
       "cpu": [
         "x86",
         "ia32"
@@ -3542,9 +3511,9 @@
       }
     },
     "node_modules/@sentry/cli-win32-x64": {
-      "version": "2.33.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.33.1.tgz",
-      "integrity": "sha512-8VyRoJqtb2uQ8/bFRKNuACYZt7r+Xx0k2wXRGTyH05lCjAiVIXn7DiS2BxHFty7M1QEWUCMNsb/UC/x/Cu2wuA==",
+      "version": "2.34.1",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.34.1.tgz",
+      "integrity": "sha512-mU48VpDTwRgt7/Pf3vk/P87m4kM3XEXHHHfq9EvHCTspFF6GtMfL9njZ7+5Z+7ko852JS4kpunjZtsxmoP4/zA==",
       "cpu": [
         "x64"
       ],
@@ -4753,42 +4722,42 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.37.tgz",
-      "integrity": "sha512-ZDDT/KiLKuCRXyzWecNzC5vTcubGz4LECAtfGPENpo0nrmqJHwuWtRLxk/Sb9RAKtR9iFflFycbkjkY+W/PZUQ==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.38.tgz",
+      "integrity": "sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.24.7",
-        "@vue/shared": "3.4.37",
-        "entities": "^5.0.0",
+        "@vue/shared": "3.4.38",
+        "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.37.tgz",
-      "integrity": "sha512-rIiSmL3YrntvgYV84rekAtU/xfogMUJIclUMeIKEtVBFngOL3IeZHhsH3UaFEgB5iFGpj6IW+8YuM/2Up+vVag==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.38.tgz",
+      "integrity": "sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.4.37",
-        "@vue/shared": "3.4.37"
+        "@vue/compiler-core": "3.4.38",
+        "@vue/shared": "3.4.38"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.37.tgz",
-      "integrity": "sha512-vCfetdas40Wk9aK/WWf8XcVESffsbNkBQwS5t13Y/PcfqKfIwJX2gF+82th6dOpnpbptNMlMjAny80li7TaCIg==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.38.tgz",
+      "integrity": "sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.24.7",
-        "@vue/compiler-core": "3.4.37",
-        "@vue/compiler-dom": "3.4.37",
-        "@vue/compiler-ssr": "3.4.37",
-        "@vue/shared": "3.4.37",
+        "@vue/compiler-core": "3.4.38",
+        "@vue/compiler-dom": "3.4.38",
+        "@vue/compiler-ssr": "3.4.38",
+        "@vue/shared": "3.4.38",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.10",
         "postcss": "^8.4.40",
@@ -4806,14 +4775,14 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.37.tgz",
-      "integrity": "sha512-TyAgYBWrHlFrt4qpdACh8e9Ms6C/AZQ6A6xLJaWrCL8GCX5DxMzxyeFAEMfU/VFr4tylHm+a2NpfJpcd7+20XA==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.38.tgz",
+      "integrity": "sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.4.37",
-        "@vue/shared": "3.4.37"
+        "@vue/compiler-dom": "3.4.38",
+        "@vue/shared": "3.4.38"
       }
     },
     "node_modules/@vue/component-compiler-utils": {
@@ -4922,9 +4891,9 @@
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.4.37",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.37.tgz",
-      "integrity": "sha512-nIh8P2fc3DflG8+5Uw8PT/1i17ccFn0xxN/5oE9RfV5SVnd7G0XEFRwakrnNFE/jlS95fpGXDVG5zDETS26nmg==",
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.38.tgz",
+      "integrity": "sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==",
       "dev": true,
       "license": "MIT"
     },
@@ -5494,9 +5463,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001651",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
-      "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
+      "version": "1.0.30001653",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz",
+      "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==",
       "dev": true,
       "funding": [
         {
@@ -5809,9 +5778,9 @@
       "license": "MIT"
     },
     "node_modules/core-js": {
-      "version": "3.38.0",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.0.tgz",
-      "integrity": "sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug==",
+      "version": "3.38.1",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz",
+      "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==",
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
@@ -5821,9 +5790,9 @@
       }
     },
     "node_modules/core-js-compat": {
-      "version": "3.38.0",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz",
-      "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==",
+      "version": "3.38.1",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz",
+      "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6247,19 +6216,6 @@
         "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
       }
     },
-    "node_modules/dom-serializer/node_modules/entities": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=0.12"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
-      }
-    },
     "node_modules/domelementtype": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
@@ -6383,9 +6339,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.6",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz",
-      "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==",
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
+      "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
       "dev": true,
       "license": "ISC"
     },
@@ -6424,10 +6380,9 @@
       }
     },
     "node_modules/entities": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz",
-      "integrity": "sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==",
-      "dev": true,
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
       "license": "BSD-2-Clause",
       "engines": {
         "node": ">=0.12"
@@ -7022,6 +6977,24 @@
         "url": "https://opencollective.com/eslint"
       }
     },
+    "node_modules/eslint/node_modules/espree": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/eslint/node_modules/estraverse": {
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
@@ -7072,31 +7045,31 @@
       }
     },
     "node_modules/espree": {
-      "version": "9.6.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
-      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+      "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "acorn": "^8.9.0",
+        "acorn": "^8.12.0",
         "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^3.4.1"
+        "eslint-visitor-keys": "^4.0.0"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
       }
     },
     "node_modules/espree/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+      "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
       "dev": true,
       "license": "Apache-2.0",
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
@@ -7879,19 +7852,6 @@
         "entities": "^4.5.0"
       }
     },
-    "node_modules/htmlparser2/node_modules/entities": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=0.12"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
-      }
-    },
     "node_modules/http-proxy-agent": {
       "version": "7.0.2",
       "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
@@ -8157,9 +8117,9 @@
       }
     },
     "node_modules/is-core-module": {
-      "version": "2.15.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
-      "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
+      "version": "2.15.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
+      "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -9191,14 +9151,14 @@
       }
     },
     "node_modules/magicast": {
-      "version": "0.3.4",
-      "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz",
-      "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==",
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz",
+      "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/parser": "^7.24.4",
-        "@babel/types": "^7.24.0",
+        "@babel/parser": "^7.25.4",
+        "@babel/types": "^7.25.4",
         "source-map-js": "^1.2.0"
       }
     },
@@ -9248,18 +9208,6 @@
         "markdown-it": "bin/markdown-it.mjs"
       }
     },
-    "node_modules/markdown-it/node_modules/entities": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=0.12"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
-      }
-    },
     "node_modules/mdn-data": {
       "version": "2.0.30",
       "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
@@ -9317,9 +9265,9 @@
       }
     },
     "node_modules/micromatch": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
-      "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -9825,19 +9773,6 @@
         "url": "https://github.com/inikulin/parse5?sponsor=1"
       }
     },
-    "node_modules/parse5/node_modules/entities": {
-      "version": "4.5.0",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "engines": {
-        "node": ">=0.12"
-      },
-      "funding": {
-        "url": "https://github.com/fb55/entities?sponsor=1"
-      }
-    },
     "node_modules/path-exists": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -9959,9 +9894,9 @@
       }
     },
     "node_modules/pkg-types": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz",
-      "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz",
+      "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -10330,9 +10265,9 @@
       }
     },
     "node_modules/prosemirror-tables": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.4.0.tgz",
-      "integrity": "sha512-fxryZZkQG12fSCNuZDrYx6Xvo2rLYZTbKLRd8rglOPgNJGMKIS8uvTt6gGC38m7UCu/ENnXIP9pEz5uDaPc+cA==",
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.5.0.tgz",
+      "integrity": "sha512-VMx4zlYWm7aBlZ5xtfJHpqa3Xgu3b7srV54fXYnXgsAcIGRqKSrhiK3f89omzzgaAgAtDOV4ImXnLKhVfheVNQ==",
       "license": "MIT",
       "dependencies": {
         "prosemirror-keymap": "^1.1.2",
@@ -10370,18 +10305,18 @@
       }
     },
     "node_modules/prosemirror-transform": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.9.0.tgz",
-      "integrity": "sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.0.tgz",
+      "integrity": "sha512-9UOgFSgN6Gj2ekQH5CTDJ8Rp/fnKR2IkYfGdzzp5zQMFsS4zDllLVx/+jGcX86YlACpG7UR5fwAXiWzxqWtBTg==",
       "license": "MIT",
       "dependencies": {
         "prosemirror-model": "^1.21.0"
       }
     },
     "node_modules/prosemirror-view": {
-      "version": "1.33.9",
-      "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.33.9.tgz",
-      "integrity": "sha512-xV1A0Vz9cIcEnwmMhKKFAOkfIp8XmJRnaZoPqNXrPS7EK5n11Ov8V76KhR0RsfQd/SIzmWY+bg+M44A2Lx/Nnw==",
+      "version": "1.34.1",
+      "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.34.1.tgz",
+      "integrity": "sha512-KS2xmqrAM09h3SLu1S2pNO/ZoIP38qkTJ6KFd7+BeSfmX/ek0n5yOfGuiTZjFNTC8GOsEIUa1tHxt+2FMu3yWQ==",
       "license": "MIT",
       "dependencies": {
         "prosemirror-model": "^1.20.0",
@@ -10764,9 +10699,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz",
-      "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.1.tgz",
+      "integrity": "sha512-ZnYyKvscThhgd3M5+Qt3pmhO4jIRR5RGzaSovB6Q7rGNrK5cUncrtLmcTTJVSdcKXyZjW8X8MB0JMSuH9bcAJg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -10780,22 +10715,22 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.20.0",
-        "@rollup/rollup-android-arm64": "4.20.0",
-        "@rollup/rollup-darwin-arm64": "4.20.0",
-        "@rollup/rollup-darwin-x64": "4.20.0",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.20.0",
-        "@rollup/rollup-linux-arm-musleabihf": "4.20.0",
-        "@rollup/rollup-linux-arm64-gnu": "4.20.0",
-        "@rollup/rollup-linux-arm64-musl": "4.20.0",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0",
-        "@rollup/rollup-linux-riscv64-gnu": "4.20.0",
-        "@rollup/rollup-linux-s390x-gnu": "4.20.0",
-        "@rollup/rollup-linux-x64-gnu": "4.20.0",
-        "@rollup/rollup-linux-x64-musl": "4.20.0",
-        "@rollup/rollup-win32-arm64-msvc": "4.20.0",
-        "@rollup/rollup-win32-ia32-msvc": "4.20.0",
-        "@rollup/rollup-win32-x64-msvc": "4.20.0",
+        "@rollup/rollup-android-arm-eabi": "4.21.1",
+        "@rollup/rollup-android-arm64": "4.21.1",
+        "@rollup/rollup-darwin-arm64": "4.21.1",
+        "@rollup/rollup-darwin-x64": "4.21.1",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.21.1",
+        "@rollup/rollup-linux-arm-musleabihf": "4.21.1",
+        "@rollup/rollup-linux-arm64-gnu": "4.21.1",
+        "@rollup/rollup-linux-arm64-musl": "4.21.1",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.21.1",
+        "@rollup/rollup-linux-riscv64-gnu": "4.21.1",
+        "@rollup/rollup-linux-s390x-gnu": "4.21.1",
+        "@rollup/rollup-linux-x64-gnu": "4.21.1",
+        "@rollup/rollup-linux-x64-musl": "4.21.1",
+        "@rollup/rollup-win32-arm64-msvc": "4.21.1",
+        "@rollup/rollup-win32-ia32-msvc": "4.21.1",
+        "@rollup/rollup-win32-x64-msvc": "4.21.1",
         "fsevents": "~2.3.2"
       }
     },
@@ -11534,9 +11469,9 @@
       "license": "MIT"
     },
     "node_modules/tinypool": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz",
-      "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz",
+      "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -11624,9 +11559,9 @@
       }
     },
     "node_modules/tslib": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
-      "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
+      "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
       "license": "0BSD"
     },
     "node_modules/type-check": {
@@ -11669,9 +11604,9 @@
       "license": "MIT"
     },
     "node_modules/undici": {
-      "version": "6.19.7",
-      "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.7.tgz",
-      "integrity": "sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A==",
+      "version": "6.19.8",
+      "resolved": "https://registry.npmjs.org/undici/-/undici-6.19.8.tgz",
+      "integrity": "sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -11846,9 +11781,9 @@
       }
     },
     "node_modules/unplugin-vue-components/node_modules/unplugin": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.1.tgz",
-      "integrity": "sha512-aXEH9c5qi3uYZHo0niUtxDlT9ylG/luMW/dZslSCkbtC31wCyFkmM0kyoBBh+Grhn7CL+/kvKLfN61/EdxPxMQ==",
+      "version": "1.12.2",
+      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.2.tgz",
+      "integrity": "sha512-bEqQxeC7rxtxPZ3M5V4Djcc4lQqKPgGe3mAWZvxcSmX5jhGxll19NliaRzQSQPrk4xJZSGniK3puLWpRuZN7VQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -12316,6 +12251,24 @@
         "url": "https://opencollective.com/eslint"
       }
     },
+    "node_modules/vue-eslint-parser/node_modules/espree": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/vue-eslint-parser/node_modules/estraverse": {
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index bc9c82e250..a1f93b2ea2 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -78,9 +78,9 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
-      "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
+      "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -138,13 +138,13 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
-      "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
+      "version": "7.25.5",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz",
+      "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.0",
+        "@babel/types": "^7.25.4",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
         "jsesc": "^2.5.1"
@@ -198,9 +198,9 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz",
-      "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
+      "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -209,7 +209,7 @@
         "@babel/helper-optimise-call-expression": "^7.24.7",
         "@babel/helper-replace-supers": "^7.25.0",
         "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/traverse": "^7.25.0",
+        "@babel/traverse": "^7.25.4",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -464,13 +464,13 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
-      "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz",
+      "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.2"
+        "@babel/types": "^7.25.4"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -914,16 +914,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-generator-functions": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz",
-      "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz",
+      "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/helper-plugin-utils": "^7.24.8",
         "@babel/helper-remap-async-to-generator": "^7.25.0",
         "@babel/plugin-syntax-async-generators": "^7.8.4",
-        "@babel/traverse": "^7.25.0"
+        "@babel/traverse": "^7.25.4"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -983,14 +983,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-class-properties": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz",
-      "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz",
+      "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-class-features-plugin": "^7.25.4",
+        "@babel/helper-plugin-utils": "^7.24.8"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1018,17 +1018,17 @@
       }
     },
     "node_modules/@babel/plugin-transform-classes": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz",
-      "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz",
+      "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.24.7",
-        "@babel/helper-compilation-targets": "^7.24.8",
+        "@babel/helper-compilation-targets": "^7.25.2",
         "@babel/helper-plugin-utils": "^7.24.8",
         "@babel/helper-replace-supers": "^7.25.0",
-        "@babel/traverse": "^7.25.0",
+        "@babel/traverse": "^7.25.4",
         "globals": "^11.1.0"
       },
       "engines": {
@@ -1509,14 +1509,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-private-methods": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz",
-      "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz",
+      "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-class-features-plugin": "^7.25.4",
+        "@babel/helper-plugin-utils": "^7.24.8"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1594,16 +1594,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-runtime": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz",
-      "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.4.tgz",
+      "integrity": "sha512-8hsyG+KUYGY0coX6KUCDancA0Vw225KJ2HJO0yCNr1vq5r+lJTleDaJf0K7iOhjw4SWhu03TMBzYTJ9krmzULQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/helper-module-imports": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.8",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
-        "babel-plugin-polyfill-corejs3": "^0.10.1",
+        "babel-plugin-polyfill-corejs3": "^0.10.6",
         "babel-plugin-polyfill-regenerator": "^0.6.1",
         "semver": "^6.3.1"
       },
@@ -1746,14 +1746,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-sets-regex": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz",
-      "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz",
+      "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.24.7",
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.25.2",
+        "@babel/helper-plugin-utils": "^7.24.8"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1763,13 +1763,13 @@
       }
     },
     "node_modules/@babel/preset-env": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz",
-      "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz",
+      "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/compat-data": "^7.25.2",
+        "@babel/compat-data": "^7.25.4",
         "@babel/helper-compilation-targets": "^7.25.2",
         "@babel/helper-plugin-utils": "^7.24.8",
         "@babel/helper-validator-option": "^7.24.8",
@@ -1798,13 +1798,13 @@
         "@babel/plugin-syntax-top-level-await": "^7.14.5",
         "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
         "@babel/plugin-transform-arrow-functions": "^7.24.7",
-        "@babel/plugin-transform-async-generator-functions": "^7.25.0",
+        "@babel/plugin-transform-async-generator-functions": "^7.25.4",
         "@babel/plugin-transform-async-to-generator": "^7.24.7",
         "@babel/plugin-transform-block-scoped-functions": "^7.24.7",
         "@babel/plugin-transform-block-scoping": "^7.25.0",
-        "@babel/plugin-transform-class-properties": "^7.24.7",
+        "@babel/plugin-transform-class-properties": "^7.25.4",
         "@babel/plugin-transform-class-static-block": "^7.24.7",
-        "@babel/plugin-transform-classes": "^7.25.0",
+        "@babel/plugin-transform-classes": "^7.25.4",
         "@babel/plugin-transform-computed-properties": "^7.24.7",
         "@babel/plugin-transform-destructuring": "^7.24.8",
         "@babel/plugin-transform-dotall-regex": "^7.24.7",
@@ -1832,7 +1832,7 @@
         "@babel/plugin-transform-optional-catch-binding": "^7.24.7",
         "@babel/plugin-transform-optional-chaining": "^7.24.8",
         "@babel/plugin-transform-parameters": "^7.24.7",
-        "@babel/plugin-transform-private-methods": "^7.24.7",
+        "@babel/plugin-transform-private-methods": "^7.25.4",
         "@babel/plugin-transform-private-property-in-object": "^7.24.7",
         "@babel/plugin-transform-property-literals": "^7.24.7",
         "@babel/plugin-transform-regenerator": "^7.24.7",
@@ -1845,10 +1845,10 @@
         "@babel/plugin-transform-unicode-escapes": "^7.24.7",
         "@babel/plugin-transform-unicode-property-regex": "^7.24.7",
         "@babel/plugin-transform-unicode-regex": "^7.24.7",
-        "@babel/plugin-transform-unicode-sets-regex": "^7.24.7",
+        "@babel/plugin-transform-unicode-sets-regex": "^7.25.4",
         "@babel/preset-modules": "0.1.6-no-external-plugins",
         "babel-plugin-polyfill-corejs2": "^0.4.10",
-        "babel-plugin-polyfill-corejs3": "^0.10.4",
+        "babel-plugin-polyfill-corejs3": "^0.10.6",
         "babel-plugin-polyfill-regenerator": "^0.6.1",
         "core-js-compat": "^3.37.1",
         "semver": "^6.3.1"
@@ -1883,9 +1883,9 @@
       "license": "MIT"
     },
     "node_modules/@babel/runtime": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz",
-      "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.4.tgz",
+      "integrity": "sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==",
       "license": "MIT",
       "dependencies": {
         "regenerator-runtime": "^0.14.0"
@@ -1910,17 +1910,17 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
-      "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz",
+      "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.0",
-        "@babel/parser": "^7.25.3",
+        "@babel/generator": "^7.25.4",
+        "@babel/parser": "^7.25.4",
         "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.2",
+        "@babel/types": "^7.25.4",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -1939,9 +1939,9 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
-      "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz",
+      "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2424,37 +2424,6 @@
         "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
-      "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@eslint/eslintrc/node_modules/espree": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
-      "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "acorn": "^8.12.0",
-        "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^4.0.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
     "node_modules/@eslint/eslintrc/node_modules/globals": {
       "version": "14.0.0",
       "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
@@ -2917,9 +2886,9 @@
       "peer": true
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz",
-      "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.1.tgz",
+      "integrity": "sha512-2thheikVEuU7ZxFXubPDOtspKn1x0yqaYQwvALVtEcvFhMifPADBrgRPyHV0TF3b+9BgvgjgagVyvA/UqPZHmg==",
       "cpu": [
         "arm"
       ],
@@ -2931,9 +2900,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz",
-      "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.1.tgz",
+      "integrity": "sha512-t1lLYn4V9WgnIFHXy1d2Di/7gyzBWS8G5pQSXdZqfrdCGTwi1VasRMSS81DTYb+avDs/Zz4A6dzERki5oRYz1g==",
       "cpu": [
         "arm64"
       ],
@@ -2945,9 +2914,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz",
-      "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.1.tgz",
+      "integrity": "sha512-AH/wNWSEEHvs6t4iJ3RANxW5ZCK3fUnmf0gyMxWCesY1AlUj8jY7GC+rQE4wd3gwmZ9XDOpL0kcFnCjtN7FXlA==",
       "cpu": [
         "arm64"
       ],
@@ -2959,9 +2928,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz",
-      "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.1.tgz",
+      "integrity": "sha512-dO0BIz/+5ZdkLZrVgQrDdW7m2RkrLwYTh2YMFG9IpBtlC1x1NPNSXkfczhZieOlOLEqgXOFH3wYHB7PmBtf+Bg==",
       "cpu": [
         "x64"
       ],
@@ -2973,9 +2942,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz",
-      "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.1.tgz",
+      "integrity": "sha512-sWWgdQ1fq+XKrlda8PsMCfut8caFwZBmhYeoehJ05FdI0YZXk6ZyUjWLrIgbR/VgiGycrFKMMgp7eJ69HOF2pQ==",
       "cpu": [
         "arm"
       ],
@@ -2987,9 +2956,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz",
-      "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.1.tgz",
+      "integrity": "sha512-9OIiSuj5EsYQlmwhmFRA0LRO0dRRjdCVZA3hnmZe1rEwRk11Jy3ECGGq3a7RrVEZ0/pCsYWx8jG3IvcrJ6RCew==",
       "cpu": [
         "arm"
       ],
@@ -3001,9 +2970,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz",
-      "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.1.tgz",
+      "integrity": "sha512-0kuAkRK4MeIUbzQYu63NrJmfoUVicajoRAL1bpwdYIYRcs57iyIV9NLcuyDyDXE2GiZCL4uhKSYAnyWpjZkWow==",
       "cpu": [
         "arm64"
       ],
@@ -3015,9 +2984,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz",
-      "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.1.tgz",
+      "integrity": "sha512-/6dYC9fZtfEY0vozpc5bx1RP4VrtEOhNQGb0HwvYNwXD1BBbwQ5cKIbUVVU7G2d5WRE90NfB922elN8ASXAJEA==",
       "cpu": [
         "arm64"
       ],
@@ -3029,9 +2998,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz",
-      "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.1.tgz",
+      "integrity": "sha512-ltUWy+sHeAh3YZ91NUsV4Xg3uBXAlscQe8ZOXRCVAKLsivGuJsrkawYPUEyCV3DYa9urgJugMLn8Z3Z/6CeyRQ==",
       "cpu": [
         "ppc64"
       ],
@@ -3043,9 +3012,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz",
-      "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.1.tgz",
+      "integrity": "sha512-BggMndzI7Tlv4/abrgLwa/dxNEMn2gC61DCLrTzw8LkpSKel4o+O+gtjbnkevZ18SKkeN3ihRGPuBxjaetWzWg==",
       "cpu": [
         "riscv64"
       ],
@@ -3057,9 +3026,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz",
-      "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.1.tgz",
+      "integrity": "sha512-z/9rtlGd/OMv+gb1mNSjElasMf9yXusAxnRDrBaYB+eS1shFm6/4/xDH1SAISO5729fFKUkJ88TkGPRUh8WSAA==",
       "cpu": [
         "s390x"
       ],
@@ -3071,9 +3040,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz",
-      "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.1.tgz",
+      "integrity": "sha512-kXQVcWqDcDKw0S2E0TmhlTLlUgAmMVqPrJZR+KpH/1ZaZhLSl23GZpQVmawBQGVhyP5WXIsIQ/zqbDBBYmxm5w==",
       "cpu": [
         "x64"
       ],
@@ -3085,9 +3054,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz",
-      "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.1.tgz",
+      "integrity": "sha512-CbFv/WMQsSdl+bpX6rVbzR4kAjSSBuDgCqb1l4J68UYsQNalz5wOqLGYj4ZI0thGpyX5kc+LLZ9CL+kpqDovZA==",
       "cpu": [
         "x64"
       ],
@@ -3099,9 +3068,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz",
-      "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.1.tgz",
+      "integrity": "sha512-3Q3brDgA86gHXWHklrwdREKIrIbxC0ZgU8lwpj0eEKGBQH+31uPqr0P2v11pn0tSIxHvcdOWxa4j+YvLNx1i6g==",
       "cpu": [
         "arm64"
       ],
@@ -3113,9 +3082,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz",
-      "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.1.tgz",
+      "integrity": "sha512-tNg+jJcKR3Uwe4L0/wY3Ro0H+u3nrb04+tcq1GSYzBEmKLeOQF2emk1whxlzNqb6MMrQ2JOcQEpuuiPLyRcSIw==",
       "cpu": [
         "ia32"
       ],
@@ -3127,9 +3096,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz",
-      "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.1.tgz",
+      "integrity": "sha512-xGiIH95H1zU7naUyTKEyOA/I0aexNMUdO9qRv0bLKN3qu25bBdrxZHqA3PTJ24YNN/GdMzG4xkDcd/GvjuhfLg==",
       "cpu": [
         "x64"
       ],
@@ -4091,9 +4060,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001651",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
-      "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
+      "version": "1.0.30001653",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz",
+      "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==",
       "dev": true,
       "funding": [
         {
@@ -4246,9 +4215,9 @@
       "license": "MIT"
     },
     "node_modules/core-js": {
-      "version": "3.38.0",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.0.tgz",
-      "integrity": "sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug==",
+      "version": "3.38.1",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz",
+      "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==",
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
@@ -4258,9 +4227,9 @@
       }
     },
     "node_modules/core-js-compat": {
-      "version": "3.38.0",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz",
-      "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==",
+      "version": "3.38.1",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz",
+      "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4560,16 +4529,16 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.6",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz",
-      "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==",
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
+      "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
       "dev": true,
       "license": "ISC"
     },
     "node_modules/emoji-regex": {
-      "version": "10.3.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
-      "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==",
+      "version": "10.4.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz",
+      "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
       "license": "MIT",
       "peer": true
     },
@@ -4981,6 +4950,24 @@
         "url": "https://opencollective.com/eslint"
       }
     },
+    "node_modules/eslint/node_modules/espree": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/eslint/node_modules/estraverse": {
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
@@ -5031,31 +5018,31 @@
       }
     },
     "node_modules/espree": {
-      "version": "9.6.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
-      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
+      "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "acorn": "^8.9.0",
+        "acorn": "^8.12.0",
         "acorn-jsx": "^5.3.2",
-        "eslint-visitor-keys": "^3.4.1"
+        "eslint-visitor-keys": "^4.0.0"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
       }
     },
     "node_modules/espree/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
+      "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
       "dev": true,
       "license": "Apache-2.0",
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
@@ -5740,9 +5727,9 @@
       "peer": true
     },
     "node_modules/is-core-module": {
-      "version": "2.15.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
-      "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
+      "version": "2.15.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
+      "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6183,14 +6170,14 @@
       }
     },
     "node_modules/magicast": {
-      "version": "0.3.4",
-      "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz",
-      "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==",
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz",
+      "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/parser": "^7.24.4",
-        "@babel/types": "^7.24.0",
+        "@babel/parser": "^7.25.4",
+        "@babel/types": "^7.25.4",
         "source-map-js": "^1.2.0"
       }
     },
@@ -7024,9 +7011,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz",
-      "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.1.tgz",
+      "integrity": "sha512-ZnYyKvscThhgd3M5+Qt3pmhO4jIRR5RGzaSovB6Q7rGNrK5cUncrtLmcTTJVSdcKXyZjW8X8MB0JMSuH9bcAJg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -7040,22 +7027,22 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.20.0",
-        "@rollup/rollup-android-arm64": "4.20.0",
-        "@rollup/rollup-darwin-arm64": "4.20.0",
-        "@rollup/rollup-darwin-x64": "4.20.0",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.20.0",
-        "@rollup/rollup-linux-arm-musleabihf": "4.20.0",
-        "@rollup/rollup-linux-arm64-gnu": "4.20.0",
-        "@rollup/rollup-linux-arm64-musl": "4.20.0",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0",
-        "@rollup/rollup-linux-riscv64-gnu": "4.20.0",
-        "@rollup/rollup-linux-s390x-gnu": "4.20.0",
-        "@rollup/rollup-linux-x64-gnu": "4.20.0",
-        "@rollup/rollup-linux-x64-musl": "4.20.0",
-        "@rollup/rollup-win32-arm64-msvc": "4.20.0",
-        "@rollup/rollup-win32-ia32-msvc": "4.20.0",
-        "@rollup/rollup-win32-x64-msvc": "4.20.0",
+        "@rollup/rollup-android-arm-eabi": "4.21.1",
+        "@rollup/rollup-android-arm64": "4.21.1",
+        "@rollup/rollup-darwin-arm64": "4.21.1",
+        "@rollup/rollup-darwin-x64": "4.21.1",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.21.1",
+        "@rollup/rollup-linux-arm-musleabihf": "4.21.1",
+        "@rollup/rollup-linux-arm64-gnu": "4.21.1",
+        "@rollup/rollup-linux-arm64-musl": "4.21.1",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.21.1",
+        "@rollup/rollup-linux-riscv64-gnu": "4.21.1",
+        "@rollup/rollup-linux-s390x-gnu": "4.21.1",
+        "@rollup/rollup-linux-x64-gnu": "4.21.1",
+        "@rollup/rollup-linux-x64-musl": "4.21.1",
+        "@rollup/rollup-win32-arm64-msvc": "4.21.1",
+        "@rollup/rollup-win32-ia32-msvc": "4.21.1",
+        "@rollup/rollup-win32-x64-msvc": "4.21.1",
         "fsevents": "~2.3.2"
       }
     },
@@ -7534,9 +7521,9 @@
       "license": "MIT"
     },
     "node_modules/tinypool": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz",
-      "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz",
+      "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -7603,9 +7590,9 @@
       }
     },
     "node_modules/tslib": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
-      "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
+      "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
       "license": "0BSD"
     },
     "node_modules/type-check": {
@@ -8042,6 +8029,24 @@
         "url": "https://opencollective.com/eslint"
       }
     },
+    "node_modules/vue-eslint-parser/node_modules/espree": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+      "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "acorn": "^8.9.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.4.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/vue-eslint-parser/node_modules/estraverse": {
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
diff --git a/print/package-lock.json b/print/package-lock.json
index df268cf1a1..4ec3ef5df8 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -123,9 +123,9 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz",
-      "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz",
+      "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -174,13 +174,13 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz",
-      "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==",
+      "version": "7.25.5",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz",
+      "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.0",
+        "@babel/types": "^7.25.4",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
         "jsesc": "^2.5.1"
@@ -243,9 +243,9 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz",
-      "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz",
+      "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -254,7 +254,7 @@
         "@babel/helper-optimise-call-expression": "^7.24.7",
         "@babel/helper-replace-supers": "^7.25.0",
         "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7",
-        "@babel/traverse": "^7.25.0",
+        "@babel/traverse": "^7.25.4",
         "semver": "^6.3.1"
       },
       "engines": {
@@ -527,12 +527,12 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz",
-      "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz",
+      "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.2"
+        "@babel/types": "^7.25.4"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -621,13 +621,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-typescript": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz",
-      "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz",
+      "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.24.8"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -657,9 +657,9 @@
       }
     },
     "node_modules/@babel/standalone": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.25.3.tgz",
-      "integrity": "sha512-uR+EoBqIIIvKGCG7fOj7HKupu3zVObiMfdEwoPZfVCPpcWJaZ1PkshaP5/6cl6BKAm1Zcv25O1rf+uoQ7V8nqA==",
+      "version": "7.25.5",
+      "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.25.5.tgz",
+      "integrity": "sha512-46bI7GJHwgWfWszOWMvJIsJjXd+LBMIlaiw4R54+b7GvDfxTVE6ytsqR8uEiI/zYECoB33ChwfN0wq/MLHLFXg==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -682,17 +682,17 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.3",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz",
-      "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz",
+      "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.0",
-        "@babel/parser": "^7.25.3",
+        "@babel/generator": "^7.25.4",
+        "@babel/parser": "^7.25.4",
         "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.2",
+        "@babel/types": "^7.25.4",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -711,9 +711,9 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.25.2",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz",
-      "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==",
+      "version": "7.25.4",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz",
+      "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==",
       "license": "MIT",
       "dependencies": {
         "@babel/helper-string-parser": "^7.24.8",
@@ -773,9 +773,9 @@
       }
     },
     "node_modules/@esbuild/aix-ppc64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz",
-      "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+      "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
       "cpu": [
         "ppc64"
       ],
@@ -786,13 +786,13 @@
         "aix"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/android-arm": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz",
-      "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+      "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
       "cpu": [
         "arm"
       ],
@@ -803,13 +803,13 @@
         "android"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/android-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz",
-      "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+      "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
       "cpu": [
         "arm64"
       ],
@@ -820,13 +820,13 @@
         "android"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/android-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz",
-      "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+      "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
       "cpu": [
         "x64"
       ],
@@ -837,13 +837,13 @@
         "android"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz",
-      "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+      "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
       "cpu": [
         "arm64"
       ],
@@ -854,13 +854,13 @@
         "darwin"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/darwin-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz",
-      "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+      "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
       "cpu": [
         "x64"
       ],
@@ -871,13 +871,13 @@
         "darwin"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz",
-      "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+      "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
       "cpu": [
         "arm64"
       ],
@@ -888,13 +888,13 @@
         "freebsd"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz",
-      "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+      "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
       "cpu": [
         "x64"
       ],
@@ -905,13 +905,13 @@
         "freebsd"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/linux-arm": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz",
-      "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+      "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
       "cpu": [
         "arm"
       ],
@@ -922,13 +922,13 @@
         "linux"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/linux-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz",
-      "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+      "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
       "cpu": [
         "arm64"
       ],
@@ -939,13 +939,13 @@
         "linux"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/linux-ia32": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz",
-      "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+      "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
       "cpu": [
         "ia32"
       ],
@@ -956,13 +956,13 @@
         "linux"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/linux-loong64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz",
-      "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+      "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
       "cpu": [
         "loong64"
       ],
@@ -973,13 +973,13 @@
         "linux"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz",
-      "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+      "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
       "cpu": [
         "mips64el"
       ],
@@ -990,13 +990,13 @@
         "linux"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz",
-      "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+      "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
       "cpu": [
         "ppc64"
       ],
@@ -1007,13 +1007,13 @@
         "linux"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz",
-      "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+      "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
       "cpu": [
         "riscv64"
       ],
@@ -1024,13 +1024,13 @@
         "linux"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/linux-s390x": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz",
-      "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+      "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
       "cpu": [
         "s390x"
       ],
@@ -1041,13 +1041,13 @@
         "linux"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/linux-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz",
-      "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+      "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
       "cpu": [
         "x64"
       ],
@@ -1058,13 +1058,13 @@
         "linux"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz",
-      "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+      "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
       "cpu": [
         "x64"
       ],
@@ -1075,7 +1075,7 @@
         "netbsd"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/openbsd-arm64": {
@@ -1096,9 +1096,9 @@
       }
     },
     "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz",
-      "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+      "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
       "cpu": [
         "x64"
       ],
@@ -1109,13 +1109,13 @@
         "openbsd"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/sunos-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz",
-      "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+      "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
       "cpu": [
         "x64"
       ],
@@ -1126,13 +1126,13 @@
         "sunos"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/win32-arm64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz",
-      "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+      "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
       "cpu": [
         "arm64"
       ],
@@ -1143,13 +1143,13 @@
         "win32"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/win32-ia32": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz",
-      "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+      "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
       "cpu": [
         "ia32"
       ],
@@ -1160,13 +1160,13 @@
         "win32"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@esbuild/win32-x64": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz",
-      "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+      "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
       "cpu": [
         "x64"
       ],
@@ -1177,7 +1177,7 @@
         "win32"
       ],
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       }
     },
     "node_modules/@eslint-community/eslint-utils": {
@@ -1244,30 +1244,6 @@
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
-    "node_modules/@eslint/config-array/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/@eslint/config-array/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/@eslint/config-inspector": {
       "version": "0.5.4",
       "resolved": "https://registry.npmjs.org/@eslint/config-inspector/-/config-inspector-0.5.4.tgz",
@@ -1303,1845 +1279,1791 @@
         "eslint": "^8.50.0 || ^9.0.0"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/aix-ppc64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
-      "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
-      "cpu": [
-        "ppc64"
-      ],
+    "node_modules/@eslint/config-inspector/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "aix"
-      ],
-      "engines": {
-        "node": ">=12"
+      "dependencies": {
+        "balanced-match": "^1.0.0"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/android-arm": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
-      "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
-      "cpu": [
-        "arm"
-      ],
+    "node_modules/@eslint/config-inspector/node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/android-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
-      "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@eslint/eslintrc": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+      "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
+      "dependencies": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^10.0.1",
+        "globals": "^14.0.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
       "engines": {
-        "node": ">=12"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/android-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
-      "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@eslint/eslintrc/node_modules/globals": {
+      "version": "14.0.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/darwin-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
-      "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@eslint/js": {
+      "version": "9.9.1",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
+      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/darwin-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
-      "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@eslint/object-schema": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
+      "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
+      "license": "Apache-2.0",
       "engines": {
-        "node": ">=12"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
-      "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@fastify/busboy": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
+      "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">=14"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/freebsd-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
-      "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@humanwhocodes/config-array": {
+      "version": "0.11.14",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+      "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
+      "deprecated": "Use @eslint/config-array instead",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@humanwhocodes/object-schema": "^2.0.2",
+        "debug": "^4.3.1",
+        "minimatch": "^3.0.5"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=10.10.0"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-arm": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
-      "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
-      "cpu": [
-        "arm"
-      ],
+    "node_modules/@humanwhocodes/module-importer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "license": "Apache-2.0",
       "engines": {
-        "node": ">=12"
+        "node": ">=12.22"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
-      "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@humanwhocodes/object-schema": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+      "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+      "deprecated": "Use @eslint/object-schema instead",
+      "dev": true,
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@intlify/bundle-utils": {
+      "version": "7.5.1",
+      "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-7.5.1.tgz",
+      "integrity": "sha512-UovJl10oBIlmYEcWw+VIHdKY5Uv5sdPG0b/b6bOYxGLln3UwB75+2dlc0F3Fsa0RhoznQ5Rp589/BZpABpE4Xw==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "dependencies": {
+        "@intlify/message-compiler": "^9.4.0",
+        "@intlify/shared": "^9.4.0",
+        "acorn": "^8.8.2",
+        "escodegen": "^2.1.0",
+        "estree-walker": "^2.0.2",
+        "jsonc-eslint-parser": "^2.3.0",
+        "magic-string": "^0.30.0",
+        "mlly": "^1.2.0",
+        "source-map-js": "^1.0.1",
+        "yaml-eslint-parser": "^1.2.2"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">= 14.16"
+      },
+      "peerDependenciesMeta": {
+        "petite-vue-i18n": {
+          "optional": true
+        },
+        "vue-i18n": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-ia32": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
-      "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
-      "cpu": [
-        "ia32"
-      ],
+    "node_modules/@intlify/bundle-utils/node_modules/estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@intlify/core": {
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.14.0.tgz",
+      "integrity": "sha512-lPZ78GkDFcppC9Ol8oruyPGJbBWvTYDTEAJBebDtGmDIeggDJAiR+XMbCPZAOeW4/XszcIeiGYKEx0BvQDjVTw==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "dependencies": {
+        "@intlify/core-base": "9.14.0",
+        "@intlify/shared": "9.14.0"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-loong64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
-      "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
-      "cpu": [
-        "loong64"
-      ],
+    "node_modules/@intlify/core-base": {
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.0.tgz",
+      "integrity": "sha512-zJn0imh9HIsZZUtt9v8T16PeVstPv6bP2YzlrYJwoF8F30gs4brZBwW2KK6EI5WYKFi3NeqX6+UU4gniz5TkGg==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "dependencies": {
+        "@intlify/message-compiler": "9.14.0",
+        "@intlify/shared": "9.14.0"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-mips64el": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
-      "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
-      "cpu": [
-        "mips64el"
-      ],
+    "node_modules/@intlify/h3": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/@intlify/h3/-/h3-0.5.0.tgz",
+      "integrity": "sha512-cgfrtD3qu3BPJ47gfZ35J2LJpI64Riic0K8NGgid5ilyPXRQTNY7mXlT/B+HZYQg1hmBxKa5G5HJXyAZ4R2H5A==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "dependencies": {
+        "@intlify/core": "^9.8.0",
+        "@intlify/utils": "^0.12.0"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">= 18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-ppc64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
-      "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
-      "cpu": [
-        "ppc64"
-      ],
+    "node_modules/@intlify/message-compiler": {
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.0.tgz",
+      "integrity": "sha512-sXNsoMI0YsipSXW8SR75drmVK56tnJHoYbPXUv2Cf9lz6FzvwsosFm6JtC1oQZI/kU+n7qx0qRrEWkeYFTgETA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "dependencies": {
+        "@intlify/shared": "9.14.0",
+        "source-map-js": "^1.0.2"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-riscv64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
-      "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
-      "cpu": [
-        "riscv64"
-      ],
+    "node_modules/@intlify/shared": {
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.0.tgz",
+      "integrity": "sha512-r+N8KRQL7LgN1TMTs1A2svfuAU0J94Wu9wWdJVJqYsoMMLIeJxrPjazihfHpmJqfgZq0ah3Y9Q4pgWV2O90Fyg==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">= 16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-s390x": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
-      "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
-      "cpu": [
-        "s390x"
-      ],
+    "node_modules/@intlify/unplugin-vue-i18n": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-3.0.1.tgz",
+      "integrity": "sha512-q1zJhA/WpoLBzAAuKA5/AEp0e+bMOM10ll/HxT4g1VAw/9JhC4TTobP9KobKH90JMZ4U2daLFlYQfKNd29lpqw==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "dependencies": {
+        "@intlify/bundle-utils": "^7.4.0",
+        "@intlify/shared": "^9.4.0",
+        "@rollup/pluginutils": "^5.1.0",
+        "@vue/compiler-sfc": "^3.2.47",
+        "debug": "^4.3.3",
+        "fast-glob": "^3.2.12",
+        "js-yaml": "^4.1.0",
+        "json5": "^2.2.3",
+        "pathe": "^1.0.0",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2",
+        "unplugin": "^1.1.0"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">= 14.16"
+      },
+      "peerDependencies": {
+        "petite-vue-i18n": "*",
+        "vue-i18n": "*",
+        "vue-i18n-bridge": "*"
+      },
+      "peerDependenciesMeta": {
+        "petite-vue-i18n": {
+          "optional": true
+        },
+        "vue-i18n": {
+          "optional": true
+        },
+        "vue-i18n-bridge": {
+          "optional": true
+        }
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/linux-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
-      "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@intlify/utils": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/@intlify/utils/-/utils-0.12.0.tgz",
+      "integrity": "sha512-yCBNcuZQ49iInqmWC2xfW0rgEQyNtCM8C8KcWKTXxyscgUE1+48gjLgZZqP75MjhlApxwph7ZMWLqyABkSgxQA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">= 18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/kazupon"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/netbsd-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
-      "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@ioredis/commands": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz",
+      "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
+      "license": "MIT"
+    },
+    "node_modules/@isaacs/cliui": {
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+      "dev": true,
+      "license": "ISC",
+      "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"
+      },
       "engines": {
         "node": ">=12"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/openbsd-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
-      "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
       "engines": {
         "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/sunos-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
-      "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "sunos"
-      ],
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
       "engines": {
         "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/win32-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
-      "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@istanbuljs/schema": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+      "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">=8"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/win32-ia32": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
-      "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
-      "cpu": [
-        "ia32"
-      ],
+    "node_modules/@jamescoyle/vue-icon": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/@jamescoyle/vue-icon/-/vue-icon-0.1.2.tgz",
+      "integrity": "sha512-KFrImXx5TKIi6iQXlnyLEBl4rNosNKbTeRnr70ucTdUaciVmd9qK9d/pZAaKt1Ob/8xNnX2GMp8LisyHdKtEgw==",
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+      "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
+      "dependencies": {
+        "@jridgewell/set-array": "^1.2.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=6.0.0"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/@esbuild/win32-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
-      "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">=6.0.0"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/define-lazy-prop": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
-      "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
+    "node_modules/@jridgewell/set-array": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=6.0.0"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/esbuild": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
-      "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+    "node_modules/@jridgewell/source-map": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+      "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
       "dev": true,
-      "hasInstallScript": true,
       "license": "MIT",
-      "bin": {
-        "esbuild": "bin/esbuild"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.21.5",
-        "@esbuild/android-arm": "0.21.5",
-        "@esbuild/android-arm64": "0.21.5",
-        "@esbuild/android-x64": "0.21.5",
-        "@esbuild/darwin-arm64": "0.21.5",
-        "@esbuild/darwin-x64": "0.21.5",
-        "@esbuild/freebsd-arm64": "0.21.5",
-        "@esbuild/freebsd-x64": "0.21.5",
-        "@esbuild/linux-arm": "0.21.5",
-        "@esbuild/linux-arm64": "0.21.5",
-        "@esbuild/linux-ia32": "0.21.5",
-        "@esbuild/linux-loong64": "0.21.5",
-        "@esbuild/linux-mips64el": "0.21.5",
-        "@esbuild/linux-ppc64": "0.21.5",
-        "@esbuild/linux-riscv64": "0.21.5",
-        "@esbuild/linux-s390x": "0.21.5",
-        "@esbuild/linux-x64": "0.21.5",
-        "@esbuild/netbsd-x64": "0.21.5",
-        "@esbuild/openbsd-x64": "0.21.5",
-        "@esbuild/sunos-x64": "0.21.5",
-        "@esbuild/win32-arm64": "0.21.5",
-        "@esbuild/win32-ia32": "0.21.5",
-        "@esbuild/win32-x64": "0.21.5"
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/find-up": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz",
-      "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==",
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.25",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "locate-path": "^7.2.0",
-        "path-exists": "^5.0.0",
-        "unicorn-magic": "^0.1.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/locate-path": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
-      "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
+    "node_modules/@jsdevtools/ono": {
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
+      "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@koa/router": {
+      "version": "12.0.1",
+      "resolved": "https://registry.npmjs.org/@koa/router/-/router-12.0.1.tgz",
+      "integrity": "sha512-ribfPYfHb+Uw3b27Eiw6NPqjhIhTpVFzEWLwyc/1Xp+DCdwRRyIlAUODX+9bPARF6aQtUu1+/PHzdNvRzcs/+Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "p-locate": "^6.0.0"
+        "debug": "^4.3.4",
+        "http-errors": "^2.0.0",
+        "koa-compose": "^4.1.0",
+        "methods": "^1.1.2",
+        "path-to-regexp": "^6.2.1"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">= 12"
+      }
+    },
+    "node_modules/@kwsites/file-exists": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+      "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "debug": "^4.1.1"
+      }
+    },
+    "node_modules/@kwsites/promise-deferred": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+      "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@mapbox/node-pre-gyp": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
+      "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
+      "dev": true,
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "detect-libc": "^2.0.0",
+        "https-proxy-agent": "^5.0.0",
+        "make-dir": "^3.1.0",
+        "node-fetch": "^2.6.7",
+        "nopt": "^5.0.0",
+        "npmlog": "^5.0.1",
+        "rimraf": "^3.0.2",
+        "semver": "^7.3.5",
+        "tar": "^6.1.11"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "bin": {
+        "node-pre-gyp": "bin/node-pre-gyp"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/open": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz",
-      "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==",
+    "node_modules/@mapbox/node-pre-gyp/node_modules/abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/@mapbox/node-pre-gyp/node_modules/agent-base": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "default-browser": "^5.2.1",
-        "define-lazy-prop": "^3.0.0",
-        "is-inside-container": "^1.0.0",
-        "is-wsl": "^3.1.0"
+        "debug": "4"
       },
       "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">= 6.0.0"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/p-limit": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
-      "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
+    "node_modules/@mapbox/node-pre-gyp/node_modules/https-proxy-agent": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+      "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "yocto-queue": "^1.0.0"
+        "agent-base": "6",
+        "debug": "4"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">= 6"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/p-locate": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
-      "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
+    "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "p-limit": "^4.0.0"
+        "semver": "^6.0.0"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=8"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/path-exists": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
-      "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
+    "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
       "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
       }
     },
-    "node_modules/@eslint/config-inspector/node_modules/yocto-queue": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
-      "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==",
+    "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+      "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
       "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12.20"
+      "license": "ISC",
+      "dependencies": {
+        "abbrev": "1"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "bin": {
+        "nopt": "bin/nopt.js"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
-    "node_modules/@eslint/eslintrc": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
-      "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
+    "node_modules/@mdi/js": {
+      "version": "7.4.47",
+      "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.4.47.tgz",
+      "integrity": "sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/@miyaneee/rollup-plugin-json5": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@miyaneee/rollup-plugin-json5/-/rollup-plugin-json5-1.2.0.tgz",
+      "integrity": "sha512-JjTIaXZp9WzhUHpElrqPnl1AzBi/rvRs065F71+aTmlqvTMVkdbjZ8vfFl4nRlgJy+TPBw69ZK4pwFdmOAt4aA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ajv": "^6.12.4",
-        "debug": "^4.3.2",
-        "espree": "^10.0.1",
-        "globals": "^14.0.0",
-        "ignore": "^5.2.0",
-        "import-fresh": "^3.2.1",
-        "js-yaml": "^4.1.0",
-        "minimatch": "^3.1.2",
-        "strip-json-comments": "^3.1.1"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "@rollup/pluginutils": "^5.1.0",
+        "json5": "^2.2.3"
       },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
+      "peerDependencies": {
+        "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+    "node_modules/@netlify/functions": {
+      "version": "2.8.1",
+      "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-2.8.1.tgz",
+      "integrity": "sha512-+6wtYdoz0yE06dSa9XkP47tw5zm6g13QMeCwM3MmHx1vn8hzwFa51JtmfraprdkL7amvb7gaNM+OOhQU1h6T8A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
+        "@netlify/serverless-functions-api": "1.19.1"
+      },
+      "engines": {
+        "node": ">=14.0.0"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/globals": {
-      "version": "14.0.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
-      "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+    "node_modules/@netlify/node-cookies": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/@netlify/node-cookies/-/node-cookies-0.1.0.tgz",
+      "integrity": "sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": "^14.16.0 || >=16.0.0"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+    "node_modules/@netlify/serverless-functions-api": {
+      "version": "1.19.1",
+      "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.19.1.tgz",
+      "integrity": "sha512-2KYkyluThg1AKfd0JWI7FzpS4A/fzVVGYIf6AM4ydWyNj8eI/86GQVLeRgDoH7CNOxt243R5tutWlmHpVq0/Ew==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "brace-expansion": "^1.1.7"
+        "@netlify/node-cookies": "^0.1.0",
+        "urlpattern-polyfill": "8.0.2"
       },
       "engines": {
-        "node": "*"
+        "node": ">=18.0.0"
       }
     },
-    "node_modules/@eslint/js": {
-      "version": "9.9.1",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
-      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-3.0.0.tgz",
+      "integrity": "sha512-ktI9+PxfHYtKjF3cLTUAh2N+b8MijCRPNwKJNqTVdL0gB0QxLU2rIRaZ1t71oEa3YBDE6bukH1sR0+CDnpp/Mg==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "3.0.0",
+        "run-parallel": "^1.2.0"
+      },
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": ">=16.14.0"
       }
     },
-    "node_modules/@eslint/object-schema": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
-      "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
+    "node_modules/@nodelib/fs.stat": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-3.0.0.tgz",
+      "integrity": "sha512-2tQOI38s19P9i7X/Drt0v8iMA+KMsgdhB/dyPER+e+2Y8L1Z7QvnuRdW/uLuf5YRFUYmnj4bMA6qCuZHFI1GDQ==",
       "dev": true,
-      "license": "Apache-2.0",
+      "license": "MIT",
       "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+        "node": ">=16.14.0"
       }
     },
-    "node_modules/@fastify/busboy": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
-      "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
+    "node_modules/@nodelib/fs.walk": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-2.0.0.tgz",
+      "integrity": "sha512-54voNDBobGdMl3BUXSu7UaDh1P85PGHWlJ5e0XhPugo1JulOyCtp2I+5ri4wplGDJ8QGwPEQW7/x3yTLU7yF1A==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.scandir": "3.0.0",
+        "fastq": "^1.15.0"
+      },
       "engines": {
-        "node": ">=14"
+        "node": ">=16.14.0"
       }
     },
-    "node_modules/@humanwhocodes/config-array": {
-      "version": "0.11.14",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
-      "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
-      "deprecated": "Use @eslint/config-array instead",
+    "node_modules/@nuxt/devalue": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/@nuxt/devalue/-/devalue-2.0.2.tgz",
+      "integrity": "sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==",
       "dev": true,
-      "license": "Apache-2.0",
+      "license": "MIT"
+    },
+    "node_modules/@nuxt/devtools": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/@nuxt/devtools/-/devtools-1.4.1.tgz",
+      "integrity": "sha512-BtmGRAr/pjSE3dBrM7iceNT6OZAQ/MHxq1brkHJDs2VdyZPnqqGS4n3/98saASoRdj0dddsuIElsqC/zIABhgg==",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@humanwhocodes/object-schema": "^2.0.2",
-        "debug": "^4.3.1",
-        "minimatch": "^3.0.5"
+        "@antfu/utils": "^0.7.10",
+        "@nuxt/devtools-kit": "1.4.1",
+        "@nuxt/devtools-wizard": "1.4.1",
+        "@nuxt/kit": "^3.13.0",
+        "@vue/devtools-core": "7.3.3",
+        "@vue/devtools-kit": "7.3.3",
+        "birpc": "^0.2.17",
+        "consola": "^3.2.3",
+        "cronstrue": "^2.50.0",
+        "destr": "^2.0.3",
+        "error-stack-parser-es": "^0.1.5",
+        "execa": "^7.2.0",
+        "fast-npm-meta": "^0.2.2",
+        "flatted": "^3.3.1",
+        "get-port-please": "^3.1.2",
+        "hookable": "^5.5.3",
+        "image-meta": "^0.2.1",
+        "is-installed-globally": "^1.0.0",
+        "launch-editor": "^2.8.1",
+        "local-pkg": "^0.5.0",
+        "magicast": "^0.3.4",
+        "nypm": "^0.3.11",
+        "ohash": "^1.1.3",
+        "pathe": "^1.1.2",
+        "perfect-debounce": "^1.0.0",
+        "pkg-types": "^1.2.0",
+        "rc9": "^2.1.2",
+        "scule": "^1.3.0",
+        "semver": "^7.6.3",
+        "simple-git": "^3.25.0",
+        "sirv": "^2.0.4",
+        "tinyglobby": "^0.2.5",
+        "unimport": "^3.11.1",
+        "vite-plugin-inspect": "^0.8.7",
+        "vite-plugin-vue-inspector": "^5.1.3",
+        "which": "^3.0.1",
+        "ws": "^8.18.0"
       },
-      "engines": {
-        "node": ">=10.10.0"
+      "bin": {
+        "devtools": "cli.mjs"
+      },
+      "peerDependencies": {
+        "vite": "*"
       }
     },
-    "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+    "node_modules/@nuxt/devtools-kit": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.4.1.tgz",
+      "integrity": "sha512-6h7T9B0tSZVap13/hf7prEAgIzraj/kyux6/Iif455Trew96jHIFCCboBApUMastYEuCo3l17tgZKe0HW+jrtA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
+        "@nuxt/kit": "^3.13.0",
+        "@nuxt/schema": "^3.13.0",
+        "execa": "^7.2.0"
+      },
+      "peerDependencies": {
+        "vite": "*"
       }
     },
-    "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+    "node_modules/@nuxt/devtools-wizard": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/@nuxt/devtools-wizard/-/devtools-wizard-1.4.1.tgz",
+      "integrity": "sha512-X9uTh5rgt0pw3UjXcHyl8ZFYmCgw8ITRe9Nr2VLCtNROfKz9yol/ESEhYMwTFiFlqSyfJP6/qtogJBjUt6dzTw==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "brace-expansion": "^1.1.7"
+        "consola": "^3.2.3",
+        "diff": "^5.2.0",
+        "execa": "^7.2.0",
+        "global-directory": "^4.0.1",
+        "magicast": "^0.3.4",
+        "pathe": "^1.1.2",
+        "pkg-types": "^1.2.0",
+        "prompts": "^2.4.2",
+        "rc9": "^2.1.2",
+        "semver": "^7.6.3"
       },
-      "engines": {
-        "node": "*"
+      "bin": {
+        "devtools-wizard": "cli.mjs"
       }
     },
-    "node_modules/@humanwhocodes/module-importer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
-      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+    "node_modules/@nuxt/devtools/node_modules/which": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz",
+      "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==",
       "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=12.22"
+      "license": "ISC",
+      "dependencies": {
+        "isexe": "^2.0.0"
       },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/nzakas"
+      "bin": {
+        "node-which": "bin/which.js"
+      },
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/@humanwhocodes/object-schema": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
-      "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
-      "deprecated": "Use @eslint/object-schema instead",
-      "dev": true,
-      "license": "BSD-3-Clause"
-    },
-    "node_modules/@intlify/bundle-utils": {
-      "version": "7.5.1",
-      "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-7.5.1.tgz",
-      "integrity": "sha512-UovJl10oBIlmYEcWw+VIHdKY5Uv5sdPG0b/b6bOYxGLln3UwB75+2dlc0F3Fsa0RhoznQ5Rp589/BZpABpE4Xw==",
+    "node_modules/@nuxt/eslint": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint/-/eslint-0.5.3.tgz",
+      "integrity": "sha512-v5qhTou69hHEC0UmxJAPBS9h6fXVpyzCYIicEx6CyTbgYB6Vf1XJ5nSMVjWrgDu5LmUJ9tAEYvVRRmVQ3gxMIg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/message-compiler": "^9.4.0",
-        "@intlify/shared": "^9.4.0",
-        "acorn": "^8.8.2",
-        "escodegen": "^2.1.0",
-        "estree-walker": "^2.0.2",
-        "jsonc-eslint-parser": "^2.3.0",
-        "magic-string": "^0.30.0",
-        "mlly": "^1.2.0",
-        "source-map-js": "^1.0.1",
-        "yaml-eslint-parser": "^1.2.2"
+        "@eslint/config-inspector": "^0.5.4",
+        "@nuxt/devtools-kit": "^1.4.1",
+        "@nuxt/eslint-config": "0.5.3",
+        "@nuxt/eslint-plugin": "0.5.3",
+        "@nuxt/kit": "^3.13.0",
+        "chokidar": "^3.6.0",
+        "eslint-flat-config-utils": "^0.3.1",
+        "eslint-typegen": "^0.3.1",
+        "find-up": "^7.0.0",
+        "get-port-please": "^3.1.2",
+        "mlly": "^1.7.1",
+        "pathe": "^1.1.2",
+        "unimport": "^3.11.1"
       },
-      "engines": {
-        "node": ">= 14.16"
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0",
+        "eslint-webpack-plugin": "^4.1.0",
+        "vite-plugin-eslint2": "^4.4.0"
       },
       "peerDependenciesMeta": {
-        "petite-vue-i18n": {
+        "eslint-webpack-plugin": {
           "optional": true
         },
-        "vue-i18n": {
+        "vite-plugin-eslint2": {
           "optional": true
         }
       }
     },
-    "node_modules/@intlify/bundle-utils/node_modules/estree-walker": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@intlify/core": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/core/-/core-9.13.1.tgz",
-      "integrity": "sha512-R+l9DRqzfK0yT9UgaCq3sl24NJAP4f/djAu4z9zLknAUBEal2q/tXFV+oGzcGpvi3uXWNvF9Gctj+IsuPwJjoA==",
+    "node_modules/@nuxt/eslint-config": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.3.tgz",
+      "integrity": "sha512-V/z6pvNLiUwh4Y2goaqIDA91rmglWujYyUTfm6e0uKillJPKyUXjPwlQyxtvfEtUyyaR/RnUswjzluL6xcZt2g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/core-base": "9.13.1",
-        "@intlify/shared": "9.13.1"
-      },
-      "engines": {
-        "node": ">= 16"
+        "@eslint/js": "^9.9.1",
+        "@nuxt/eslint-plugin": "0.5.3",
+        "@rushstack/eslint-patch": "^1.10.4",
+        "@stylistic/eslint-plugin": "^2.6.4",
+        "@typescript-eslint/eslint-plugin": "^8.3.0",
+        "@typescript-eslint/parser": "^8.3.0",
+        "eslint-config-flat-gitignore": "^0.1.8",
+        "eslint-flat-config-utils": "^0.3.1",
+        "eslint-plugin-import-x": "^4.0.0",
+        "eslint-plugin-jsdoc": "^50.2.2",
+        "eslint-plugin-regexp": "^2.6.0",
+        "eslint-plugin-unicorn": "^55.0.0",
+        "eslint-plugin-vue": "^9.27.0",
+        "globals": "^15.9.0",
+        "local-pkg": "^0.5.0",
+        "pathe": "^1.1.2",
+        "tslib": "^2.7.0",
+        "vue-eslint-parser": "^9.4.3"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/kazupon"
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0"
       }
     },
-    "node_modules/@intlify/core-base": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.13.1.tgz",
-      "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==",
+    "node_modules/@nuxt/eslint-plugin": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.3.tgz",
+      "integrity": "sha512-Qcm33Jv+BIQNreSyG0Rold64iL0VBTaL6s+dh2/88UwKknnb5GWnkP19Op7+w1xkl74okky6LIPkHPSJq3Ue7A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/message-compiler": "9.13.1",
-        "@intlify/shared": "9.13.1"
+        "@typescript-eslint/types": "^8.3.0",
+        "@typescript-eslint/utils": "^8.3.0"
       },
-      "engines": {
-        "node": ">= 16"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/kazupon"
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0"
       }
     },
-    "node_modules/@intlify/h3": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/@intlify/h3/-/h3-0.5.0.tgz",
-      "integrity": "sha512-cgfrtD3qu3BPJ47gfZ35J2LJpI64Riic0K8NGgid5ilyPXRQTNY7mXlT/B+HZYQg1hmBxKa5G5HJXyAZ4R2H5A==",
+    "node_modules/@nuxt/kit": {
+      "version": "3.13.0",
+      "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.0.tgz",
+      "integrity": "sha512-gbhSbDvYfkGQ0R2ztqTLQLHRMv+7g50kAKKuN6mbF4tL9jg7NPnQ8bAarn2I4Qx8xtmwO+qY1ABkmYMn5S1CpA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/core": "^9.8.0",
-        "@intlify/utils": "^0.12.0"
+        "@nuxt/schema": "3.13.0",
+        "c12": "^1.11.1",
+        "consola": "^3.2.3",
+        "defu": "^6.1.4",
+        "destr": "^2.0.3",
+        "globby": "^14.0.2",
+        "hash-sum": "^2.0.0",
+        "ignore": "^5.3.2",
+        "jiti": "^1.21.6",
+        "klona": "^2.0.6",
+        "knitwork": "^1.1.0",
+        "mlly": "^1.7.1",
+        "pathe": "^1.1.2",
+        "pkg-types": "^1.1.3",
+        "scule": "^1.3.0",
+        "semver": "^7.6.3",
+        "ufo": "^1.5.4",
+        "unctx": "^2.3.1",
+        "unimport": "^3.11.0",
+        "untyped": "^1.4.2"
       },
       "engines": {
-        "node": ">= 18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/kazupon"
+        "node": "^14.18.0 || >=16.10.0"
       }
     },
-    "node_modules/@intlify/message-compiler": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.13.1.tgz",
-      "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==",
+    "node_modules/@nuxt/schema": {
+      "version": "3.13.0",
+      "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.0.tgz",
+      "integrity": "sha512-JBGSjF9Hd8guvTV2312eM1RulCMJc50yR3CeMZPLDsI02A8TXQnABS8EbgvGRvxD43q/ITjj21B2ffG1wEVrnQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/shared": "9.13.1",
-        "source-map-js": "^1.0.2"
+        "compatx": "^0.1.8",
+        "consola": "^3.2.3",
+        "defu": "^6.1.4",
+        "hookable": "^5.5.3",
+        "pathe": "^1.1.2",
+        "pkg-types": "^1.1.3",
+        "scule": "^1.3.0",
+        "std-env": "^3.7.0",
+        "ufo": "^1.5.4",
+        "uncrypto": "^0.1.3",
+        "unimport": "^3.11.0",
+        "untyped": "^1.4.2"
       },
       "engines": {
-        "node": ">= 16"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/kazupon"
+        "node": "^14.18.0 || >=16.10.0"
       }
     },
-    "node_modules/@intlify/shared": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.13.1.tgz",
-      "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==",
+    "node_modules/@nuxt/telemetry": {
+      "version": "2.5.4",
+      "resolved": "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-2.5.4.tgz",
+      "integrity": "sha512-KH6wxzsNys69daSO0xUv0LEBAfhwwjK1M+0Cdi1/vxmifCslMIY7lN11B4eywSfscbyVPAYJvANyc7XiVPImBQ==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">= 16"
+      "dependencies": {
+        "@nuxt/kit": "^3.11.2",
+        "ci-info": "^4.0.0",
+        "consola": "^3.2.3",
+        "create-require": "^1.1.1",
+        "defu": "^6.1.4",
+        "destr": "^2.0.3",
+        "dotenv": "^16.4.5",
+        "git-url-parse": "^14.0.0",
+        "is-docker": "^3.0.0",
+        "jiti": "^1.21.0",
+        "mri": "^1.2.0",
+        "nanoid": "^5.0.7",
+        "ofetch": "^1.3.4",
+        "parse-git-config": "^3.0.0",
+        "pathe": "^1.1.2",
+        "rc9": "^2.1.2",
+        "std-env": "^3.7.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/kazupon"
+      "bin": {
+        "nuxt-telemetry": "bin/nuxt-telemetry.mjs"
       }
     },
-    "node_modules/@intlify/unplugin-vue-i18n": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-3.0.1.tgz",
-      "integrity": "sha512-q1zJhA/WpoLBzAAuKA5/AEp0e+bMOM10ll/HxT4g1VAw/9JhC4TTobP9KobKH90JMZ4U2daLFlYQfKNd29lpqw==",
+    "node_modules/@nuxt/vite-builder": {
+      "version": "3.13.0",
+      "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.13.0.tgz",
+      "integrity": "sha512-FVIpT5wTxGcU3JDFxIyvT6isSZUujVKavQyPo3kgOQKWURDcBcvVY4HdJIVMsSIcaXafH13RZc5RKLlxfIGFdQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/bundle-utils": "^7.4.0",
-        "@intlify/shared": "^9.4.0",
-        "@rollup/pluginutils": "^5.1.0",
-        "@vue/compiler-sfc": "^3.2.47",
-        "debug": "^4.3.3",
-        "fast-glob": "^3.2.12",
-        "js-yaml": "^4.1.0",
-        "json5": "^2.2.3",
-        "pathe": "^1.0.0",
-        "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.2",
-        "unplugin": "^1.1.0"
+        "@nuxt/kit": "3.13.0",
+        "@rollup/plugin-replace": "^5.0.7",
+        "@vitejs/plugin-vue": "^5.1.2",
+        "@vitejs/plugin-vue-jsx": "^4.0.1",
+        "autoprefixer": "^10.4.20",
+        "clear": "^0.1.0",
+        "consola": "^3.2.3",
+        "cssnano": "^7.0.5",
+        "defu": "^6.1.4",
+        "esbuild": "^0.23.1",
+        "escape-string-regexp": "^5.0.0",
+        "estree-walker": "^3.0.3",
+        "externality": "^1.0.2",
+        "get-port-please": "^3.1.2",
+        "h3": "^1.12.0",
+        "knitwork": "^1.1.0",
+        "magic-string": "^0.30.11",
+        "mlly": "^1.7.1",
+        "ohash": "^1.1.3",
+        "pathe": "^1.1.2",
+        "perfect-debounce": "^1.0.0",
+        "pkg-types": "^1.1.3",
+        "postcss": "^8.4.41",
+        "rollup-plugin-visualizer": "^5.12.0",
+        "std-env": "^3.7.0",
+        "strip-literal": "^2.1.0",
+        "ufo": "^1.5.4",
+        "unenv": "^1.10.0",
+        "unplugin": "^1.12.2",
+        "vite": "^5.4.2",
+        "vite-node": "^2.0.5",
+        "vite-plugin-checker": "^0.7.2",
+        "vue-bundle-renderer": "^2.1.0"
       },
       "engines": {
-        "node": ">= 14.16"
+        "node": "^14.18.0 || >=16.10.0"
       },
       "peerDependencies": {
-        "petite-vue-i18n": "*",
-        "vue-i18n": "*",
-        "vue-i18n-bridge": "*"
-      },
-      "peerDependenciesMeta": {
-        "petite-vue-i18n": {
-          "optional": true
-        },
-        "vue-i18n": {
-          "optional": true
-        },
-        "vue-i18n-bridge": {
-          "optional": true
-        }
+        "vue": "^3.3.4"
       }
     },
-    "node_modules/@intlify/utils": {
-      "version": "0.12.0",
-      "resolved": "https://registry.npmjs.org/@intlify/utils/-/utils-0.12.0.tgz",
-      "integrity": "sha512-yCBNcuZQ49iInqmWC2xfW0rgEQyNtCM8C8KcWKTXxyscgUE1+48gjLgZZqP75MjhlApxwph7ZMWLqyABkSgxQA==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/aix-ppc64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz",
+      "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==",
+      "cpu": [
+        "ppc64"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "aix"
+      ],
       "engines": {
-        "node": ">= 18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/kazupon"
+        "node": ">=18"
       }
     },
-    "node_modules/@ioredis/commands": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz",
-      "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@isaacs/cliui": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
-      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/android-arm": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz",
+      "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==",
+      "cpu": [
+        "arm"
+      ],
       "dev": true,
-      "license": "ISC",
-      "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"
-      },
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
       }
     },
-    "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/android-arm64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz",
+      "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+        "node": ">=18"
       }
     },
-    "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
-      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/android-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz",
+      "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^6.0.1"
-      },
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+        "node": ">=18"
       }
     },
-    "node_modules/@istanbuljs/schema": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
-      "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/darwin-arm64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz",
+      "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": ">=8"
+        "node": ">=18"
       }
     },
-    "node_modules/@jamescoyle/vue-icon": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/@jamescoyle/vue-icon/-/vue-icon-0.1.2.tgz",
-      "integrity": "sha512-KFrImXx5TKIi6iQXlnyLEBl4rNosNKbTeRnr70ucTdUaciVmd9qK9d/pZAaKt1Ob/8xNnX2GMp8LisyHdKtEgw==",
-      "license": "MIT"
-    },
-    "node_modules/@jest/schemas": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
-      "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/darwin-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz",
+      "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
       "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@sinclair/typebox": "^0.27.8"
-      },
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@jest/types": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
-      "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz",
+      "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
       "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@jest/schemas": "^29.6.3",
-        "@types/istanbul-lib-coverage": "^2.0.0",
-        "@types/istanbul-reports": "^3.0.0",
-        "@types/node": "*",
-        "@types/yargs": "^17.0.8",
-        "chalk": "^4.0.0"
-      },
+      "os": [
+        "freebsd"
+      ],
       "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@jridgewell/gen-mapping": {
-      "version": "0.3.5",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
-      "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/freebsd-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz",
+      "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@jridgewell/set-array": "^1.2.1",
-        "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.24"
-      },
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
       "engines": {
-        "node": ">=6.0.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@jridgewell/resolve-uri": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
-      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/linux-arm": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz",
+      "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==",
+      "cpu": [
+        "arm"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=6.0.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@jridgewell/set-array": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
-      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/linux-arm64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz",
+      "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=6.0.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@jridgewell/source-map": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
-      "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/linux-ia32": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz",
+      "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==",
+      "cpu": [
+        "ia32"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@jridgewell/gen-mapping": "^0.3.5",
-        "@jridgewell/trace-mapping": "^0.3.25"
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
-      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
-      "license": "MIT"
-    },
-    "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.25",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
-      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/linux-loong64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz",
+      "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==",
+      "cpu": [
+        "loong64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@jridgewell/resolve-uri": "^3.1.0",
-        "@jridgewell/sourcemap-codec": "^1.4.14"
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@jsdevtools/ono": {
-      "version": "7.1.3",
-      "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
-      "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@koa/router": {
-      "version": "12.0.1",
-      "resolved": "https://registry.npmjs.org/@koa/router/-/router-12.0.1.tgz",
-      "integrity": "sha512-ribfPYfHb+Uw3b27Eiw6NPqjhIhTpVFzEWLwyc/1Xp+DCdwRRyIlAUODX+9bPARF6aQtUu1+/PHzdNvRzcs/+Q==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/linux-mips64el": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz",
+      "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==",
+      "cpu": [
+        "mips64el"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "debug": "^4.3.4",
-        "http-errors": "^2.0.0",
-        "koa-compose": "^4.1.0",
-        "methods": "^1.1.2",
-        "path-to-regexp": "^6.2.1"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">= 12"
+        "node": ">=18"
       }
     },
-    "node_modules/@kwsites/file-exists": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
-      "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/linux-ppc64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz",
+      "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==",
+      "cpu": [
+        "ppc64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "debug": "^4.1.1"
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@kwsites/promise-deferred": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
-      "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/linux-riscv64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz",
+      "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==",
+      "cpu": [
+        "riscv64"
+      ],
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
+      }
     },
-    "node_modules/@mapbox/node-pre-gyp": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
-      "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/linux-s390x": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz",
+      "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==",
+      "cpu": [
+        "s390x"
+      ],
       "dev": true,
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "detect-libc": "^2.0.0",
-        "https-proxy-agent": "^5.0.0",
-        "make-dir": "^3.1.0",
-        "node-fetch": "^2.6.7",
-        "nopt": "^5.0.0",
-        "npmlog": "^5.0.1",
-        "rimraf": "^3.0.2",
-        "semver": "^7.3.5",
-        "tar": "^6.1.11"
-      },
-      "bin": {
-        "node-pre-gyp": "bin/node-pre-gyp"
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/abbrev": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/agent-base": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
-      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/linux-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz",
+      "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "debug": "4"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">= 6.0.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/https-proxy-agent": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
-      "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/netbsd-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz",
+      "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "agent-base": "6",
-        "debug": "4"
-      },
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
       "engines": {
-        "node": ">= 6"
+        "node": ">=18"
       }
     },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
-      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/openbsd-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz",
+      "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "semver": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
-      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
-      "dev": true,
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
-    "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
-      "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "abbrev": "1"
-      },
-      "bin": {
-        "nopt": "bin/nopt.js"
-      },
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
       "engines": {
-        "node": ">=6"
+        "node": ">=18"
       }
     },
-    "node_modules/@mdi/js": {
-      "version": "7.4.47",
-      "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.4.47.tgz",
-      "integrity": "sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==",
-      "license": "Apache-2.0"
-    },
-    "node_modules/@miyaneee/rollup-plugin-json5": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@miyaneee/rollup-plugin-json5/-/rollup-plugin-json5-1.2.0.tgz",
-      "integrity": "sha512-JjTIaXZp9WzhUHpElrqPnl1AzBi/rvRs065F71+aTmlqvTMVkdbjZ8vfFl4nRlgJy+TPBw69ZK4pwFdmOAt4aA==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/sunos-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz",
+      "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@rollup/pluginutils": "^5.1.0",
-        "json5": "^2.2.3"
-      },
-      "peerDependencies": {
-        "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0"
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/@netlify/functions": {
-      "version": "2.8.1",
-      "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-2.8.1.tgz",
-      "integrity": "sha512-+6wtYdoz0yE06dSa9XkP47tw5zm6g13QMeCwM3MmHx1vn8hzwFa51JtmfraprdkL7amvb7gaNM+OOhQU1h6T8A==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/win32-arm64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz",
+      "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@netlify/serverless-functions-api": "1.19.1"
-      },
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": ">=14.0.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@netlify/node-cookies": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/@netlify/node-cookies/-/node-cookies-0.1.0.tgz",
-      "integrity": "sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/win32-ia32": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz",
+      "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==",
+      "cpu": [
+        "ia32"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": "^14.16.0 || >=16.0.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@netlify/serverless-functions-api": {
-      "version": "1.19.1",
-      "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.19.1.tgz",
-      "integrity": "sha512-2KYkyluThg1AKfd0JWI7FzpS4A/fzVVGYIf6AM4ydWyNj8eI/86GQVLeRgDoH7CNOxt243R5tutWlmHpVq0/Ew==",
+    "node_modules/@nuxt/vite-builder/node_modules/@esbuild/win32-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz",
+      "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@netlify/node-cookies": "^0.1.0",
-        "urlpattern-polyfill": "8.0.2"
-      },
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": ">=18.0.0"
+        "node": ">=18"
       }
     },
-    "node_modules/@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+    "node_modules/@nuxt/vite-builder/node_modules/esbuild": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz",
+      "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==",
       "dev": true,
+      "hasInstallScript": true,
       "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
+      "bin": {
+        "esbuild": "bin/esbuild"
       },
       "engines": {
-        "node": ">= 8"
+        "node": ">=18"
+      },
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.23.1",
+        "@esbuild/android-arm": "0.23.1",
+        "@esbuild/android-arm64": "0.23.1",
+        "@esbuild/android-x64": "0.23.1",
+        "@esbuild/darwin-arm64": "0.23.1",
+        "@esbuild/darwin-x64": "0.23.1",
+        "@esbuild/freebsd-arm64": "0.23.1",
+        "@esbuild/freebsd-x64": "0.23.1",
+        "@esbuild/linux-arm": "0.23.1",
+        "@esbuild/linux-arm64": "0.23.1",
+        "@esbuild/linux-ia32": "0.23.1",
+        "@esbuild/linux-loong64": "0.23.1",
+        "@esbuild/linux-mips64el": "0.23.1",
+        "@esbuild/linux-ppc64": "0.23.1",
+        "@esbuild/linux-riscv64": "0.23.1",
+        "@esbuild/linux-s390x": "0.23.1",
+        "@esbuild/linux-x64": "0.23.1",
+        "@esbuild/netbsd-x64": "0.23.1",
+        "@esbuild/openbsd-arm64": "0.23.1",
+        "@esbuild/openbsd-x64": "0.23.1",
+        "@esbuild/sunos-x64": "0.23.1",
+        "@esbuild/win32-arm64": "0.23.1",
+        "@esbuild/win32-ia32": "0.23.1",
+        "@esbuild/win32-x64": "0.23.1"
       }
     },
-    "node_modules/@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+    "node_modules/@nuxt/vite-builder/node_modules/escape-string-regexp": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">= 8"
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+    "node_modules/@nuxtjs/i18n": {
+      "version": "8.5.1",
+      "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.5.1.tgz",
+      "integrity": "sha512-rU+cGwX1lr5Jyd8lS1ulyTf0adGk6Q+G308Ig0SCrOTV07rHClkoUMpqAAo1Lc85C3Bgea2bFmseLYSfnVMm1A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
+        "@intlify/h3": "^0.5.0",
+        "@intlify/shared": "^9.9.0",
+        "@intlify/unplugin-vue-i18n": "^3.0.1",
+        "@intlify/utils": "^0.12.0",
+        "@miyaneee/rollup-plugin-json5": "^1.2.0",
+        "@nuxt/kit": "^3.12.4",
+        "@rollup/plugin-yaml": "^4.1.2",
+        "@vue/compiler-sfc": "^3.4.37",
+        "debug": "^4.3.5",
+        "defu": "^6.1.2",
+        "estree-walker": "^3.0.3",
+        "is-https": "^4.0.0",
+        "knitwork": "^1.1.0",
+        "magic-string": "^0.30.10",
+        "mlly": "^1.7.1",
+        "pathe": "^1.1.1",
+        "scule": "^1.1.1",
+        "sucrase": "^3.35.0",
+        "ufo": "^1.3.1",
+        "unplugin": "^1.10.1",
+        "vue-i18n": "^9.9.0",
+        "vue-router": "^4.4.0"
       },
       "engines": {
-        "node": ">= 8"
+        "node": "^14.16.0 || >=16.11.0"
       }
     },
-    "node_modules/@nuxt/devalue": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/@nuxt/devalue/-/devalue-2.0.2.tgz",
-      "integrity": "sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@nuxt/devtools": {
-      "version": "1.3.14",
-      "resolved": "https://registry.npmjs.org/@nuxt/devtools/-/devtools-1.3.14.tgz",
-      "integrity": "sha512-ebeVWBisXbhJ7begAZTgSDF8cPbExHv4RPDb9fWTMI1YoVVxX+elqUPw0K6T5Yi4atdGhyxRtGMqjikl7QKp9w==",
+    "node_modules/@nuxtjs/tailwindcss": {
+      "version": "6.12.1",
+      "resolved": "https://registry.npmjs.org/@nuxtjs/tailwindcss/-/tailwindcss-6.12.1.tgz",
+      "integrity": "sha512-UKmaPRVpxlFqLorhL6neEba2tySlsj6w6yDb7jzS6A0AAjyBQ6k3BQqWO+AaTy2iQLX7eR+1yj3/w43HzY8RtA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@antfu/utils": "^0.7.10",
-        "@nuxt/devtools-kit": "1.3.14",
-        "@nuxt/devtools-wizard": "1.3.14",
-        "@nuxt/kit": "^3.12.4",
-        "@vue/devtools-core": "7.3.3",
-        "@vue/devtools-kit": "7.3.3",
-        "birpc": "^0.2.17",
+        "@nuxt/kit": "^3.12.3",
+        "autoprefixer": "^10.4.19",
         "consola": "^3.2.3",
-        "cronstrue": "^2.50.0",
-        "destr": "^2.0.3",
-        "error-stack-parser-es": "^0.1.5",
-        "execa": "^7.2.0",
-        "fast-glob": "^3.3.2",
-        "fast-npm-meta": "^0.2.2",
-        "flatted": "^3.3.1",
-        "get-port-please": "^3.1.2",
-        "hookable": "^5.5.3",
-        "image-meta": "^0.2.1",
-        "is-installed-globally": "^1.0.0",
-        "launch-editor": "^2.8.1",
-        "local-pkg": "^0.5.0",
-        "magicast": "^0.3.4",
-        "nypm": "^0.3.9",
-        "ohash": "^1.1.3",
+        "defu": "^6.1.4",
+        "h3": "^1.12.0",
         "pathe": "^1.1.2",
-        "perfect-debounce": "^1.0.0",
-        "pkg-types": "^1.1.3",
-        "rc9": "^2.1.2",
-        "scule": "^1.3.0",
-        "semver": "^7.6.3",
-        "simple-git": "^3.25.0",
-        "sirv": "^2.0.4",
-        "unimport": "^3.10.1",
-        "vite-plugin-inspect": "^0.8.6",
-        "vite-plugin-vue-inspector": "^5.1.3",
-        "which": "^3.0.1",
-        "ws": "^8.18.0"
-      },
-      "bin": {
-        "devtools": "cli.mjs"
-      },
-      "peerDependencies": {
-        "vite": "*"
+        "postcss": "^8.4.38",
+        "postcss-nesting": "^12.1.5",
+        "tailwind-config-viewer": "^2.0.4",
+        "tailwindcss": "~3.4.4",
+        "ufo": "^1.5.3",
+        "unctx": "^2.3.1"
       }
     },
-    "node_modules/@nuxt/devtools-kit": {
-      "version": "1.3.14",
-      "resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.3.14.tgz",
-      "integrity": "sha512-mLPuCf5nFYLm/1JD0twt8qfFGwoVhTRA4Zx9CPiyWCQNf7XJXb3TfhCm89vHpcPP+9T6ulZxRJp+JZETjXY8+A==",
+    "node_modules/@one-ini/wasm": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz",
+      "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nuxt/kit": "^3.12.4",
-        "@nuxt/schema": "^3.12.4",
-        "execa": "^7.2.0"
-      },
-      "peerDependencies": {
-        "vite": "*"
-      }
+      "license": "MIT"
     },
-    "node_modules/@nuxt/devtools-wizard": {
-      "version": "1.3.14",
-      "resolved": "https://registry.npmjs.org/@nuxt/devtools-wizard/-/devtools-wizard-1.3.14.tgz",
-      "integrity": "sha512-5kLB53/7YUME6Y8byrOxRhl0hXWm05jPStJd1CJHKDcGrp+hjxYZaSgEwYtEIQ0A1GF04rfL4bJ+qIL+7e0+9Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "consola": "^3.2.3",
-        "diff": "^5.2.0",
-        "execa": "^7.2.0",
-        "global-directory": "^4.0.1",
-        "magicast": "^0.3.4",
-        "pathe": "^1.1.2",
-        "pkg-types": "^1.1.3",
-        "prompts": "^2.4.2",
-        "rc9": "^2.1.2",
-        "semver": "^7.6.3"
-      },
-      "bin": {
-        "devtools-wizard": "cli.mjs"
+    "node_modules/@opentelemetry/api": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
+      "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==",
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=8.0.0"
       }
     },
-    "node_modules/@nuxt/devtools/node_modules/which": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz",
-      "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==",
-      "dev": true,
-      "license": "ISC",
+    "node_modules/@opentelemetry/api-logs": {
+      "version": "0.52.1",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz",
+      "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/which.js"
+        "@opentelemetry/api": "^1.0.0"
       },
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": ">=14"
       }
     },
-    "node_modules/@nuxt/eslint": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint/-/eslint-0.5.3.tgz",
-      "integrity": "sha512-v5qhTou69hHEC0UmxJAPBS9h6fXVpyzCYIicEx6CyTbgYB6Vf1XJ5nSMVjWrgDu5LmUJ9tAEYvVRRmVQ3gxMIg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint/config-inspector": "^0.5.4",
-        "@nuxt/devtools-kit": "^1.4.1",
-        "@nuxt/eslint-config": "0.5.3",
-        "@nuxt/eslint-plugin": "0.5.3",
-        "@nuxt/kit": "^3.13.0",
-        "chokidar": "^3.6.0",
-        "eslint-flat-config-utils": "^0.3.1",
-        "eslint-typegen": "^0.3.1",
-        "find-up": "^7.0.0",
-        "get-port-please": "^3.1.2",
-        "mlly": "^1.7.1",
-        "pathe": "^1.1.2",
-        "unimport": "^3.11.1"
+    "node_modules/@opentelemetry/context-async-hooks": {
+      "version": "1.26.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.26.0.tgz",
+      "integrity": "sha512-HedpXXYzzbaoutw6DFLWLDket2FwLkLpil4hGCZ1xYEIMTcivdfwEOISgdbLEWyG3HW52gTq2V9mOVJrONgiwg==",
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=14"
       },
       "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0",
-        "eslint-webpack-plugin": "^4.1.0",
-        "vite-plugin-eslint2": "^4.4.0"
-      },
-      "peerDependenciesMeta": {
-        "eslint-webpack-plugin": {
-          "optional": true
-        },
-        "vite-plugin-eslint2": {
-          "optional": true
-        }
+        "@opentelemetry/api": ">=1.0.0 <1.10.0"
       }
     },
-    "node_modules/@nuxt/eslint-config": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.3.tgz",
-      "integrity": "sha512-V/z6pvNLiUwh4Y2goaqIDA91rmglWujYyUTfm6e0uKillJPKyUXjPwlQyxtvfEtUyyaR/RnUswjzluL6xcZt2g==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@opentelemetry/core": {
+      "version": "1.26.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.26.0.tgz",
+      "integrity": "sha512-1iKxXXE8415Cdv0yjG3G6hQnB5eVEsJce3QaawX8SjDn0mAS0ZM8fAbZZJD4ajvhC15cePvosSCut404KrIIvQ==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@eslint/js": "^9.9.1",
-        "@nuxt/eslint-plugin": "0.5.3",
-        "@rushstack/eslint-patch": "^1.10.4",
-        "@stylistic/eslint-plugin": "^2.6.4",
-        "@typescript-eslint/eslint-plugin": "^8.3.0",
-        "@typescript-eslint/parser": "^8.3.0",
-        "eslint-config-flat-gitignore": "^0.1.8",
-        "eslint-flat-config-utils": "^0.3.1",
-        "eslint-plugin-import-x": "^4.0.0",
-        "eslint-plugin-jsdoc": "^50.2.2",
-        "eslint-plugin-regexp": "^2.6.0",
-        "eslint-plugin-unicorn": "^55.0.0",
-        "eslint-plugin-vue": "^9.27.0",
-        "globals": "^15.9.0",
-        "local-pkg": "^0.5.0",
-        "pathe": "^1.1.2",
-        "tslib": "^2.7.0",
-        "vue-eslint-parser": "^9.4.3"
+        "@opentelemetry/semantic-conventions": "1.27.0"
       },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
-      }
-    },
-    "node_modules/@nuxt/eslint-plugin": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.3.tgz",
-      "integrity": "sha512-Qcm33Jv+BIQNreSyG0Rold64iL0VBTaL6s+dh2/88UwKknnb5GWnkP19Op7+w1xkl74okky6LIPkHPSJq3Ue7A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "^8.3.0",
-        "@typescript-eslint/utils": "^8.3.0"
+      "engines": {
+        "node": ">=14"
       },
       "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
+        "@opentelemetry/api": ">=1.0.0 <1.10.0"
       }
     },
-    "node_modules/@nuxt/eslint/node_modules/@nuxt/devtools-kit": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/@nuxt/devtools-kit/-/devtools-kit-1.4.1.tgz",
-      "integrity": "sha512-6h7T9B0tSZVap13/hf7prEAgIzraj/kyux6/Iif455Trew96jHIFCCboBApUMastYEuCo3l17tgZKe0HW+jrtA==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@opentelemetry/instrumentation": {
+      "version": "0.52.1",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz",
+      "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@nuxt/kit": "^3.13.0",
-        "@nuxt/schema": "^3.13.0",
-        "execa": "^7.2.0"
+        "@opentelemetry/api-logs": "0.52.1",
+        "@types/shimmer": "^1.0.2",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
+      },
+      "engines": {
+        "node": ">=14"
       },
       "peerDependencies": {
-        "vite": "*"
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@nuxt/eslint/node_modules/find-up": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz",
-      "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@opentelemetry/instrumentation-connect": {
+      "version": "0.38.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.38.0.tgz",
+      "integrity": "sha512-2/nRnx3pjYEmdPIaBwtgtSviTKHWnDZN3R+TkRUnhIVrvBKVcq+I5B2rtd6mr6Fe9cHlZ9Ojcuh7pkNh/xdWWg==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "locate-path": "^7.2.0",
-        "path-exists": "^5.0.0",
-        "unicorn-magic": "^0.1.0"
+        "@opentelemetry/core": "^1.8.0",
+        "@opentelemetry/instrumentation": "^0.52.0",
+        "@opentelemetry/semantic-conventions": "^1.22.0",
+        "@types/connect": "3.4.36"
       },
       "engines": {
-        "node": ">=18"
+        "node": ">=14"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@nuxt/eslint/node_modules/locate-path": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
-      "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@opentelemetry/instrumentation-express": {
+      "version": "0.41.1",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.41.1.tgz",
+      "integrity": "sha512-uRx0V3LPGzjn2bxAnV8eUsDT82vT7NTwI0ezEuPMBOTOsnPpGhWdhcdNdhH80sM4TrWrOfXm9HGEdfWE3TRIww==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "p-locate": "^6.0.0"
+        "@opentelemetry/core": "^1.8.0",
+        "@opentelemetry/instrumentation": "^0.52.0",
+        "@opentelemetry/semantic-conventions": "^1.22.0"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=14"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@nuxt/eslint/node_modules/p-limit": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
-      "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@opentelemetry/instrumentation-fastify": {
+      "version": "0.38.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.38.0.tgz",
+      "integrity": "sha512-HBVLpTSYpkQZ87/Df3N0gAw7VzYZV3n28THIBrJWfuqw3Or7UqdhnjeuMIPQ04BKk3aZc0cWn2naSQObbh5vXw==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "yocto-queue": "^1.0.0"
+        "@opentelemetry/core": "^1.8.0",
+        "@opentelemetry/instrumentation": "^0.52.0",
+        "@opentelemetry/semantic-conventions": "^1.22.0"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=14"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@nuxt/eslint/node_modules/p-locate": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
-      "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@opentelemetry/instrumentation-fs": {
+      "version": "0.14.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.14.0.tgz",
+      "integrity": "sha512-pVc8P5AgliC1DphyyBUgsxXlm2XaPH4BpYvt7rAZDMIqUpRk8gs19SioABtKqqxvFzg5jPtgJfJsdxq0Y+maLw==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "p-limit": "^4.0.0"
+        "@opentelemetry/core": "^1.8.0",
+        "@opentelemetry/instrumentation": "^0.52.0"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=14"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@nuxt/eslint/node_modules/path-exists": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
-      "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@opentelemetry/instrumentation-graphql": {
+      "version": "0.42.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.42.0.tgz",
+      "integrity": "sha512-N8SOwoKL9KQSX7z3gOaw5UaTeVQcfDO1c21csVHnmnmGUoqsXbArK2B8VuwPWcv6/BC/i3io+xTo7QGRZ/z28Q==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/instrumentation": "^0.52.0"
+      },
       "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@nuxt/eslint/node_modules/yocto-queue": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
-      "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@opentelemetry/instrumentation-hapi": {
+      "version": "0.40.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.40.0.tgz",
+      "integrity": "sha512-8U/w7Ifumtd2bSN1OLaSwAAFhb9FyqWUki3lMMB0ds+1+HdSxYBe9aspEJEgvxAqOkrQnVniAPTEGf1pGM7SOw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/core": "^1.8.0",
+        "@opentelemetry/instrumentation": "^0.52.0",
+        "@opentelemetry/semantic-conventions": "^1.22.0"
+      },
       "engines": {
-        "node": ">=12.20"
+        "node": ">=14"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@nuxt/kit": {
-      "version": "3.13.0",
-      "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.0.tgz",
-      "integrity": "sha512-gbhSbDvYfkGQ0R2ztqTLQLHRMv+7g50kAKKuN6mbF4tL9jg7NPnQ8bAarn2I4Qx8xtmwO+qY1ABkmYMn5S1CpA==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@opentelemetry/instrumentation-http": {
+      "version": "0.52.1",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.52.1.tgz",
+      "integrity": "sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@nuxt/schema": "3.13.0",
-        "c12": "^1.11.1",
-        "consola": "^3.2.3",
-        "defu": "^6.1.4",
-        "destr": "^2.0.3",
-        "globby": "^14.0.2",
-        "hash-sum": "^2.0.0",
-        "ignore": "^5.3.2",
-        "jiti": "^1.21.6",
-        "klona": "^2.0.6",
-        "knitwork": "^1.1.0",
-        "mlly": "^1.7.1",
-        "pathe": "^1.1.2",
-        "pkg-types": "^1.1.3",
-        "scule": "^1.3.0",
-        "semver": "^7.6.3",
-        "ufo": "^1.5.4",
-        "unctx": "^2.3.1",
-        "unimport": "^3.11.0",
-        "untyped": "^1.4.2"
+        "@opentelemetry/core": "1.25.1",
+        "@opentelemetry/instrumentation": "0.52.1",
+        "@opentelemetry/semantic-conventions": "1.25.1",
+        "semver": "^7.5.2"
       },
       "engines": {
-        "node": "^14.18.0 || >=16.10.0"
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@nuxt/schema": {
-      "version": "3.13.0",
-      "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.0.tgz",
-      "integrity": "sha512-JBGSjF9Hd8guvTV2312eM1RulCMJc50yR3CeMZPLDsI02A8TXQnABS8EbgvGRvxD43q/ITjj21B2ffG1wEVrnQ==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/core": {
+      "version": "1.25.1",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz",
+      "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "compatx": "^0.1.8",
-        "consola": "^3.2.3",
-        "defu": "^6.1.4",
-        "hookable": "^5.5.3",
-        "pathe": "^1.1.2",
-        "pkg-types": "^1.1.3",
-        "scule": "^1.3.0",
-        "std-env": "^3.7.0",
-        "ufo": "^1.5.4",
-        "uncrypto": "^0.1.3",
-        "unimport": "^3.11.0",
-        "untyped": "^1.4.2"
+        "@opentelemetry/semantic-conventions": "1.25.1"
       },
       "engines": {
-        "node": "^14.18.0 || >=16.10.0"
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": ">=1.0.0 <1.10.0"
       }
     },
-    "node_modules/@nuxt/telemetry": {
-      "version": "2.5.4",
-      "resolved": "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-2.5.4.tgz",
-      "integrity": "sha512-KH6wxzsNys69daSO0xUv0LEBAfhwwjK1M+0Cdi1/vxmifCslMIY7lN11B4eywSfscbyVPAYJvANyc7XiVPImBQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nuxt/kit": "^3.11.2",
-        "ci-info": "^4.0.0",
-        "consola": "^3.2.3",
-        "create-require": "^1.1.1",
-        "defu": "^6.1.4",
-        "destr": "^2.0.3",
-        "dotenv": "^16.4.5",
-        "git-url-parse": "^14.0.0",
-        "is-docker": "^3.0.0",
-        "jiti": "^1.21.0",
-        "mri": "^1.2.0",
-        "nanoid": "^5.0.7",
-        "ofetch": "^1.3.4",
-        "parse-git-config": "^3.0.0",
-        "pathe": "^1.1.2",
-        "rc9": "^2.1.2",
-        "std-env": "^3.7.0"
-      },
-      "bin": {
-        "nuxt-telemetry": "bin/nuxt-telemetry.mjs"
+    "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/semantic-conventions": {
+      "version": "1.25.1",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz",
+      "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==",
+      "license": "Apache-2.0",
+      "engines": {
+        "node": ">=14"
       }
     },
-    "node_modules/@nuxt/vite-builder": {
-      "version": "3.13.0",
-      "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.13.0.tgz",
-      "integrity": "sha512-FVIpT5wTxGcU3JDFxIyvT6isSZUujVKavQyPo3kgOQKWURDcBcvVY4HdJIVMsSIcaXafH13RZc5RKLlxfIGFdQ==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@opentelemetry/instrumentation-ioredis": {
+      "version": "0.42.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.42.0.tgz",
+      "integrity": "sha512-P11H168EKvBB9TUSasNDOGJCSkpT44XgoM6d3gRIWAa9ghLpYhl0uRkS8//MqPzcJVHr3h3RmfXIpiYLjyIZTw==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@nuxt/kit": "3.13.0",
-        "@rollup/plugin-replace": "^5.0.7",
-        "@vitejs/plugin-vue": "^5.1.2",
-        "@vitejs/plugin-vue-jsx": "^4.0.1",
-        "autoprefixer": "^10.4.20",
-        "clear": "^0.1.0",
-        "consola": "^3.2.3",
-        "cssnano": "^7.0.5",
-        "defu": "^6.1.4",
-        "esbuild": "^0.23.1",
-        "escape-string-regexp": "^5.0.0",
-        "estree-walker": "^3.0.3",
-        "externality": "^1.0.2",
-        "get-port-please": "^3.1.2",
-        "h3": "^1.12.0",
-        "knitwork": "^1.1.0",
-        "magic-string": "^0.30.11",
-        "mlly": "^1.7.1",
-        "ohash": "^1.1.3",
-        "pathe": "^1.1.2",
-        "perfect-debounce": "^1.0.0",
-        "pkg-types": "^1.1.3",
-        "postcss": "^8.4.41",
-        "rollup-plugin-visualizer": "^5.12.0",
-        "std-env": "^3.7.0",
-        "strip-literal": "^2.1.0",
-        "ufo": "^1.5.4",
-        "unenv": "^1.10.0",
-        "unplugin": "^1.12.2",
-        "vite": "^5.4.2",
-        "vite-node": "^2.0.5",
-        "vite-plugin-checker": "^0.7.2",
-        "vue-bundle-renderer": "^2.1.0"
+        "@opentelemetry/instrumentation": "^0.52.0",
+        "@opentelemetry/redis-common": "^0.36.2",
+        "@opentelemetry/semantic-conventions": "^1.23.0"
       },
       "engines": {
-        "node": "^14.18.0 || >=16.10.0"
+        "node": ">=14"
       },
       "peerDependencies": {
-        "vue": "^3.3.4"
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@nuxt/vite-builder/node_modules/escape-string-regexp": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
-      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@opentelemetry/instrumentation-koa": {
+      "version": "0.42.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.42.0.tgz",
+      "integrity": "sha512-H1BEmnMhho8o8HuNRq5zEI4+SIHDIglNB7BPKohZyWG4fWNuR7yM4GTlR01Syq21vODAS7z5omblScJD/eZdKw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/core": "^1.8.0",
+        "@opentelemetry/instrumentation": "^0.52.0",
+        "@opentelemetry/semantic-conventions": "^1.22.0"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=14"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@nuxtjs/i18n": {
-      "version": "8.5.1",
-      "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.5.1.tgz",
-      "integrity": "sha512-rU+cGwX1lr5Jyd8lS1ulyTf0adGk6Q+G308Ig0SCrOTV07rHClkoUMpqAAo1Lc85C3Bgea2bFmseLYSfnVMm1A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@intlify/h3": "^0.5.0",
-        "@intlify/shared": "^9.9.0",
-        "@intlify/unplugin-vue-i18n": "^3.0.1",
-        "@intlify/utils": "^0.12.0",
-        "@miyaneee/rollup-plugin-json5": "^1.2.0",
-        "@nuxt/kit": "^3.12.4",
-        "@rollup/plugin-yaml": "^4.1.2",
-        "@vue/compiler-sfc": "^3.4.37",
-        "debug": "^4.3.5",
-        "defu": "^6.1.2",
-        "estree-walker": "^3.0.3",
-        "is-https": "^4.0.0",
-        "knitwork": "^1.1.0",
-        "magic-string": "^0.30.10",
-        "mlly": "^1.7.1",
-        "pathe": "^1.1.1",
-        "scule": "^1.1.1",
-        "sucrase": "^3.35.0",
-        "ufo": "^1.3.1",
-        "unplugin": "^1.10.1",
-        "vue-i18n": "^9.9.0",
-        "vue-router": "^4.4.0"
-      },
-      "engines": {
-        "node": "^14.16.0 || >=16.11.0"
-      }
-    },
-    "node_modules/@nuxtjs/tailwindcss": {
-      "version": "6.12.1",
-      "resolved": "https://registry.npmjs.org/@nuxtjs/tailwindcss/-/tailwindcss-6.12.1.tgz",
-      "integrity": "sha512-UKmaPRVpxlFqLorhL6neEba2tySlsj6w6yDb7jzS6A0AAjyBQ6k3BQqWO+AaTy2iQLX7eR+1yj3/w43HzY8RtA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nuxt/kit": "^3.12.3",
-        "autoprefixer": "^10.4.19",
-        "consola": "^3.2.3",
-        "defu": "^6.1.4",
-        "h3": "^1.12.0",
-        "pathe": "^1.1.2",
-        "postcss": "^8.4.38",
-        "postcss-nesting": "^12.1.5",
-        "tailwind-config-viewer": "^2.0.4",
-        "tailwindcss": "~3.4.4",
-        "ufo": "^1.5.3",
-        "unctx": "^2.3.1"
-      }
-    },
-    "node_modules/@one-ini/wasm": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz",
-      "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@opentelemetry/api": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz",
-      "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==",
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/@opentelemetry/api-logs": {
-      "version": "0.52.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz",
-      "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==",
+    "node_modules/@opentelemetry/instrumentation-mongodb": {
+      "version": "0.46.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.46.0.tgz",
+      "integrity": "sha512-VF/MicZ5UOBiXrqBslzwxhN7TVqzu1/LN/QDpkskqM0Zm0aZ4CVRbUygL8d7lrjLn15x5kGIe8VsSphMfPJzlA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
+        "@opentelemetry/instrumentation": "^0.52.0",
+        "@opentelemetry/sdk-metrics": "^1.9.1",
+        "@opentelemetry/semantic-conventions": "^1.22.0"
       },
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/context-async-hooks": {
-      "version": "1.25.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz",
-      "integrity": "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==",
-      "license": "Apache-2.0",
       "engines": {
         "node": ">=14"
       },
       "peerDependencies": {
-        "@opentelemetry/api": ">=1.0.0 <1.10.0"
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/core": {
-      "version": "1.25.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz",
-      "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==",
+    "node_modules/@opentelemetry/instrumentation-mongoose": {
+      "version": "0.40.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.40.0.tgz",
+      "integrity": "sha512-niRi5ZUnkgzRhIGMOozTyoZIvJKNJyhijQI4nF4iFSb+FUx2v5fngfR+8XLmdQAO7xmsD8E5vEGdDVYVtKbZew==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/semantic-conventions": "1.25.1"
+        "@opentelemetry/core": "^1.8.0",
+        "@opentelemetry/instrumentation": "^0.52.0",
+        "@opentelemetry/semantic-conventions": "^1.22.0"
       },
       "engines": {
         "node": ">=14"
       },
       "peerDependencies": {
-        "@opentelemetry/api": ">=1.0.0 <1.10.0"
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation": {
-      "version": "0.52.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz",
-      "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==",
+    "node_modules/@opentelemetry/instrumentation-mysql": {
+      "version": "0.40.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.40.0.tgz",
+      "integrity": "sha512-d7ja8yizsOCNMYIJt5PH/fKZXjb/mS48zLROO4BzZTtDfhNCl2UM/9VIomP2qkGIFVouSJrGr/T00EzY7bPtKA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/api-logs": "0.52.1",
-        "@types/shimmer": "^1.0.2",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
+        "@opentelemetry/instrumentation": "^0.52.0",
+        "@opentelemetry/semantic-conventions": "^1.22.0",
+        "@types/mysql": "2.15.22"
       },
       "engines": {
         "node": ">=14"
@@ -3150,16 +3072,15 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-connect": {
-      "version": "0.38.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.38.0.tgz",
-      "integrity": "sha512-2/nRnx3pjYEmdPIaBwtgtSviTKHWnDZN3R+TkRUnhIVrvBKVcq+I5B2rtd6mr6Fe9cHlZ9Ojcuh7pkNh/xdWWg==",
+    "node_modules/@opentelemetry/instrumentation-mysql2": {
+      "version": "0.40.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.40.0.tgz",
+      "integrity": "sha512-0xfS1xcqUmY7WE1uWjlmI67Xg3QsSUlNT+AcXHeA4BDUPwZtWqF4ezIwLgpVZfHOnkAEheqGfNSWd1PIu3Wnfg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/core": "^1.8.0",
         "@opentelemetry/instrumentation": "^0.52.0",
         "@opentelemetry/semantic-conventions": "^1.22.0",
-        "@types/connect": "3.4.36"
+        "@opentelemetry/sql-common": "^0.40.1"
       },
       "engines": {
         "node": ">=14"
@@ -3168,15 +3089,14 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-express": {
-      "version": "0.41.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.41.1.tgz",
-      "integrity": "sha512-uRx0V3LPGzjn2bxAnV8eUsDT82vT7NTwI0ezEuPMBOTOsnPpGhWdhcdNdhH80sM4TrWrOfXm9HGEdfWE3TRIww==",
+    "node_modules/@opentelemetry/instrumentation-nestjs-core": {
+      "version": "0.39.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.39.0.tgz",
+      "integrity": "sha512-mewVhEXdikyvIZoMIUry8eb8l3HUjuQjSjVbmLVTt4NQi35tkpnHQrG9bTRBrl3403LoWZ2njMPJyg4l6HfKvA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/core": "^1.8.0",
         "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0"
+        "@opentelemetry/semantic-conventions": "^1.23.0"
       },
       "engines": {
         "node": ">=14"
@@ -3185,15 +3105,17 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-fastify": {
-      "version": "0.38.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.38.0.tgz",
-      "integrity": "sha512-HBVLpTSYpkQZ87/Df3N0gAw7VzYZV3n28THIBrJWfuqw3Or7UqdhnjeuMIPQ04BKk3aZc0cWn2naSQObbh5vXw==",
+    "node_modules/@opentelemetry/instrumentation-pg": {
+      "version": "0.43.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.43.0.tgz",
+      "integrity": "sha512-og23KLyoxdnAeFs1UWqzSonuCkePUzCX30keSYigIzJe/6WSYA8rnEI5lobcxPEzg+GcU06J7jzokuEHbjVJNw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/core": "^1.8.0",
         "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0"
+        "@opentelemetry/semantic-conventions": "^1.22.0",
+        "@opentelemetry/sql-common": "^0.40.1",
+        "@types/pg": "8.6.1",
+        "@types/pg-pool": "2.0.4"
       },
       "engines": {
         "node": ">=14"
@@ -3202,14 +3124,15 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-fs": {
-      "version": "0.14.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.14.0.tgz",
-      "integrity": "sha512-pVc8P5AgliC1DphyyBUgsxXlm2XaPH4BpYvt7rAZDMIqUpRk8gs19SioABtKqqxvFzg5jPtgJfJsdxq0Y+maLw==",
+    "node_modules/@opentelemetry/instrumentation-redis-4": {
+      "version": "0.41.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.41.0.tgz",
+      "integrity": "sha512-H7IfGTqW2reLXqput4yzAe8YpDC0fmVNal95GHMLOrS89W+qWUKIqxolSh63hJyfmwPSFwXASzj7wpSk8Az+Dg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/core": "^1.8.0",
-        "@opentelemetry/instrumentation": "^0.52.0"
+        "@opentelemetry/instrumentation": "^0.52.0",
+        "@opentelemetry/redis-common": "^0.36.2",
+        "@opentelemetry/semantic-conventions": "^1.22.0"
       },
       "engines": {
         "node": ">=14"
@@ -3218,299 +3141,94 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-graphql": {
-      "version": "0.42.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.42.0.tgz",
-      "integrity": "sha512-N8SOwoKL9KQSX7z3gOaw5UaTeVQcfDO1c21csVHnmnmGUoqsXbArK2B8VuwPWcv6/BC/i3io+xTo7QGRZ/z28Q==",
+    "node_modules/@opentelemetry/redis-common": {
+      "version": "0.36.2",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz",
+      "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==",
       "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0"
-      },
       "engines": {
         "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-hapi": {
-      "version": "0.40.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.40.0.tgz",
-      "integrity": "sha512-8U/w7Ifumtd2bSN1OLaSwAAFhb9FyqWUki3lMMB0ds+1+HdSxYBe9aspEJEgvxAqOkrQnVniAPTEGf1pGM7SOw==",
+    "node_modules/@opentelemetry/resources": {
+      "version": "1.26.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.26.0.tgz",
+      "integrity": "sha512-CPNYchBE7MBecCSVy0HKpUISEeJOniWqcHaAHpmasZ3j9o6V3AyBzhRc90jdmemq0HOxDr6ylhUbDhBqqPpeNw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/core": "^1.8.0",
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0"
+        "@opentelemetry/core": "1.26.0",
+        "@opentelemetry/semantic-conventions": "1.27.0"
       },
       "engines": {
         "node": ">=14"
       },
       "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
+        "@opentelemetry/api": ">=1.0.0 <1.10.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-http": {
-      "version": "0.52.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.52.1.tgz",
-      "integrity": "sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==",
+    "node_modules/@opentelemetry/sdk-metrics": {
+      "version": "1.26.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.26.0.tgz",
+      "integrity": "sha512-0SvDXmou/JjzSDOjUmetAAvcKQW6ZrvosU0rkbDGpXvvZN+pQF6JbK/Kd4hNdK4q/22yeruqvukXEJyySTzyTQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/core": "1.25.1",
-        "@opentelemetry/instrumentation": "0.52.1",
-        "@opentelemetry/semantic-conventions": "1.25.1",
-        "semver": "^7.5.2"
+        "@opentelemetry/core": "1.26.0",
+        "@opentelemetry/resources": "1.26.0"
       },
       "engines": {
         "node": ">=14"
       },
       "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
+        "@opentelemetry/api": ">=1.3.0 <1.10.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-ioredis": {
-      "version": "0.42.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.42.0.tgz",
-      "integrity": "sha512-P11H168EKvBB9TUSasNDOGJCSkpT44XgoM6d3gRIWAa9ghLpYhl0uRkS8//MqPzcJVHr3h3RmfXIpiYLjyIZTw==",
+    "node_modules/@opentelemetry/sdk-trace-base": {
+      "version": "1.26.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.26.0.tgz",
+      "integrity": "sha512-olWQldtvbK4v22ymrKLbIcBi9L2SpMO84sCPY54IVsJhP9fRsxJT194C/AVaAuJzLE30EdhhM1VmvVYR7az+cw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/redis-common": "^0.36.2",
-        "@opentelemetry/semantic-conventions": "^1.23.0"
+        "@opentelemetry/core": "1.26.0",
+        "@opentelemetry/resources": "1.26.0",
+        "@opentelemetry/semantic-conventions": "1.27.0"
       },
       "engines": {
         "node": ">=14"
       },
       "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
+        "@opentelemetry/api": ">=1.0.0 <1.10.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-koa": {
-      "version": "0.42.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.42.0.tgz",
-      "integrity": "sha512-H1BEmnMhho8o8HuNRq5zEI4+SIHDIglNB7BPKohZyWG4fWNuR7yM4GTlR01Syq21vODAS7z5omblScJD/eZdKw==",
+    "node_modules/@opentelemetry/semantic-conventions": {
+      "version": "1.27.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz",
+      "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==",
       "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/core": "^1.8.0",
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0"
-      },
       "engines": {
         "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-mongodb": {
-      "version": "0.46.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.46.0.tgz",
-      "integrity": "sha512-VF/MicZ5UOBiXrqBslzwxhN7TVqzu1/LN/QDpkskqM0Zm0aZ4CVRbUygL8d7lrjLn15x5kGIe8VsSphMfPJzlA==",
+    "node_modules/@opentelemetry/sql-common": {
+      "version": "0.40.1",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz",
+      "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/sdk-metrics": "^1.9.1",
-        "@opentelemetry/semantic-conventions": "^1.22.0"
+        "@opentelemetry/core": "^1.1.0"
       },
       "engines": {
         "node": ">=14"
       },
       "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
+        "@opentelemetry/api": "^1.1.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-mongoose": {
-      "version": "0.40.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.40.0.tgz",
-      "integrity": "sha512-niRi5ZUnkgzRhIGMOozTyoZIvJKNJyhijQI4nF4iFSb+FUx2v5fngfR+8XLmdQAO7xmsD8E5vEGdDVYVtKbZew==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/core": "^1.8.0",
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-mysql": {
-      "version": "0.40.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.40.0.tgz",
-      "integrity": "sha512-d7ja8yizsOCNMYIJt5PH/fKZXjb/mS48zLROO4BzZTtDfhNCl2UM/9VIomP2qkGIFVouSJrGr/T00EzY7bPtKA==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0",
-        "@types/mysql": "2.15.22"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-mysql2": {
-      "version": "0.40.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.40.0.tgz",
-      "integrity": "sha512-0xfS1xcqUmY7WE1uWjlmI67Xg3QsSUlNT+AcXHeA4BDUPwZtWqF4ezIwLgpVZfHOnkAEheqGfNSWd1PIu3Wnfg==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0",
-        "@opentelemetry/sql-common": "^0.40.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-nestjs-core": {
-      "version": "0.39.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.39.0.tgz",
-      "integrity": "sha512-mewVhEXdikyvIZoMIUry8eb8l3HUjuQjSjVbmLVTt4NQi35tkpnHQrG9bTRBrl3403LoWZ2njMPJyg4l6HfKvA==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.23.0"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-pg": {
-      "version": "0.43.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.43.0.tgz",
-      "integrity": "sha512-og23KLyoxdnAeFs1UWqzSonuCkePUzCX30keSYigIzJe/6WSYA8rnEI5lobcxPEzg+GcU06J7jzokuEHbjVJNw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0",
-        "@opentelemetry/sql-common": "^0.40.1",
-        "@types/pg": "8.6.1",
-        "@types/pg-pool": "2.0.4"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-redis-4": {
-      "version": "0.41.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.41.0.tgz",
-      "integrity": "sha512-H7IfGTqW2reLXqput4yzAe8YpDC0fmVNal95GHMLOrS89W+qWUKIqxolSh63hJyfmwPSFwXASzj7wpSk8Az+Dg==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/redis-common": "^0.36.2",
-        "@opentelemetry/semantic-conventions": "^1.22.0"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/redis-common": {
-      "version": "0.36.2",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz",
-      "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==",
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/resources": {
-      "version": "1.25.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz",
-      "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/core": "1.25.1",
-        "@opentelemetry/semantic-conventions": "1.25.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": ">=1.0.0 <1.10.0"
-      }
-    },
-    "node_modules/@opentelemetry/sdk-metrics": {
-      "version": "1.25.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz",
-      "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/core": "1.25.1",
-        "@opentelemetry/resources": "1.25.1",
-        "lodash.merge": "^4.6.2"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": ">=1.3.0 <1.10.0"
-      }
-    },
-    "node_modules/@opentelemetry/sdk-trace-base": {
-      "version": "1.25.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz",
-      "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/core": "1.25.1",
-        "@opentelemetry/resources": "1.25.1",
-        "@opentelemetry/semantic-conventions": "1.25.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": ">=1.0.0 <1.10.0"
-      }
-    },
-    "node_modules/@opentelemetry/semantic-conventions": {
-      "version": "1.25.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz",
-      "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==",
-      "license": "Apache-2.0",
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/sql-common": {
-      "version": "0.40.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz",
-      "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/core": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.1.0"
-      }
-    },
-    "node_modules/@parcel/watcher": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz",
-      "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/@parcel/watcher": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz",
+      "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
         "detect-libc": "^1.0.3",
         "is-glob": "^4.0.3",
@@ -3956,6 +3674,16 @@
         }
       }
     },
+    "node_modules/@rollup/plugin-commonjs/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
     "node_modules/@rollup/plugin-commonjs/node_modules/estree-walker": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
@@ -4173,9 +3901,9 @@
       "license": "MIT"
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz",
-      "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.1.tgz",
+      "integrity": "sha512-2thheikVEuU7ZxFXubPDOtspKn1x0yqaYQwvALVtEcvFhMifPADBrgRPyHV0TF3b+9BgvgjgagVyvA/UqPZHmg==",
       "cpu": [
         "arm"
       ],
@@ -4187,9 +3915,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz",
-      "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.1.tgz",
+      "integrity": "sha512-t1lLYn4V9WgnIFHXy1d2Di/7gyzBWS8G5pQSXdZqfrdCGTwi1VasRMSS81DTYb+avDs/Zz4A6dzERki5oRYz1g==",
       "cpu": [
         "arm64"
       ],
@@ -4201,9 +3929,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz",
-      "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.1.tgz",
+      "integrity": "sha512-AH/wNWSEEHvs6t4iJ3RANxW5ZCK3fUnmf0gyMxWCesY1AlUj8jY7GC+rQE4wd3gwmZ9XDOpL0kcFnCjtN7FXlA==",
       "cpu": [
         "arm64"
       ],
@@ -4215,9 +3943,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz",
-      "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.1.tgz",
+      "integrity": "sha512-dO0BIz/+5ZdkLZrVgQrDdW7m2RkrLwYTh2YMFG9IpBtlC1x1NPNSXkfczhZieOlOLEqgXOFH3wYHB7PmBtf+Bg==",
       "cpu": [
         "x64"
       ],
@@ -4229,9 +3957,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz",
-      "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.1.tgz",
+      "integrity": "sha512-sWWgdQ1fq+XKrlda8PsMCfut8caFwZBmhYeoehJ05FdI0YZXk6ZyUjWLrIgbR/VgiGycrFKMMgp7eJ69HOF2pQ==",
       "cpu": [
         "arm"
       ],
@@ -4243,9 +3971,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz",
-      "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.1.tgz",
+      "integrity": "sha512-9OIiSuj5EsYQlmwhmFRA0LRO0dRRjdCVZA3hnmZe1rEwRk11Jy3ECGGq3a7RrVEZ0/pCsYWx8jG3IvcrJ6RCew==",
       "cpu": [
         "arm"
       ],
@@ -4257,9 +3985,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz",
-      "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.1.tgz",
+      "integrity": "sha512-0kuAkRK4MeIUbzQYu63NrJmfoUVicajoRAL1bpwdYIYRcs57iyIV9NLcuyDyDXE2GiZCL4uhKSYAnyWpjZkWow==",
       "cpu": [
         "arm64"
       ],
@@ -4271,9 +3999,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz",
-      "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.1.tgz",
+      "integrity": "sha512-/6dYC9fZtfEY0vozpc5bx1RP4VrtEOhNQGb0HwvYNwXD1BBbwQ5cKIbUVVU7G2d5WRE90NfB922elN8ASXAJEA==",
       "cpu": [
         "arm64"
       ],
@@ -4285,9 +4013,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz",
-      "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.1.tgz",
+      "integrity": "sha512-ltUWy+sHeAh3YZ91NUsV4Xg3uBXAlscQe8ZOXRCVAKLsivGuJsrkawYPUEyCV3DYa9urgJugMLn8Z3Z/6CeyRQ==",
       "cpu": [
         "ppc64"
       ],
@@ -4299,9 +4027,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz",
-      "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.1.tgz",
+      "integrity": "sha512-BggMndzI7Tlv4/abrgLwa/dxNEMn2gC61DCLrTzw8LkpSKel4o+O+gtjbnkevZ18SKkeN3ihRGPuBxjaetWzWg==",
       "cpu": [
         "riscv64"
       ],
@@ -4313,9 +4041,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz",
-      "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.1.tgz",
+      "integrity": "sha512-z/9rtlGd/OMv+gb1mNSjElasMf9yXusAxnRDrBaYB+eS1shFm6/4/xDH1SAISO5729fFKUkJ88TkGPRUh8WSAA==",
       "cpu": [
         "s390x"
       ],
@@ -4327,9 +4055,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz",
-      "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.1.tgz",
+      "integrity": "sha512-kXQVcWqDcDKw0S2E0TmhlTLlUgAmMVqPrJZR+KpH/1ZaZhLSl23GZpQVmawBQGVhyP5WXIsIQ/zqbDBBYmxm5w==",
       "cpu": [
         "x64"
       ],
@@ -4341,9 +4069,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz",
-      "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.1.tgz",
+      "integrity": "sha512-CbFv/WMQsSdl+bpX6rVbzR4kAjSSBuDgCqb1l4J68UYsQNalz5wOqLGYj4ZI0thGpyX5kc+LLZ9CL+kpqDovZA==",
       "cpu": [
         "x64"
       ],
@@ -4355,9 +4083,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz",
-      "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.1.tgz",
+      "integrity": "sha512-3Q3brDgA86gHXWHklrwdREKIrIbxC0ZgU8lwpj0eEKGBQH+31uPqr0P2v11pn0tSIxHvcdOWxa4j+YvLNx1i6g==",
       "cpu": [
         "arm64"
       ],
@@ -4369,9 +4097,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz",
-      "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.1.tgz",
+      "integrity": "sha512-tNg+jJcKR3Uwe4L0/wY3Ro0H+u3nrb04+tcq1GSYzBEmKLeOQF2emk1whxlzNqb6MMrQ2JOcQEpuuiPLyRcSIw==",
       "cpu": [
         "ia32"
       ],
@@ -4383,9 +4111,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz",
-      "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==",
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.1.tgz",
+      "integrity": "sha512-xGiIH95H1zU7naUyTKEyOA/I0aexNMUdO9qRv0bLKN3qu25bBdrxZHqA3PTJ24YNN/GdMzG4xkDcd/GvjuhfLg==",
       "cpu": [
         "x64"
       ],
@@ -4501,15 +4229,6 @@
         "node": ">=14.18"
       }
     },
-    "node_modules/@sinclair/typebox": {
-      "version": "0.27.8",
-      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
-      "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true
-    },
     "node_modules/@sindresorhus/merge-streams": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
@@ -4678,9 +4397,9 @@
       }
     },
     "node_modules/@types/eslint": {
-      "version": "9.6.0",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz",
-      "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==",
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
+      "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4688,19 +4407,6 @@
         "@types/json-schema": "*"
       }
     },
-    "node_modules/@types/eslint-scope": {
-      "version": "3.7.7",
-      "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
-      "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@types/eslint": "*",
-        "@types/estree": "*"
-      }
-    },
     "node_modules/@types/estree": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
@@ -4718,39 +4424,6 @@
         "@types/node": "*"
       }
     },
-    "node_modules/@types/istanbul-lib-coverage": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
-      "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true
-    },
-    "node_modules/@types/istanbul-lib-report": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
-      "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@types/istanbul-lib-coverage": "*"
-      }
-    },
-    "node_modules/@types/istanbul-reports": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
-      "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@types/istanbul-lib-report": "*"
-      }
-    },
     "node_modules/@types/json-schema": {
       "version": "7.0.15",
       "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -4768,12 +4441,12 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.2.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.2.0.tgz",
-      "integrity": "sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==",
+      "version": "22.5.1",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.1.tgz",
+      "integrity": "sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw==",
       "license": "MIT",
       "dependencies": {
-        "undici-types": "~6.13.0"
+        "undici-types": "~6.19.2"
       }
     },
     "node_modules/@types/normalize-package-data": {
@@ -4822,27 +4495,6 @@
       "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
       "license": "MIT"
     },
-    "node_modules/@types/yargs": {
-      "version": "17.0.33",
-      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
-      "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@types/yargs-parser": "*"
-      }
-    },
-    "node_modules/@types/yargs-parser": {
-      "version": "21.0.3",
-      "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
-      "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true
-    },
     "node_modules/@types/yauzl": {
       "version": "2.10.3",
       "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
@@ -5002,6 +4654,32 @@
         }
       }
     },
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/@typescript-eslint/utils": {
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.3.0.tgz",
@@ -5178,17 +4856,6 @@
         "node": ">= 8.0.0"
       }
     },
-    "node_modules/@vercel/nft/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
     "node_modules/@vercel/nft/node_modules/estree-walker": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
@@ -5218,19 +4885,6 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/@vercel/nft/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/@vercel/nft/node_modules/resolve-from": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
@@ -5404,44 +5058,6 @@
         "@eslint/config-array": ">=0.16.0"
       }
     },
-    "node_modules/@voxpelli/config-array-find-files/node_modules/@nodelib/fs.scandir": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-3.0.0.tgz",
-      "integrity": "sha512-ktI9+PxfHYtKjF3cLTUAh2N+b8MijCRPNwKJNqTVdL0gB0QxLU2rIRaZ1t71oEa3YBDE6bukH1sR0+CDnpp/Mg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.stat": "3.0.0",
-        "run-parallel": "^1.2.0"
-      },
-      "engines": {
-        "node": ">=16.14.0"
-      }
-    },
-    "node_modules/@voxpelli/config-array-find-files/node_modules/@nodelib/fs.stat": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-3.0.0.tgz",
-      "integrity": "sha512-2tQOI38s19P9i7X/Drt0v8iMA+KMsgdhB/dyPER+e+2Y8L1Z7QvnuRdW/uLuf5YRFUYmnj4bMA6qCuZHFI1GDQ==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=16.14.0"
-      }
-    },
-    "node_modules/@voxpelli/config-array-find-files/node_modules/@nodelib/fs.walk": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-2.0.0.tgz",
-      "integrity": "sha512-54voNDBobGdMl3BUXSu7UaDh1P85PGHWlJ5e0XhPugo1JulOyCtp2I+5ri4wplGDJ8QGwPEQW7/x3yTLU7yF1A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.scandir": "3.0.0",
-        "fastq": "^1.15.0"
-      },
-      "engines": {
-        "node": ">=16.14.0"
-      }
-    },
     "node_modules/@vue-macros/common": {
       "version": "1.12.2",
       "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.12.2.tgz",
@@ -5665,9 +5281,9 @@
       }
     },
     "node_modules/@vue/devtools-shared": {
-      "version": "7.3.8",
-      "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.3.8.tgz",
-      "integrity": "sha512-1NiJbn7Yp47nPDWhFZyEKpB2+5/+7JYv8IQnU0ccMrgslPR2dL7u1DIyI7mLqy4HN1ll36gQy0k8GqBYSFgZJw==",
+      "version": "7.3.9",
+      "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.3.9.tgz",
+      "integrity": "sha512-CdfMRZKXyI8vw+hqOcQIiLihB6Hbbi7WNZGp7LsuH1Qe4aYAFmTaKjSciRZ301oTnwmU/knC/s5OGuV6UNiNoA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5735,215 +5351,6 @@
         "vue-component-type-helpers": "^2.0.0"
       }
     },
-    "node_modules/@webassemblyjs/ast": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz",
-      "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@webassemblyjs/helper-numbers": "1.11.6",
-        "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
-      }
-    },
-    "node_modules/@webassemblyjs/floating-point-hex-parser": {
-      "version": "1.11.6",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
-      "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true
-    },
-    "node_modules/@webassemblyjs/helper-api-error": {
-      "version": "1.11.6",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
-      "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true
-    },
-    "node_modules/@webassemblyjs/helper-buffer": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz",
-      "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true
-    },
-    "node_modules/@webassemblyjs/helper-numbers": {
-      "version": "1.11.6",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
-      "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@webassemblyjs/floating-point-hex-parser": "1.11.6",
-        "@webassemblyjs/helper-api-error": "1.11.6",
-        "@xtuc/long": "4.2.2"
-      }
-    },
-    "node_modules/@webassemblyjs/helper-wasm-bytecode": {
-      "version": "1.11.6",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
-      "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true
-    },
-    "node_modules/@webassemblyjs/helper-wasm-section": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz",
-      "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@webassemblyjs/ast": "1.12.1",
-        "@webassemblyjs/helper-buffer": "1.12.1",
-        "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
-        "@webassemblyjs/wasm-gen": "1.12.1"
-      }
-    },
-    "node_modules/@webassemblyjs/ieee754": {
-      "version": "1.11.6",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
-      "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@xtuc/ieee754": "^1.2.0"
-      }
-    },
-    "node_modules/@webassemblyjs/leb128": {
-      "version": "1.11.6",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
-      "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@xtuc/long": "4.2.2"
-      }
-    },
-    "node_modules/@webassemblyjs/utf8": {
-      "version": "1.11.6",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
-      "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true
-    },
-    "node_modules/@webassemblyjs/wasm-edit": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz",
-      "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@webassemblyjs/ast": "1.12.1",
-        "@webassemblyjs/helper-buffer": "1.12.1",
-        "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
-        "@webassemblyjs/helper-wasm-section": "1.12.1",
-        "@webassemblyjs/wasm-gen": "1.12.1",
-        "@webassemblyjs/wasm-opt": "1.12.1",
-        "@webassemblyjs/wasm-parser": "1.12.1",
-        "@webassemblyjs/wast-printer": "1.12.1"
-      }
-    },
-    "node_modules/@webassemblyjs/wasm-gen": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz",
-      "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@webassemblyjs/ast": "1.12.1",
-        "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
-        "@webassemblyjs/ieee754": "1.11.6",
-        "@webassemblyjs/leb128": "1.11.6",
-        "@webassemblyjs/utf8": "1.11.6"
-      }
-    },
-    "node_modules/@webassemblyjs/wasm-opt": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz",
-      "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@webassemblyjs/ast": "1.12.1",
-        "@webassemblyjs/helper-buffer": "1.12.1",
-        "@webassemblyjs/wasm-gen": "1.12.1",
-        "@webassemblyjs/wasm-parser": "1.12.1"
-      }
-    },
-    "node_modules/@webassemblyjs/wasm-parser": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz",
-      "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@webassemblyjs/ast": "1.12.1",
-        "@webassemblyjs/helper-api-error": "1.11.6",
-        "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
-        "@webassemblyjs/ieee754": "1.11.6",
-        "@webassemblyjs/leb128": "1.11.6",
-        "@webassemblyjs/utf8": "1.11.6"
-      }
-    },
-    "node_modules/@webassemblyjs/wast-printer": {
-      "version": "1.12.1",
-      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz",
-      "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@webassemblyjs/ast": "1.12.1",
-        "@xtuc/long": "4.2.2"
-      }
-    },
-    "node_modules/@xtuc/ieee754": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
-      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "optional": true,
-      "peer": true
-    },
-    "node_modules/@xtuc/long": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
-      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "optional": true,
-      "peer": true
-    },
     "node_modules/abbrev": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
@@ -6051,66 +5458,6 @@
         "url": "https://github.com/sponsors/epoberezkin"
       }
     },
-    "node_modules/ajv-formats": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
-      "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "ajv": "^8.0.0"
-      },
-      "peerDependencies": {
-        "ajv": "^8.0.0"
-      },
-      "peerDependenciesMeta": {
-        "ajv": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/ajv-formats/node_modules/ajv": {
-      "version": "8.17.1",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
-      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "fast-deep-equal": "^3.1.3",
-        "fast-uri": "^3.0.1",
-        "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
-      }
-    },
-    "node_modules/ajv-formats/node_modules/json-schema-traverse": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true
-    },
-    "node_modules/ajv-keywords": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
-      "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "peerDependencies": {
-        "ajv": "^6.9.1"
-      }
-    },
     "node_modules/ansi-colors": {
       "version": "4.1.3",
       "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
@@ -6318,13 +5665,13 @@
       }
     },
     "node_modules/ast-kit": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-1.0.1.tgz",
-      "integrity": "sha512-XdXKlmX3YIrGKJS7d324CAbswH+C1klMCIRQ4VRy0+iPxGeP2scVOoYd09/V6uGjGAi/ZuEwBLzT7xBerSKNQg==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-1.1.0.tgz",
+      "integrity": "sha512-RlNqd4u6c/rJ5R+tN/ZTtyNrH8X0NHCvyt6gD8RHa3JjzxxHWoyaU0Ujk3Zjbh7IZqrYl1Sxm6XzZifmVxXxHQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/parser": "^7.24.8",
+        "@babel/parser": "^7.25.3",
         "pathe": "^1.1.2"
       },
       "engines": {
@@ -6358,9 +5705,9 @@
       }
     },
     "node_modules/async": {
-      "version": "3.2.5",
-      "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
-      "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
+      "version": "3.2.6",
+      "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+      "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
       "dev": true,
       "license": "MIT"
     },
@@ -6499,9 +5846,9 @@
       }
     },
     "node_modules/bare-stream": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.3.tgz",
-      "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.2.0.tgz",
+      "integrity": "sha512-+o9MG5bPRRBlkVSpfFlMag3n7wMaIZb4YZasU2+/96f+3HTQ4F9DKQeu3K/Sjz1W0umu6xvVq1ON0ipWdMlr3A==",
       "license": "Apache-2.0",
       "optional": true,
       "dependencies": {
@@ -6578,13 +5925,14 @@
       "license": "ISC"
     },
     "node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "balanced-match": "^1.0.0"
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
     "node_modules/braces": {
@@ -6820,9 +6168,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001651",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz",
-      "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==",
+      "version": "1.0.30001653",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz",
+      "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==",
       "dev": true,
       "funding": [
         {
@@ -6919,18 +6267,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/chrome-trace-event": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz",
-      "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "engines": {
-        "node": ">=6.0"
-      }
-    },
     "node_modules/chromium-bidi": {
       "version": "0.6.4",
       "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.4.tgz",
@@ -6978,9 +6314,9 @@
       }
     },
     "node_modules/cjs-module-lexer": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz",
-      "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.0.tgz",
+      "integrity": "sha512-N1NGmowPlGBLsOZLPvm48StN04V4YvQRL0i6b7ctrVY3epjP/ct7hFLOItz6pDIvRjwpfPxi52a2UWV2ziir8g==",
       "license": "MIT"
     },
     "node_modules/clean-regexp": {
@@ -7080,6 +6416,19 @@
         "node": ">=16.17.0"
       }
     },
+    "node_modules/clipboardy/node_modules/signal-exit": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/cliui": {
       "version": "8.0.1",
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
@@ -7379,9 +6728,9 @@
       }
     },
     "node_modules/core-js-compat": {
-      "version": "3.38.0",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz",
-      "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==",
+      "version": "3.38.1",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz",
+      "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -7852,13 +7201,16 @@
       }
     },
     "node_modules/define-lazy-prop": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
-      "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
+      "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=8"
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/defu": {
@@ -8123,6 +7475,16 @@
         "node": ">=14"
       }
     },
+    "node_modules/editorconfig/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
     "node_modules/editorconfig/node_modules/minimatch": {
       "version": "9.0.1",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz",
@@ -8147,9 +7509,9 @@
       "license": "MIT"
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.6",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz",
-      "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==",
+      "version": "1.5.13",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
+      "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
       "dev": true,
       "license": "ISC"
     },
@@ -8240,9 +7602,9 @@
       "license": "MIT"
     },
     "node_modules/esbuild": {
-      "version": "0.23.1",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz",
-      "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==",
+      "version": "0.21.5",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+      "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
       "dev": true,
       "hasInstallScript": true,
       "license": "MIT",
@@ -8250,33 +7612,32 @@
         "esbuild": "bin/esbuild"
       },
       "engines": {
-        "node": ">=18"
+        "node": ">=12"
       },
       "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.23.1",
-        "@esbuild/android-arm": "0.23.1",
-        "@esbuild/android-arm64": "0.23.1",
-        "@esbuild/android-x64": "0.23.1",
-        "@esbuild/darwin-arm64": "0.23.1",
-        "@esbuild/darwin-x64": "0.23.1",
-        "@esbuild/freebsd-arm64": "0.23.1",
-        "@esbuild/freebsd-x64": "0.23.1",
-        "@esbuild/linux-arm": "0.23.1",
-        "@esbuild/linux-arm64": "0.23.1",
-        "@esbuild/linux-ia32": "0.23.1",
-        "@esbuild/linux-loong64": "0.23.1",
-        "@esbuild/linux-mips64el": "0.23.1",
-        "@esbuild/linux-ppc64": "0.23.1",
-        "@esbuild/linux-riscv64": "0.23.1",
-        "@esbuild/linux-s390x": "0.23.1",
-        "@esbuild/linux-x64": "0.23.1",
-        "@esbuild/netbsd-x64": "0.23.1",
-        "@esbuild/openbsd-arm64": "0.23.1",
-        "@esbuild/openbsd-x64": "0.23.1",
-        "@esbuild/sunos-x64": "0.23.1",
-        "@esbuild/win32-arm64": "0.23.1",
-        "@esbuild/win32-ia32": "0.23.1",
-        "@esbuild/win32-x64": "0.23.1"
+        "@esbuild/aix-ppc64": "0.21.5",
+        "@esbuild/android-arm": "0.21.5",
+        "@esbuild/android-arm64": "0.21.5",
+        "@esbuild/android-x64": "0.21.5",
+        "@esbuild/darwin-arm64": "0.21.5",
+        "@esbuild/darwin-x64": "0.21.5",
+        "@esbuild/freebsd-arm64": "0.21.5",
+        "@esbuild/freebsd-x64": "0.21.5",
+        "@esbuild/linux-arm": "0.21.5",
+        "@esbuild/linux-arm64": "0.21.5",
+        "@esbuild/linux-ia32": "0.21.5",
+        "@esbuild/linux-loong64": "0.21.5",
+        "@esbuild/linux-mips64el": "0.21.5",
+        "@esbuild/linux-ppc64": "0.21.5",
+        "@esbuild/linux-riscv64": "0.21.5",
+        "@esbuild/linux-s390x": "0.21.5",
+        "@esbuild/linux-x64": "0.21.5",
+        "@esbuild/netbsd-x64": "0.21.5",
+        "@esbuild/openbsd-x64": "0.21.5",
+        "@esbuild/sunos-x64": "0.21.5",
+        "@esbuild/win32-arm64": "0.21.5",
+        "@esbuild/win32-ia32": "0.21.5",
+        "@esbuild/win32-x64": "0.21.5"
       }
     },
     "node_modules/escalade": {
@@ -8465,9 +7826,9 @@
       }
     },
     "node_modules/eslint-plugin-import-x": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.0.0.tgz",
-      "integrity": "sha512-5bWZ+2p3DKlpLSP830cAUmRUoYEnnvuBmSOSlURffEUuXL68uQUX0v2JpoXxyoDRIQWApzbqhnFeHA0XoQWosA==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.1.0.tgz",
+      "integrity": "sha512-1BYJU0C5NBJLY4qukmwDbFrf2w8fLGEU9zZV3viWa7gNnbn4o4meQy5O4LVXn56eFh9Y4fQxu3udhIqQuVITvw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8490,6 +7851,32 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
+    "node_modules/eslint-plugin-import-x/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/eslint-plugin-import-x/node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/eslint-plugin-jsdoc": {
       "version": "50.2.2",
       "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.2.2.tgz",
@@ -8751,46 +8138,6 @@
         "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/eslint-webpack-plugin": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-4.2.0.tgz",
-      "integrity": "sha512-rsfpFQ01AWQbqtjgPRr2usVRxhWDuG0YDYcG8DJOteD3EFnpeuYuOwk0PQiN7PRBTqS6ElNdtPZPggj8If9WnA==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@types/eslint": "^8.56.10",
-        "jest-worker": "^29.7.0",
-        "micromatch": "^4.0.5",
-        "normalize-path": "^3.0.0",
-        "schema-utils": "^4.2.0"
-      },
-      "engines": {
-        "node": ">= 14.15.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependencies": {
-        "eslint": "^8.0.0 || ^9.0.0",
-        "webpack": "^5.0.0"
-      }
-    },
-    "node_modules/eslint-webpack-plugin/node_modules/@types/eslint": {
-      "version": "8.56.11",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz",
-      "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@types/estree": "*",
-        "@types/json-schema": "*"
-      }
-    },
     "node_modules/eslint/node_modules/@eslint/eslintrc": {
       "version": "2.1.4",
       "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
@@ -8825,15 +8172,42 @@
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
-    "node_modules/eslint/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+    "node_modules/eslint/node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/eslint/node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/eslint/node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
       }
     },
     "node_modules/eslint/node_modules/eslint-visitor-keys": {
@@ -8867,6 +8241,23 @@
         "url": "https://opencollective.com/eslint"
       }
     },
+    "node_modules/eslint/node_modules/find-up": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "locate-path": "^6.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/eslint/node_modules/glob-parent": {
       "version": "6.0.2",
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
@@ -8896,17 +8287,62 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/eslint/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+    "node_modules/eslint/node_modules/locate-path": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "brace-expansion": "^1.1.7"
+        "p-locate": "^5.0.0"
       },
       "engines": {
-        "node": "*"
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/eslint/node_modules/p-limit": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "yocto-queue": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/eslint/node_modules/p-locate": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "p-limit": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/eslint/node_modules/path-exists": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
       }
     },
     "node_modules/eslint/node_modules/type-fest": {
@@ -8922,6 +8358,19 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/eslint/node_modules/yocto-queue": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/espree": {
       "version": "10.1.0",
       "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
@@ -9061,13 +8510,6 @@
         "url": "https://github.com/sindresorhus/execa?sponsor=1"
       }
     },
-    "node_modules/execa/node_modules/signal-exit": {
-      "version": "3.0.7",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-      "dev": true,
-      "license": "ISC"
-    },
     "node_modules/externality": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/externality/-/externality-1.0.2.tgz",
@@ -9153,38 +8595,67 @@
         "node": ">=8.6.0"
       }
     },
-    "node_modules/fast-json-stable-stringify": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/fast-levenshtein": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/fast-npm-meta": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/fast-npm-meta/-/fast-npm-meta-0.2.2.tgz",
-      "integrity": "sha512-E+fdxeaOQGo/CMWc9f4uHFfgUPJRAu7N3uB8GBvB3SDPAIWJK4GKyYhkAGFq+GYrcbKNfQIz5VVQyJnDuPPCrg==",
+    "node_modules/fast-glob/node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
       "dev": true,
       "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "node_modules/fast-uri": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
-      "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+    "node_modules/fast-glob/node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "peer": true
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/fast-glob/node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/fast-json-stable-stringify": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/fast-npm-meta": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/fast-npm-meta/-/fast-npm-meta-0.2.2.tgz",
+      "integrity": "sha512-E+fdxeaOQGo/CMWc9f4uHFfgUPJRAu7N3uB8GBvB3SDPAIWJK4GKyYhkAGFq+GYrcbKNfQIz5VVQyJnDuPPCrg==",
+      "dev": true,
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
     },
     "node_modules/fastq": {
       "version": "1.17.1",
@@ -9239,17 +8710,18 @@
       }
     },
     "node_modules/find-up": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
-      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz",
+      "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "locate-path": "^6.0.0",
-        "path-exists": "^4.0.0"
+        "locate-path": "^7.2.0",
+        "path-exists": "^5.0.0",
+        "unicorn-magic": "^0.1.0"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -9327,6 +8799,19 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/foreground-child/node_modules/signal-exit": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/form-data": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
@@ -9472,13 +8957,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/gauge/node_modules/signal-exit": {
-      "version": "3.0.7",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
-      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
-      "dev": true,
-      "license": "ISC"
-    },
     "node_modules/gauge/node_modules/string-width": {
       "version": "4.2.3",
       "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -9656,14 +9134,31 @@
         "node": ">= 6"
       }
     },
-    "node_modules/glob-to-regexp": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
-      "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+    "node_modules/glob/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
       "dev": true,
-      "license": "BSD-2-Clause",
-      "optional": true,
-      "peer": true
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/glob/node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
     },
     "node_modules/global-directory": {
       "version": "4.0.1",
@@ -10247,9 +9742,9 @@
       }
     },
     "node_modules/is-core-module": {
-      "version": "2.15.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
-      "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
+      "version": "2.15.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
+      "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
       "license": "MIT",
       "dependencies": {
         "hasown": "^2.0.2"
@@ -10590,80 +10085,6 @@
         "@pkgjs/parseargs": "^0.11.0"
       }
     },
-    "node_modules/jest-util": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
-      "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@jest/types": "^29.6.3",
-        "@types/node": "*",
-        "chalk": "^4.0.0",
-        "ci-info": "^3.2.0",
-        "graceful-fs": "^4.2.9",
-        "picomatch": "^2.2.3"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-util/node_modules/ci-info": {
-      "version": "3.9.0",
-      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
-      "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/sibiraj-s"
-        }
-      ],
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest-worker": {
-      "version": "29.7.0",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
-      "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@types/node": "*",
-        "jest-util": "^29.7.0",
-        "merge-stream": "^2.0.0",
-        "supports-color": "^8.0.0"
-      },
-      "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
-      }
-    },
-    "node_modules/jest-worker/node_modules/supports-color": {
-      "version": "8.1.1",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/supports-color?sponsor=1"
-      }
-    },
     "node_modules/jiti": {
       "version": "1.21.6",
       "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
@@ -11276,18 +10697,6 @@
         "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       }
     },
-    "node_modules/loader-runner": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
-      "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "engines": {
-        "node": ">=6.11.5"
-      }
-    },
     "node_modules/local-pkg": {
       "version": "0.5.0",
       "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz",
@@ -11306,16 +10715,16 @@
       }
     },
     "node_modules/locate-path": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
-      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+      "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "p-locate": "^5.0.0"
+        "p-locate": "^6.0.0"
       },
       "engines": {
-        "node": ">=10"
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -11366,6 +10775,7 @@
       "version": "4.6.2",
       "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
       "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+      "dev": true,
       "license": "MIT"
     },
     "node_modules/lodash.sortedlastindex": {
@@ -11425,14 +10835,14 @@
       }
     },
     "node_modules/magicast": {
-      "version": "0.3.4",
-      "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz",
-      "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==",
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz",
+      "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/parser": "^7.24.4",
-        "@babel/types": "^7.24.0",
+        "@babel/parser": "^7.25.4",
+        "@babel/types": "^7.25.4",
         "source-map-js": "^1.2.0"
       }
     },
@@ -11497,9 +10907,9 @@
       }
     },
     "node_modules/micromatch": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
-      "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -11571,19 +10981,16 @@
       }
     },
     "node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "brace-expansion": "^2.0.1"
+        "brace-expansion": "^1.1.7"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "node": "*"
       }
     },
     "node_modules/minimist": {
@@ -11752,15 +11159,6 @@
         "node": ">= 0.6"
       }
     },
-    "node_modules/neo-async": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
-      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true
-    },
     "node_modules/netmask": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
@@ -12387,9 +11785,9 @@
       }
     },
     "node_modules/node-gyp-build": {
-      "version": "4.8.1",
-      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz",
-      "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==",
+      "version": "4.8.2",
+      "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz",
+      "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==",
       "dev": true,
       "license": "MIT",
       "bin": {
@@ -12521,9 +11919,9 @@
       }
     },
     "node_modules/nuxi": {
-      "version": "3.12.0",
-      "resolved": "https://registry.npmjs.org/nuxi/-/nuxi-3.12.0.tgz",
-      "integrity": "sha512-6vRdiXTw9SajEQOUi6Ze/XaIXzy1q/sD5UqHQSv3yqTu7Pot5S7fEihNXV8LpcgLz+9HzjVt70r7jYe7R99c2w==",
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/nuxi/-/nuxi-3.13.1.tgz",
+      "integrity": "sha512-rhUfFCtIH8IxhfibVd26uGrC0ojUijGoU3bAhPQHrkl7mFlK+g+XeIttdsI8YAC7s/wPishrTpE9z1UssHY6eA==",
       "dev": true,
       "license": "MIT",
       "bin": {
@@ -12626,588 +12024,607 @@
         }
       }
     },
-    "node_modules/nuxt/node_modules/escape-string-regexp": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
-      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+    "node_modules/nuxt/node_modules/@esbuild/aix-ppc64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz",
+      "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==",
+      "cpu": [
+        "ppc64"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "aix"
+      ],
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=18"
       }
     },
-    "node_modules/nwsapi": {
-      "version": "2.2.12",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz",
-      "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==",
-      "license": "MIT"
-    },
-    "node_modules/nypm": {
-      "version": "0.3.9",
-      "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.9.tgz",
-      "integrity": "sha512-BI2SdqqTHg2d4wJh8P9A1W+bslg33vOE9IZDY6eR2QC+Pu1iNBVZUqczrd43rJb+fMzHU7ltAYKsEFY/kHMFcw==",
+    "node_modules/nuxt/node_modules/@esbuild/android-arm": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz",
+      "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==",
+      "cpu": [
+        "arm"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "citty": "^0.1.6",
-        "consola": "^3.2.3",
-        "execa": "^8.0.1",
-        "pathe": "^1.1.2",
-        "pkg-types": "^1.1.1",
-        "ufo": "^1.5.3"
-      },
-      "bin": {
-        "nypm": "dist/cli.mjs"
-      },
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": "^14.16.0 || >=16.10.0"
+        "node": ">=18"
       }
     },
-    "node_modules/nypm/node_modules/execa": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
-      "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
+    "node_modules/nuxt/node_modules/@esbuild/android-arm64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz",
+      "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "cross-spawn": "^7.0.3",
-        "get-stream": "^8.0.1",
-        "human-signals": "^5.0.0",
-        "is-stream": "^3.0.0",
-        "merge-stream": "^2.0.0",
-        "npm-run-path": "^5.1.0",
-        "onetime": "^6.0.0",
-        "signal-exit": "^4.1.0",
-        "strip-final-newline": "^3.0.0"
-      },
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": ">=16.17"
-      },
-      "funding": {
-        "url": "https://github.com/sindresorhus/execa?sponsor=1"
+        "node": ">=18"
       }
     },
-    "node_modules/nypm/node_modules/get-stream": {
-      "version": "8.0.1",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
-      "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+    "node_modules/nuxt/node_modules/@esbuild/android-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz",
+      "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "android"
+      ],
       "engines": {
-        "node": ">=16"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=18"
       }
     },
-    "node_modules/nypm/node_modules/human-signals": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
-      "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
+    "node_modules/nuxt/node_modules/@esbuild/darwin-arm64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz",
+      "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
-      "license": "Apache-2.0",
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": ">=16.17.0"
+        "node": ">=18"
       }
     },
-    "node_modules/object-assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+    "node_modules/nuxt/node_modules/@esbuild/darwin-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz",
+      "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
       "engines": {
-        "node": ">=0.10.0"
+        "node": ">=18"
       }
     },
-    "node_modules/object-hash": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
-      "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+    "node_modules/nuxt/node_modules/@esbuild/freebsd-arm64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz",
+      "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
       "engines": {
-        "node": ">= 6"
+        "node": ">=18"
       }
     },
-    "node_modules/ofetch": {
-      "version": "1.3.4",
-      "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.3.4.tgz",
-      "integrity": "sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==",
+    "node_modules/nuxt/node_modules/@esbuild/freebsd-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz",
+      "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "destr": "^2.0.3",
-        "node-fetch-native": "^1.6.3",
-        "ufo": "^1.5.3"
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/ohash": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz",
-      "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/on-finished": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
-      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+    "node_modules/nuxt/node_modules/@esbuild/linux-arm": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz",
+      "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==",
+      "cpu": [
+        "arm"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "ee-first": "1.1.1"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">= 0.8"
-      }
-    },
-    "node_modules/once": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
-      "license": "ISC",
-      "dependencies": {
-        "wrappy": "1"
+        "node": ">=18"
       }
     },
-    "node_modules/onetime": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
-      "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
+    "node_modules/nuxt/node_modules/@esbuild/linux-arm64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz",
+      "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==",
+      "cpu": [
+        "arm64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "mimic-fn": "^4.0.0"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=18"
       }
     },
-    "node_modules/only": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz",
-      "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==",
-      "dev": true
-    },
-    "node_modules/open": {
-      "version": "8.4.2",
-      "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
-      "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
+    "node_modules/nuxt/node_modules/@esbuild/linux-ia32": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz",
+      "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==",
+      "cpu": [
+        "ia32"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "define-lazy-prop": "^2.0.0",
-        "is-docker": "^2.1.1",
-        "is-wsl": "^2.2.0"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=18"
       }
     },
-    "node_modules/open/node_modules/is-docker": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
-      "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+    "node_modules/nuxt/node_modules/@esbuild/linux-loong64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz",
+      "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==",
+      "cpu": [
+        "loong64"
+      ],
       "dev": true,
       "license": "MIT",
-      "bin": {
-        "is-docker": "cli.js"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=18"
       }
     },
-    "node_modules/open/node_modules/is-wsl": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
-      "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+    "node_modules/nuxt/node_modules/@esbuild/linux-mips64el": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz",
+      "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==",
+      "cpu": [
+        "mips64el"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "is-docker": "^2.0.0"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=8"
+        "node": ">=18"
       }
     },
-    "node_modules/openapi-typescript": {
-      "version": "6.7.6",
-      "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-6.7.6.tgz",
-      "integrity": "sha512-c/hfooPx+RBIOPM09GSxABOZhYPblDoyaGhqBkD/59vtpN21jEuWKDlM0KYTvqJVlSYjKs0tBcIdeXKChlSPtw==",
+    "node_modules/nuxt/node_modules/@esbuild/linux-ppc64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz",
+      "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==",
+      "cpu": [
+        "ppc64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "ansi-colors": "^4.1.3",
-        "fast-glob": "^3.3.2",
-        "js-yaml": "^4.1.0",
-        "supports-color": "^9.4.0",
-        "undici": "^5.28.4",
-        "yargs-parser": "^21.1.1"
-      },
-      "bin": {
-        "openapi-typescript": "bin/cli.js"
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=18"
       }
     },
-    "node_modules/openapi-typescript/node_modules/supports-color": {
-      "version": "9.4.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz",
-      "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==",
+    "node_modules/nuxt/node_modules/@esbuild/linux-riscv64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz",
+      "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==",
+      "cpu": [
+        "riscv64"
+      ],
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/supports-color?sponsor=1"
-      }
-    },
-    "node_modules/opentelemetry-instrumentation-fetch-node": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/opentelemetry-instrumentation-fetch-node/-/opentelemetry-instrumentation-fetch-node-1.2.3.tgz",
-      "integrity": "sha512-Qb11T7KvoCevMaSeuamcLsAD+pZnavkhDnlVL0kRozfhl42dKG5Q3anUklAFKJZjY3twLR+BnRa6DlwwkIE/+A==",
-      "license": "MIT",
-      "optional": true,
-      "dependencies": {
-        "@opentelemetry/instrumentation": "^0.46.0",
-        "@opentelemetry/semantic-conventions": "^1.17.0"
-      },
-      "engines": {
-        "node": ">18.0.0"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.6.0"
-      }
-    },
-    "node_modules/opentelemetry-instrumentation-fetch-node/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.46.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.46.0.tgz",
-      "integrity": "sha512-a9TijXZZbk0vI5TGLZl+0kxyFfrXHhX6Svtz7Pp2/VBlCSKrazuULEyoJQrOknJyFWNMEmbbJgOciHCCpQcisw==",
-      "license": "Apache-2.0",
       "optional": true,
-      "dependencies": {
-        "@types/shimmer": "^1.0.2",
-        "import-in-the-middle": "1.7.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
-      },
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/opentelemetry-instrumentation-fetch-node/node_modules/import-in-the-middle": {
-      "version": "1.7.1",
-      "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.7.1.tgz",
-      "integrity": "sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==",
-      "license": "Apache-2.0",
-      "optional": true,
-      "dependencies": {
-        "acorn": "^8.8.2",
-        "acorn-import-assertions": "^1.9.0",
-        "cjs-module-lexer": "^1.2.2",
-        "module-details-from-path": "^1.0.3"
+        "node": ">=18"
       }
     },
-    "node_modules/optionator": {
-      "version": "0.9.4",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
-      "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+    "node_modules/nuxt/node_modules/@esbuild/linux-s390x": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz",
+      "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==",
+      "cpu": [
+        "s390x"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "deep-is": "^0.1.3",
-        "fast-levenshtein": "^2.0.6",
-        "levn": "^0.4.1",
-        "prelude-ls": "^1.2.1",
-        "type-check": "^0.4.0",
-        "word-wrap": "^1.2.5"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">= 0.8.0"
+        "node": ">=18"
       }
     },
-    "node_modules/p-limit": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
-      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+    "node_modules/nuxt/node_modules/@esbuild/linux-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz",
+      "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "yocto-queue": "^0.1.0"
-      },
+      "optional": true,
+      "os": [
+        "linux"
+      ],
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=18"
       }
     },
-    "node_modules/p-locate": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
-      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+    "node_modules/nuxt/node_modules/@esbuild/netbsd-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz",
+      "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "p-limit": "^3.0.2"
-      },
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=18"
       }
     },
-    "node_modules/p-try": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
-      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+    "node_modules/nuxt/node_modules/@esbuild/openbsd-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz",
+      "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
       "engines": {
-        "node": ">=6"
+        "node": ">=18"
       }
     },
-    "node_modules/pac-proxy-agent": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz",
-      "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==",
+    "node_modules/nuxt/node_modules/@esbuild/sunos-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz",
+      "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@tootallnate/quickjs-emscripten": "^0.23.0",
-        "agent-base": "^7.0.2",
-        "debug": "^4.3.4",
-        "get-uri": "^6.0.1",
-        "http-proxy-agent": "^7.0.0",
-        "https-proxy-agent": "^7.0.5",
-        "pac-resolver": "^7.0.1",
-        "socks-proxy-agent": "^8.0.4"
-      },
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
       "engines": {
-        "node": ">= 14"
+        "node": ">=18"
       }
     },
-    "node_modules/pac-resolver": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz",
-      "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==",
+    "node_modules/nuxt/node_modules/@esbuild/win32-arm64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz",
+      "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "degenerator": "^5.0.0",
-        "netmask": "^2.0.2"
-      },
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": ">= 14"
+        "node": ">=18"
       }
     },
-    "node_modules/package-json-from-dist": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
-      "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
-      "dev": true,
-      "license": "BlueOak-1.0.0"
-    },
-    "node_modules/parent-module": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
-      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+    "node_modules/nuxt/node_modules/@esbuild/win32-ia32": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz",
+      "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==",
+      "cpu": [
+        "ia32"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "callsites": "^3.0.0"
-      },
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": ">=6"
+        "node": ">=18"
       }
     },
-    "node_modules/parse-git-config": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-3.0.0.tgz",
-      "integrity": "sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA==",
+    "node_modules/nuxt/node_modules/@esbuild/win32-x64": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz",
+      "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "git-config-path": "^2.0.0",
-        "ini": "^1.3.5"
-      },
+      "optional": true,
+      "os": [
+        "win32"
+      ],
       "engines": {
-        "node": ">=8"
+        "node": ">=18"
       }
     },
-    "node_modules/parse-gitignore": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-2.0.0.tgz",
-      "integrity": "sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==",
+    "node_modules/nuxt/node_modules/esbuild": {
+      "version": "0.23.1",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz",
+      "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==",
       "dev": true,
+      "hasInstallScript": true,
       "license": "MIT",
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
       "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/parse-imports": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.1.tgz",
-      "integrity": "sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "es-module-lexer": "^1.5.3",
-        "slashes": "^3.0.12"
+        "node": ">=18"
       },
-      "engines": {
-        "node": ">= 18"
+      "optionalDependencies": {
+        "@esbuild/aix-ppc64": "0.23.1",
+        "@esbuild/android-arm": "0.23.1",
+        "@esbuild/android-arm64": "0.23.1",
+        "@esbuild/android-x64": "0.23.1",
+        "@esbuild/darwin-arm64": "0.23.1",
+        "@esbuild/darwin-x64": "0.23.1",
+        "@esbuild/freebsd-arm64": "0.23.1",
+        "@esbuild/freebsd-x64": "0.23.1",
+        "@esbuild/linux-arm": "0.23.1",
+        "@esbuild/linux-arm64": "0.23.1",
+        "@esbuild/linux-ia32": "0.23.1",
+        "@esbuild/linux-loong64": "0.23.1",
+        "@esbuild/linux-mips64el": "0.23.1",
+        "@esbuild/linux-ppc64": "0.23.1",
+        "@esbuild/linux-riscv64": "0.23.1",
+        "@esbuild/linux-s390x": "0.23.1",
+        "@esbuild/linux-x64": "0.23.1",
+        "@esbuild/netbsd-x64": "0.23.1",
+        "@esbuild/openbsd-arm64": "0.23.1",
+        "@esbuild/openbsd-x64": "0.23.1",
+        "@esbuild/sunos-x64": "0.23.1",
+        "@esbuild/win32-arm64": "0.23.1",
+        "@esbuild/win32-ia32": "0.23.1",
+        "@esbuild/win32-x64": "0.23.1"
       }
     },
-    "node_modules/parse-json": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
-      "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+    "node_modules/nuxt/node_modules/escape-string-regexp": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
       "dev": true,
       "license": "MIT",
-      "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"
-      },
       "engines": {
-        "node": ">=8"
+        "node": ">=12"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/parse-path": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz",
-      "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==",
+    "node_modules/nwsapi": {
+      "version": "2.2.12",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz",
+      "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==",
+      "license": "MIT"
+    },
+    "node_modules/nypm": {
+      "version": "0.3.11",
+      "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.11.tgz",
+      "integrity": "sha512-E5GqaAYSnbb6n1qZyik2wjPDZON43FqOJO59+3OkWrnmQtjggrMOVnsyzfjxp/tS6nlYJBA4zRA5jSM2YaadMg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "protocols": "^2.0.0"
+        "citty": "^0.1.6",
+        "consola": "^3.2.3",
+        "execa": "^8.0.1",
+        "pathe": "^1.1.2",
+        "pkg-types": "^1.2.0",
+        "ufo": "^1.5.4"
+      },
+      "bin": {
+        "nypm": "dist/cli.mjs"
+      },
+      "engines": {
+        "node": "^14.16.0 || >=16.10.0"
       }
     },
-    "node_modules/parse-url": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz",
-      "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==",
+    "node_modules/nypm/node_modules/execa": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
+      "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "parse-path": "^7.0.0"
+        "cross-spawn": "^7.0.3",
+        "get-stream": "^8.0.1",
+        "human-signals": "^5.0.0",
+        "is-stream": "^3.0.0",
+        "merge-stream": "^2.0.0",
+        "npm-run-path": "^5.1.0",
+        "onetime": "^6.0.0",
+        "signal-exit": "^4.1.0",
+        "strip-final-newline": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=16.17"
+      },
+      "funding": {
+        "url": "https://github.com/sindresorhus/execa?sponsor=1"
       }
     },
-    "node_modules/parse5": {
-      "version": "7.1.2",
-      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
-      "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+    "node_modules/nypm/node_modules/get-stream": {
+      "version": "8.0.1",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+      "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "entities": "^4.4.0"
+      "engines": {
+        "node": ">=16"
       },
       "funding": {
-        "url": "https://github.com/inikulin/parse5?sponsor=1"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/parseurl": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
-      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+    "node_modules/nypm/node_modules/human-signals": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
+      "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
       "dev": true,
-      "license": "MIT",
+      "license": "Apache-2.0",
       "engines": {
-        "node": ">= 0.8"
+        "node": ">=16.17.0"
       }
     },
-    "node_modules/path-exists": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
-      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+    "node_modules/nypm/node_modules/signal-exit": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "engines": {
-        "node": ">=8"
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/path-is-absolute": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+    "node_modules/object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
       "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
     },
-    "node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+    "node_modules/object-hash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+      "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=8"
+        "node": ">= 6"
       }
     },
-    "node_modules/path-parse": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
-      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+    "node_modules/ofetch": {
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.3.4.tgz",
+      "integrity": "sha512-KLIET85ik3vhEfS+3fDlc/BAZiAp+43QEC/yCo5zkNoY2YaKvNkOaFr/6wCFgFH1kuYQM5pMNi0Tg8koiIemtw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "destr": "^2.0.3",
+        "node-fetch-native": "^1.6.3",
+        "ufo": "^1.5.3"
+      }
+    },
+    "node_modules/ohash": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz",
+      "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==",
+      "dev": true,
       "license": "MIT"
     },
-    "node_modules/path-scurry": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
-      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+    "node_modules/on-finished": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+      "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
       "dev": true,
-      "license": "BlueOak-1.0.0",
+      "license": "MIT",
       "dependencies": {
-        "lru-cache": "^10.2.0",
-        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+        "ee-first": "1.1.1"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "node": ">= 0.8"
       }
     },
-    "node_modules/path-scurry/node_modules/lru-cache": {
-      "version": "10.4.3",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
-      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/path-to-regexp": {
-      "version": "6.2.2",
-      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz",
-      "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==",
-      "dev": true,
-      "license": "MIT"
+    "node_modules/once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+      "license": "ISC",
+      "dependencies": {
+        "wrappy": "1"
+      }
     },
-    "node_modules/path-type": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
-      "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
+    "node_modules/onetime": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
+      "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "mimic-fn": "^4.0.0"
+      },
       "engines": {
         "node": ">=12"
       },
@@ -13215,544 +12632,573 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/pathe": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
-      "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
-      "dev": true,
-      "license": "MIT"
+    "node_modules/only": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz",
+      "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==",
+      "dev": true
     },
-    "node_modules/pathval": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz",
-      "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==",
+    "node_modules/open": {
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz",
+      "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "default-browser": "^5.2.1",
+        "define-lazy-prop": "^3.0.0",
+        "is-inside-container": "^1.0.0",
+        "is-wsl": "^3.1.0"
+      },
       "engines": {
-        "node": ">= 14.16"
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/pend": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
-      "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
-      "license": "MIT"
-    },
-    "node_modules/perfect-debounce": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
-      "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
+    "node_modules/openapi-typescript": {
+      "version": "6.7.6",
+      "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-6.7.6.tgz",
+      "integrity": "sha512-c/hfooPx+RBIOPM09GSxABOZhYPblDoyaGhqBkD/59vtpN21jEuWKDlM0KYTvqJVlSYjKs0tBcIdeXKChlSPtw==",
       "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/pg-int8": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
-      "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==",
-      "license": "ISC",
-      "engines": {
-        "node": ">=4.0.0"
-      }
-    },
-    "node_modules/pg-protocol": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz",
-      "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==",
-      "license": "MIT"
-    },
-    "node_modules/pg-types": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
-      "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
       "license": "MIT",
       "dependencies": {
-        "pg-int8": "1.0.1",
-        "postgres-array": "~2.0.0",
-        "postgres-bytea": "~1.0.0",
-        "postgres-date": "~1.0.4",
-        "postgres-interval": "^1.1.0"
+        "ansi-colors": "^4.1.3",
+        "fast-glob": "^3.3.2",
+        "js-yaml": "^4.1.0",
+        "supports-color": "^9.4.0",
+        "undici": "^5.28.4",
+        "yargs-parser": "^21.1.1"
       },
-      "engines": {
-        "node": ">=4"
+      "bin": {
+        "openapi-typescript": "bin/cli.js"
       }
     },
-    "node_modules/picocolors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
-      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
-      "license": "ISC"
-    },
-    "node_modules/picomatch": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+    "node_modules/openapi-typescript/node_modules/supports-color": {
+      "version": "9.4.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz",
+      "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=8.6"
+        "node": ">=12"
       },
       "funding": {
-        "url": "https://github.com/sponsors/jonschlinkert"
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
       }
     },
-    "node_modules/pify": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
-      "dev": true,
+    "node_modules/opentelemetry-instrumentation-fetch-node": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/opentelemetry-instrumentation-fetch-node/-/opentelemetry-instrumentation-fetch-node-1.2.3.tgz",
+      "integrity": "sha512-Qb11T7KvoCevMaSeuamcLsAD+pZnavkhDnlVL0kRozfhl42dKG5Q3anUklAFKJZjY3twLR+BnRa6DlwwkIE/+A==",
       "license": "MIT",
+      "optional": true,
+      "dependencies": {
+        "@opentelemetry/instrumentation": "^0.46.0",
+        "@opentelemetry/semantic-conventions": "^1.17.0"
+      },
       "engines": {
-        "node": ">=0.10.0"
+        "node": ">18.0.0"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.6.0"
       }
     },
-    "node_modules/pirates": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
-      "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/opentelemetry-instrumentation-fetch-node/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.46.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.46.0.tgz",
+      "integrity": "sha512-a9TijXZZbk0vI5TGLZl+0kxyFfrXHhX6Svtz7Pp2/VBlCSKrazuULEyoJQrOknJyFWNMEmbbJgOciHCCpQcisw==",
+      "license": "Apache-2.0",
+      "optional": true,
+      "dependencies": {
+        "@types/shimmer": "^1.0.2",
+        "import-in-the-middle": "1.7.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
+      },
       "engines": {
-        "node": ">= 6"
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/pkg-types": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz",
-      "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==",
-      "dev": true,
-      "license": "MIT",
+    "node_modules/opentelemetry-instrumentation-fetch-node/node_modules/import-in-the-middle": {
+      "version": "1.7.1",
+      "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.7.1.tgz",
+      "integrity": "sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==",
+      "license": "Apache-2.0",
+      "optional": true,
       "dependencies": {
-        "confbox": "^0.1.7",
-        "mlly": "^1.7.1",
-        "pathe": "^1.1.2"
+        "acorn": "^8.8.2",
+        "acorn-import-assertions": "^1.9.0",
+        "cjs-module-lexer": "^1.2.2",
+        "module-details-from-path": "^1.0.3"
       }
     },
-    "node_modules/pluralize": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
-      "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+    "node_modules/optionator": {
+      "version": "0.9.4",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+      "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "deep-is": "^0.1.3",
+        "fast-levenshtein": "^2.0.6",
+        "levn": "^0.4.1",
+        "prelude-ls": "^1.2.1",
+        "type-check": "^0.4.0",
+        "word-wrap": "^1.2.5"
+      },
       "engines": {
-        "node": ">=4"
+        "node": ">= 0.8.0"
       }
     },
-    "node_modules/portfinder": {
-      "version": "1.0.32",
-      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz",
-      "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==",
+    "node_modules/p-limit": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+      "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "async": "^2.6.4",
-        "debug": "^3.2.7",
-        "mkdirp": "^0.5.6"
+        "yocto-queue": "^1.0.0"
       },
       "engines": {
-        "node": ">= 0.12.0"
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/portfinder/node_modules/async": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
-      "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+    "node_modules/p-locate": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+      "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "lodash": "^4.17.14"
+        "p-limit": "^4.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/portfinder/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+    "node_modules/p-try": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "ms": "^2.1.1"
+      "engines": {
+        "node": ">=6"
       }
     },
-    "node_modules/postcss": {
-      "version": "8.4.41",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
-      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/postcss/"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/postcss"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
+    "node_modules/pac-proxy-agent": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz",
+      "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==",
       "license": "MIT",
       "dependencies": {
-        "nanoid": "^3.3.7",
-        "picocolors": "^1.0.1",
-        "source-map-js": "^1.2.0"
+        "@tootallnate/quickjs-emscripten": "^0.23.0",
+        "agent-base": "^7.0.2",
+        "debug": "^4.3.4",
+        "get-uri": "^6.0.1",
+        "http-proxy-agent": "^7.0.0",
+        "https-proxy-agent": "^7.0.5",
+        "pac-resolver": "^7.0.1",
+        "socks-proxy-agent": "^8.0.4"
       },
       "engines": {
-        "node": "^10 || ^12 || >=14"
+        "node": ">= 14"
       }
     },
-    "node_modules/postcss-calc": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.1.tgz",
-      "integrity": "sha512-pp1Z3FxtxA+xHAoWXcOXgnBN1WPu4ZiJ5LWGjKyf9MMreagAsaTUtnqFK1y1sHhyJddAkYTPu6XSuLgb3oYCjw==",
-      "dev": true,
+    "node_modules/pac-resolver": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz",
+      "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==",
       "license": "MIT",
       "dependencies": {
-        "postcss-selector-parser": "^6.1.1",
-        "postcss-value-parser": "^4.2.0"
+        "degenerator": "^5.0.0",
+        "netmask": "^2.0.2"
       },
       "engines": {
-        "node": "^18.12 || ^20.9 || >=22.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.4.38"
+        "node": ">= 14"
       }
     },
-    "node_modules/postcss-calc/node_modules/postcss-selector-parser": {
-      "version": "6.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
-      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+    "node_modules/package-json-from-dist": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
+      "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "cssesc": "^3.0.0",
-        "util-deprecate": "^1.0.2"
-      },
-      "engines": {
-        "node": ">=4"
-      }
+      "license": "BlueOak-1.0.0"
     },
-    "node_modules/postcss-colormin": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz",
-      "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==",
+    "node_modules/parent-module": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.3",
-        "caniuse-api": "^3.0.0",
-        "colord": "^2.9.3",
-        "postcss-value-parser": "^4.2.0"
+        "callsites": "^3.0.0"
       },
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+        "node": ">=6"
       }
     },
-    "node_modules/postcss-convert-values": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.3.tgz",
-      "integrity": "sha512-yJhocjCs2SQer0uZ9lXTMOwDowbxvhwFVrZeS6NPEij/XXthl73ggUmfwVvJM+Vaj5gtCKJV1jiUu4IhAUkX/Q==",
+    "node_modules/parse-git-config": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/parse-git-config/-/parse-git-config-3.0.0.tgz",
+      "integrity": "sha512-wXoQGL1D+2COYWCD35/xbiKma1Z15xvZL8cI25wvxzled58V51SJM04Urt/uznS900iQor7QO04SgdfT/XlbuA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.3",
-        "postcss-value-parser": "^4.2.0"
+        "git-config-path": "^2.0.0",
+        "ini": "^1.3.5"
       },
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+        "node": ">=8"
       }
     },
-    "node_modules/postcss-discard-comments": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.2.tgz",
-      "integrity": "sha512-/Hje9Ls1IYcB9duELO/AyDUJI6aQVY3h5Rj1ziXgaLYCTi1iVBLnjg/TS0D6NszR/kDG6I86OwLmAYe+bvJjiQ==",
+    "node_modules/parse-gitignore": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-2.0.0.tgz",
+      "integrity": "sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "postcss-selector-parser": "^6.1.1"
-      },
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+        "node": ">=14"
       }
     },
-    "node_modules/postcss-discard-comments/node_modules/postcss-selector-parser": {
-      "version": "6.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
-      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+    "node_modules/parse-imports": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.1.tgz",
+      "integrity": "sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==",
       "dev": true,
-      "license": "MIT",
+      "license": "Apache-2.0",
       "dependencies": {
-        "cssesc": "^3.0.0",
-        "util-deprecate": "^1.0.2"
+        "es-module-lexer": "^1.5.3",
+        "slashes": "^3.0.12"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">= 18"
       }
     },
-    "node_modules/postcss-discard-duplicates": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz",
-      "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==",
+    "node_modules/parse-json": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+      "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
       "dev": true,
       "license": "MIT",
+      "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"
+      },
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+        "node": ">=8"
       },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/postcss-discard-empty": {
+    "node_modules/parse-path": {
       "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz",
-      "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==",
+      "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz",
+      "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+      "dependencies": {
+        "protocols": "^2.0.0"
       }
     },
-    "node_modules/postcss-discard-overridden": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz",
-      "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==",
+    "node_modules/parse-url": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz",
+      "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+      "dependencies": {
+        "parse-path": "^7.0.0"
       }
     },
-    "node_modules/postcss-import": {
-      "version": "15.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
-      "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
-      "dev": true,
+    "node_modules/parse5": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+      "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
       "license": "MIT",
       "dependencies": {
-        "postcss-value-parser": "^4.0.0",
-        "read-cache": "^1.0.0",
-        "resolve": "^1.1.7"
-      },
-      "engines": {
-        "node": ">=14.0.0"
+        "entities": "^4.4.0"
       },
-      "peerDependencies": {
-        "postcss": "^8.0.0"
+      "funding": {
+        "url": "https://github.com/inikulin/parse5?sponsor=1"
       }
     },
-    "node_modules/postcss-js": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
-      "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+    "node_modules/parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "camelcase-css": "^2.0.1"
-      },
       "engines": {
-        "node": "^12 || ^14 || >= 16"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/postcss/"
-      },
-      "peerDependencies": {
-        "postcss": "^8.4.21"
+        "node": ">= 0.8"
       }
     },
-    "node_modules/postcss-load-config": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
-      "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+    "node_modules/path-exists": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+      "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
       "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/postcss/"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
       "license": "MIT",
-      "dependencies": {
-        "lilconfig": "^3.0.0",
-        "yaml": "^2.3.4"
-      },
       "engines": {
-        "node": ">= 14"
-      },
-      "peerDependencies": {
-        "postcss": ">=8.0.9",
-        "ts-node": ">=9.0.0"
-      },
-      "peerDependenciesMeta": {
-        "postcss": {
-          "optional": true
-        },
-        "ts-node": {
-          "optional": true
-        }
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
       }
     },
-    "node_modules/postcss-merge-longhand": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.3.tgz",
-      "integrity": "sha512-8waYomFxshdv6M9Em3QRM9MettRLDRcH2JQi2l0Z1KlYD/vhal3gbkeSES0NuACXOlZBB0V/B0AseHZaklzWOA==",
+    "node_modules/path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "postcss-value-parser": "^4.2.0",
-        "stylehacks": "^7.0.3"
-      },
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/postcss-merge-rules": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.3.tgz",
-      "integrity": "sha512-2eSas2p3voPxNfdI5sQrvIkMaeUHpVc3EezgVs18hz/wRTQAC9U99tp9j3W5Jx9/L3qHkEDvizEx/LdnmumIvQ==",
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "browserslist": "^4.23.3",
-        "caniuse-api": "^3.0.0",
-        "cssnano-utils": "^5.0.0",
-        "postcss-selector-parser": "^6.1.1"
-      },
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+        "node": ">=8"
       }
     },
-    "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": {
-      "version": "6.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
-      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "license": "MIT"
+    },
+    "node_modules/path-scurry": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
       "dev": true,
-      "license": "MIT",
+      "license": "BlueOak-1.0.0",
       "dependencies": {
-        "cssesc": "^3.0.0",
-        "util-deprecate": "^1.0.2"
+        "lru-cache": "^10.2.0",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=16 || 14 >=14.18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/postcss-minify-font-values": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz",
-      "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==",
+    "node_modules/path-scurry/node_modules/lru-cache": {
+      "version": "10.4.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/path-to-regexp": {
+      "version": "6.2.2",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz",
+      "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/path-type": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
+      "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "postcss-value-parser": "^4.2.0"
-      },
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+        "node": ">=12"
       },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/postcss-minify-gradients": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz",
-      "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==",
+    "node_modules/pathe": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
+      "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/pathval": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz",
+      "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "colord": "^2.9.3",
-        "cssnano-utils": "^5.0.0",
-        "postcss-value-parser": "^4.2.0"
-      },
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+        "node": ">= 14.16"
       }
     },
-    "node_modules/postcss-minify-params": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz",
-      "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==",
+    "node_modules/pend": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+      "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
+      "license": "MIT"
+    },
+    "node_modules/perfect-debounce": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+      "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
       "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/pg-int8": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
+      "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=4.0.0"
+      }
+    },
+    "node_modules/pg-protocol": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz",
+      "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==",
+      "license": "MIT"
+    },
+    "node_modules/pg-types": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
+      "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.3",
-        "cssnano-utils": "^5.0.0",
-        "postcss-value-parser": "^4.2.0"
+        "pg-int8": "1.0.1",
+        "postgres-array": "~2.0.0",
+        "postgres-bytea": "~1.0.0",
+        "postgres-date": "~1.0.4",
+        "postgres-interval": "^1.1.0"
       },
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+        "node": ">=4"
+      }
+    },
+    "node_modules/picocolors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+      "license": "ISC"
+    },
+    "node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
       },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
       }
     },
-    "node_modules/postcss-minify-selectors": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.3.tgz",
-      "integrity": "sha512-SxTgUQSgBk6wEqzQZKEv1xQYIp9UBju6no9q+npohzSdhuSICQdkqmD1UMKkZWItS3olJSJMDDEY9WOJ5oGJew==",
+    "node_modules/pify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/pirates": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+      "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/pkg-types": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz",
+      "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "cssesc": "^3.0.0",
-        "postcss-selector-parser": "^6.1.1"
-      },
+        "confbox": "^0.1.7",
+        "mlly": "^1.7.1",
+        "pathe": "^1.1.2"
+      }
+    },
+    "node_modules/pluralize": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+      "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+      "dev": true,
+      "license": "MIT",
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+        "node": ">=4"
       }
     },
-    "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": {
-      "version": "6.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
-      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+    "node_modules/portfinder": {
+      "version": "1.0.32",
+      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz",
+      "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "cssesc": "^3.0.0",
-        "util-deprecate": "^1.0.2"
+        "async": "^2.6.4",
+        "debug": "^3.2.7",
+        "mkdirp": "^0.5.6"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">= 0.12.0"
       }
     },
-    "node_modules/postcss-nested": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
-      "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+    "node_modules/portfinder/node_modules/async": {
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+      "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.14"
+      }
+    },
+    "node_modules/portfinder/node_modules/debug": {
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
       "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ms": "^2.1.1"
+      }
+    },
+    "node_modules/postcss": {
+      "version": "8.4.41",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
+      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
       "funding": [
         {
           "type": "opencollective",
           "url": "https://opencollective.com/postcss/"
         },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
         {
           "type": "github",
           "url": "https://github.com/sponsors/ai"
@@ -13760,16 +13206,32 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "postcss-selector-parser": "^6.1.1"
+        "nanoid": "^3.3.7",
+        "picocolors": "^1.0.1",
+        "source-map-js": "^1.2.0"
       },
       "engines": {
-        "node": ">=12.0"
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/postcss-calc": {
+      "version": "10.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-10.0.2.tgz",
+      "integrity": "sha512-DT/Wwm6fCKgpYVI7ZEWuPJ4az8hiEHtCUeYjZXqU7Ou4QqYh1Df2yCQ7Ca6N7xqKPFkxN3fhf+u9KSoOCJNAjg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "postcss-selector-parser": "^6.1.2",
+        "postcss-value-parser": "^4.2.0"
+      },
+      "engines": {
+        "node": "^18.12 || ^20.9 || >=22.0"
       },
       "peerDependencies": {
-        "postcss": "^8.2.14"
+        "postcss": "^8.4.38"
       }
     },
-    "node_modules/postcss-nested/node_modules/postcss-selector-parser": {
+    "node_modules/postcss-calc/node_modules/postcss-selector-parser": {
       "version": "6.1.2",
       "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
       "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
@@ -13783,81 +13245,59 @@
         "node": ">=4"
       }
     },
-    "node_modules/postcss-nesting": {
-      "version": "12.1.5",
-      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.5.tgz",
-      "integrity": "sha512-N1NgI1PDCiAGWPTYrwqm8wpjv0bgDmkYHH72pNsqTCv9CObxjxftdYu6AKtGN+pnJa7FQjMm3v4sp8QJbFsYdQ==",
+    "node_modules/postcss-colormin": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-7.0.2.tgz",
+      "integrity": "sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==",
       "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/csstools"
-        },
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/csstools"
-        }
-      ],
-      "license": "MIT-0",
+      "license": "MIT",
       "dependencies": {
-        "@csstools/selector-resolve-nested": "^1.1.0",
-        "@csstools/selector-specificity": "^3.1.1",
-        "postcss-selector-parser": "^6.1.0"
+        "browserslist": "^4.23.3",
+        "caniuse-api": "^3.0.0",
+        "colord": "^2.9.3",
+        "postcss-value-parser": "^4.2.0"
       },
       "engines": {
-        "node": "^14 || ^16 || >=18"
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
       },
       "peerDependencies": {
-        "postcss": "^8.4"
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-1.1.0.tgz",
-      "integrity": "sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==",
+    "node_modules/postcss-convert-values": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.3.tgz",
+      "integrity": "sha512-yJhocjCs2SQer0uZ9lXTMOwDowbxvhwFVrZeS6NPEij/XXthl73ggUmfwVvJM+Vaj5gtCKJV1jiUu4IhAUkX/Q==",
       "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/csstools"
-        },
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/csstools"
-        }
-      ],
-      "license": "MIT-0",
+      "license": "MIT",
+      "dependencies": {
+        "browserslist": "^4.23.3",
+        "postcss-value-parser": "^4.2.0"
+      },
       "engines": {
-        "node": "^14 || ^16 || >=18"
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
       },
       "peerDependencies": {
-        "postcss-selector-parser": "^6.0.13"
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz",
-      "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==",
+    "node_modules/postcss-discard-comments": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.2.tgz",
+      "integrity": "sha512-/Hje9Ls1IYcB9duELO/AyDUJI6aQVY3h5Rj1ziXgaLYCTi1iVBLnjg/TS0D6NszR/kDG6I86OwLmAYe+bvJjiQ==",
       "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/csstools"
-        },
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/csstools"
-        }
-      ],
-      "license": "MIT-0",
+      "license": "MIT",
+      "dependencies": {
+        "postcss-selector-parser": "^6.1.1"
+      },
       "engines": {
-        "node": "^14 || ^16 || >=18"
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
       },
       "peerDependencies": {
-        "postcss-selector-parser": "^6.0.13"
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/postcss-nesting/node_modules/postcss-selector-parser": {
+    "node_modules/postcss-discard-comments/node_modules/postcss-selector-parser": {
       "version": "6.1.2",
       "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
       "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
@@ -13871,10 +13311,10 @@
         "node": ">=4"
       }
     },
-    "node_modules/postcss-normalize-charset": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz",
-      "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==",
+    "node_modules/postcss-discard-duplicates": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-7.0.1.tgz",
+      "integrity": "sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -13884,15 +13324,12 @@
         "postcss": "^8.4.31"
       }
     },
-    "node_modules/postcss-normalize-display-values": {
+    "node_modules/postcss-discard-empty": {
       "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz",
-      "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==",
+      "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz",
+      "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "postcss-value-parser": "^4.2.0"
-      },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
       },
@@ -13900,15 +13337,12 @@
         "postcss": "^8.4.31"
       }
     },
-    "node_modules/postcss-normalize-positions": {
+    "node_modules/postcss-discard-overridden": {
       "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz",
-      "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==",
+      "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-7.0.0.tgz",
+      "integrity": "sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "postcss-value-parser": "^4.2.0"
-      },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
       },
@@ -13916,63 +13350,89 @@
         "postcss": "^8.4.31"
       }
     },
-    "node_modules/postcss-normalize-repeat-style": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz",
-      "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==",
+    "node_modules/postcss-import": {
+      "version": "15.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+      "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "postcss-value-parser": "^4.2.0"
+        "postcss-value-parser": "^4.0.0",
+        "read-cache": "^1.0.0",
+        "resolve": "^1.1.7"
       },
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+        "node": ">=14.0.0"
       },
       "peerDependencies": {
-        "postcss": "^8.4.31"
+        "postcss": "^8.0.0"
       }
     },
-    "node_modules/postcss-normalize-string": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz",
-      "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==",
+    "node_modules/postcss-js": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+      "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "postcss-value-parser": "^4.2.0"
+        "camelcase-css": "^2.0.1"
       },
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+        "node": "^12 || ^14 || >= 16"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
       },
       "peerDependencies": {
-        "postcss": "^8.4.31"
+        "postcss": "^8.4.21"
       }
     },
-    "node_modules/postcss-normalize-timing-functions": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz",
-      "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==",
+    "node_modules/postcss-load-config": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+      "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
       "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
       "license": "MIT",
       "dependencies": {
-        "postcss-value-parser": "^4.2.0"
+        "lilconfig": "^3.0.0",
+        "yaml": "^2.3.4"
       },
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+        "node": ">= 14"
       },
       "peerDependencies": {
-        "postcss": "^8.4.31"
+        "postcss": ">=8.0.9",
+        "ts-node": ">=9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "postcss": {
+          "optional": true
+        },
+        "ts-node": {
+          "optional": true
+        }
       }
     },
-    "node_modules/postcss-normalize-unicode": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz",
-      "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==",
+    "node_modules/postcss-merge-longhand": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.3.tgz",
+      "integrity": "sha512-8waYomFxshdv6M9Em3QRM9MettRLDRcH2JQi2l0Z1KlYD/vhal3gbkeSES0NuACXOlZBB0V/B0AseHZaklzWOA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.3",
-        "postcss-value-parser": "^4.2.0"
+        "postcss-value-parser": "^4.2.0",
+        "stylehacks": "^7.0.3"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -13981,14 +13441,17 @@
         "postcss": "^8.4.31"
       }
     },
-    "node_modules/postcss-normalize-url": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz",
-      "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==",
+    "node_modules/postcss-merge-rules": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.3.tgz",
+      "integrity": "sha512-2eSas2p3voPxNfdI5sQrvIkMaeUHpVc3EezgVs18hz/wRTQAC9U99tp9j3W5Jx9/L3qHkEDvizEx/LdnmumIvQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "postcss-value-parser": "^4.2.0"
+        "browserslist": "^4.23.3",
+        "caniuse-api": "^3.0.0",
+        "cssnano-utils": "^5.0.0",
+        "postcss-selector-parser": "^6.1.1"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -13997,10 +13460,24 @@
         "postcss": "^8.4.31"
       }
     },
-    "node_modules/postcss-normalize-whitespace": {
+    "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/postcss-minify-font-values": {
       "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz",
-      "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==",
+      "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-7.0.0.tgz",
+      "integrity": "sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -14013,13 +13490,14 @@
         "postcss": "^8.4.31"
       }
     },
-    "node_modules/postcss-ordered-values": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz",
-      "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==",
+    "node_modules/postcss-minify-gradients": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-7.0.0.tgz",
+      "integrity": "sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
+        "colord": "^2.9.3",
         "cssnano-utils": "^5.0.0",
         "postcss-value-parser": "^4.2.0"
       },
@@ -14030,15 +13508,16 @@
         "postcss": "^8.4.31"
       }
     },
-    "node_modules/postcss-reduce-initial": {
+    "node_modules/postcss-minify-params": {
       "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz",
-      "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==",
+      "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-7.0.2.tgz",
+      "integrity": "sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "browserslist": "^4.23.3",
-        "caniuse-api": "^3.0.0"
+        "cssnano-utils": "^5.0.0",
+        "postcss-value-parser": "^4.2.0"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -14047,14 +13526,15 @@
         "postcss": "^8.4.31"
       }
     },
-    "node_modules/postcss-reduce-transforms": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz",
-      "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==",
+    "node_modules/postcss-minify-selectors": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.3.tgz",
+      "integrity": "sha512-SxTgUQSgBk6wEqzQZKEv1xQYIp9UBju6no9q+npohzSdhuSICQdkqmD1UMKkZWItS3olJSJMDDEY9WOJ5oGJew==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "postcss-value-parser": "^4.2.0"
+        "cssesc": "^3.0.0",
+        "postcss-selector-parser": "^6.1.1"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -14063,54 +13543,50 @@
         "postcss": "^8.4.31"
       }
     },
-    "node_modules/postcss-safe-parser": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
-      "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
+    "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">=12.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/postcss/"
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
       },
-      "peerDependencies": {
-        "postcss": "^8.3.3"
+      "engines": {
+        "node": ">=4"
       }
     },
-    "node_modules/postcss-scss": {
-      "version": "4.0.9",
-      "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz",
-      "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==",
+    "node_modules/postcss-nested": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+      "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
       "dev": true,
       "funding": [
         {
           "type": "opencollective",
           "url": "https://opencollective.com/postcss/"
         },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/postcss-scss"
-        },
         {
           "type": "github",
           "url": "https://github.com/sponsors/ai"
         }
       ],
       "license": "MIT",
+      "dependencies": {
+        "postcss-selector-parser": "^6.1.1"
+      },
       "engines": {
         "node": ">=12.0"
       },
       "peerDependencies": {
-        "postcss": "^8.4.29"
+        "postcss": "^8.2.14"
       }
     },
-    "node_modules/postcss-selector-parser": {
-      "version": "6.0.10",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
-      "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
+    "node_modules/postcss-nested/node_modules/postcss-selector-parser": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -14121,60 +13597,81 @@
         "node": ">=4"
       }
     },
-    "node_modules/postcss-styl": {
-      "version": "0.12.3",
-      "resolved": "https://registry.npmjs.org/postcss-styl/-/postcss-styl-0.12.3.tgz",
-      "integrity": "sha512-8I7Cd8sxiEITIp32xBK4K/Aj1ukX6vuWnx8oY/oAH35NfQI4OZaY5nd68Yx8HeN5S49uhQ6DL0rNk0ZBu/TaLg==",
+    "node_modules/postcss-nesting": {
+      "version": "12.1.5",
+      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.5.tgz",
+      "integrity": "sha512-N1NgI1PDCiAGWPTYrwqm8wpjv0bgDmkYHH72pNsqTCv9CObxjxftdYu6AKtGN+pnJa7FQjMm3v4sp8QJbFsYdQ==",
       "dev": true,
-      "license": "MIT",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
+      "license": "MIT-0",
       "dependencies": {
-        "debug": "^4.1.1",
-        "fast-diff": "^1.2.0",
-        "lodash.sortedlastindex": "^4.1.0",
-        "postcss": "^7.0.27 || ^8.0.0",
-        "stylus": "^0.57.0"
+        "@csstools/selector-resolve-nested": "^1.1.0",
+        "@csstools/selector-specificity": "^3.1.1",
+        "postcss-selector-parser": "^6.1.0"
       },
       "engines": {
-        "node": "^8.10.0 || ^10.13.0 || ^11.10.1 || >=12.13.0"
+        "node": "^14 || ^16 || >=18"
       },
-      "funding": {
-        "url": "https://opencollective.com/stylus"
+      "peerDependencies": {
+        "postcss": "^8.4"
       }
     },
-    "node_modules/postcss-svgo": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz",
-      "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==",
+    "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-1.1.0.tgz",
+      "integrity": "sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "postcss-value-parser": "^4.2.0",
-        "svgo": "^3.3.2"
-      },
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
+      "license": "MIT-0",
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >= 18"
+        "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "postcss": "^8.4.31"
+        "postcss-selector-parser": "^6.0.13"
       }
     },
-    "node_modules/postcss-unique-selectors": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.2.tgz",
-      "integrity": "sha512-CjSam+7Vf8cflJQsHrMS0P2hmy9u0+n/P001kb5eAszLmhjMqrt/i5AqQuNFihhViwDvEAezqTmXqaYXL2ugMw==",
+    "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz",
+      "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "postcss-selector-parser": "^6.1.1"
-      },
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/csstools"
+        },
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/csstools"
+        }
+      ],
+      "license": "MIT-0",
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+        "node": "^14 || ^16 || >=18"
       },
       "peerDependencies": {
-        "postcss": "^8.4.31"
+        "postcss-selector-parser": "^6.0.13"
       }
     },
-    "node_modules/postcss-unique-selectors/node_modules/postcss-selector-parser": {
+    "node_modules/postcss-nesting/node_modules/postcss-selector-parser": {
       "version": "6.1.2",
       "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
       "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
@@ -14188,1845 +13685,2084 @@
         "node": ">=4"
       }
     },
-    "node_modules/postcss-value-parser": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
-      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+    "node_modules/postcss-normalize-charset": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-7.0.0.tgz",
+      "integrity": "sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==",
       "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/postcss/node_modules/nanoid": {
-      "version": "3.3.7",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
-      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
-      "license": "MIT",
-      "bin": {
-        "nanoid": "bin/nanoid.cjs"
-      },
-      "engines": {
-        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-      }
-    },
-    "node_modules/postgres-array": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
-      "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/postgres-bytea": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
-      "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==",
       "license": "MIT",
       "engines": {
-        "node": ">=0.10.0"
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/postgres-date": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
-      "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==",
+    "node_modules/postcss-normalize-display-values": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-7.0.0.tgz",
+      "integrity": "sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==",
+      "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "postcss-value-parser": "^4.2.0"
+      },
       "engines": {
-        "node": ">=0.10.0"
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/postgres-interval": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
-      "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
+    "node_modules/postcss-normalize-positions": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-7.0.0.tgz",
+      "integrity": "sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "xtend": "^4.0.0"
+        "postcss-value-parser": "^4.2.0"
       },
       "engines": {
-        "node": ">=0.10.0"
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/prelude-ls": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
-      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+    "node_modules/postcss-normalize-repeat-style": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-7.0.0.tgz",
+      "integrity": "sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "postcss-value-parser": "^4.2.0"
+      },
       "engines": {
-        "node": ">= 0.8.0"
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/prettier": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
-      "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
+    "node_modules/postcss-normalize-string": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-7.0.0.tgz",
+      "integrity": "sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==",
       "dev": true,
       "license": "MIT",
-      "bin": {
-        "prettier": "bin/prettier.cjs"
+      "dependencies": {
+        "postcss-value-parser": "^4.2.0"
       },
       "engines": {
-        "node": ">=14"
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
       },
-      "funding": {
-        "url": "https://github.com/prettier/prettier?sponsor=1"
+      "peerDependencies": {
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/prettier-linter-helpers": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
-      "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+    "node_modules/postcss-normalize-timing-functions": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-7.0.0.tgz",
+      "integrity": "sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "fast-diff": "^1.1.2"
+        "postcss-value-parser": "^4.2.0"
       },
       "engines": {
-        "node": ">=6.0.0"
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/pretty-bytes": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz",
-      "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==",
+    "node_modules/postcss-normalize-unicode": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-7.0.2.tgz",
+      "integrity": "sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "browserslist": "^4.23.3",
+        "postcss-value-parser": "^4.2.0"
+      },
       "engines": {
-        "node": "^14.13.1 || >=16.0.0"
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "peerDependencies": {
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/process": {
-      "version": "0.11.10",
-      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
-      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
+    "node_modules/postcss-normalize-url": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-7.0.0.tgz",
+      "integrity": "sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "postcss-value-parser": "^4.2.0"
+      },
       "engines": {
-        "node": ">= 0.6.0"
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/process-nextick-args": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+    "node_modules/postcss-normalize-whitespace": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-7.0.0.tgz",
+      "integrity": "sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==",
       "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/progress": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
-      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
       "license": "MIT",
+      "dependencies": {
+        "postcss-value-parser": "^4.2.0"
+      },
       "engines": {
-        "node": ">=0.4.0"
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/prompts": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
-      "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
+    "node_modules/postcss-ordered-values": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-7.0.1.tgz",
+      "integrity": "sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "kleur": "^3.0.3",
-        "sisteransi": "^1.0.5"
+        "cssnano-utils": "^5.0.0",
+        "postcss-value-parser": "^4.2.0"
       },
       "engines": {
-        "node": ">= 6"
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/proto-list": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
-      "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/protocols": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz",
-      "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==",
+    "node_modules/postcss-reduce-initial": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-7.0.2.tgz",
+      "integrity": "sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==",
       "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/proxy-agent": {
-      "version": "6.4.0",
-      "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz",
-      "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==",
       "license": "MIT",
       "dependencies": {
-        "agent-base": "^7.0.2",
-        "debug": "^4.3.4",
-        "http-proxy-agent": "^7.0.1",
-        "https-proxy-agent": "^7.0.3",
-        "lru-cache": "^7.14.1",
-        "pac-proxy-agent": "^7.0.1",
-        "proxy-from-env": "^1.1.0",
-        "socks-proxy-agent": "^8.0.2"
+        "browserslist": "^4.23.3",
+        "caniuse-api": "^3.0.0"
       },
       "engines": {
-        "node": ">= 14"
-      }
-    },
-    "node_modules/proxy-agent/node_modules/lru-cache": {
-      "version": "7.18.3",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
-      "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
-      "license": "ISC",
-      "engines": {
-        "node": ">=12"
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/proxy-from-env": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
-      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
-      "license": "MIT"
-    },
-    "node_modules/psl": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
-      "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
-      "license": "MIT"
-    },
-    "node_modules/pump": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
-      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+    "node_modules/postcss-reduce-transforms": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-7.0.0.tgz",
+      "integrity": "sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "end-of-stream": "^1.1.0",
-        "once": "^1.3.1"
+        "postcss-value-parser": "^4.2.0"
+      },
+      "engines": {
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/punycode": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
-      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+    "node_modules/postcss-safe-parser": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
+      "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
+      "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/puppeteer-core": {
-      "version": "23.2.0",
-      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.2.0.tgz",
-      "integrity": "sha512-OFyPp2oolGSesx6ZrpmorE5tCaCKY1Z5e/h8f6sB0NpiezenB72jdWBdOrvBO/bUXyq14XyGJsDRUsv0ZOPdZA==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@puppeteer/browsers": "2.3.1",
-        "chromium-bidi": "0.6.4",
-        "debug": "^4.3.6",
-        "devtools-protocol": "0.0.1330662",
-        "typed-query-selector": "^2.12.0",
-        "ws": "^8.18.0"
+        "node": ">=12.0"
       },
-      "engines": {
-        "node": ">=18"
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      },
+      "peerDependencies": {
+        "postcss": "^8.3.3"
       }
     },
-    "node_modules/querystringify": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
-      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
-      "license": "MIT"
-    },
-    "node_modules/queue-microtask": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+    "node_modules/postcss-scss": {
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz",
+      "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==",
       "dev": true,
       "funding": [
         {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
         },
         {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss-scss"
         },
         {
-          "type": "consulting",
-          "url": "https://feross.org/support"
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
         }
       ],
-      "license": "MIT"
-    },
-    "node_modules/queue-tick": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
-      "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==",
-      "license": "MIT"
-    },
-    "node_modules/radix3": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz",
-      "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/randombytes": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
-      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
-      "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "safe-buffer": "^5.1.0"
+      "engines": {
+        "node": ">=12.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.29"
       }
     },
-    "node_modules/range-parser": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
-      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+    "node_modules/postcss-selector-parser": {
+      "version": "6.0.10",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz",
+      "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
       "engines": {
-        "node": ">= 0.6"
+        "node": ">=4"
       }
     },
-    "node_modules/rc9": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz",
-      "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==",
+    "node_modules/postcss-styl": {
+      "version": "0.12.3",
+      "resolved": "https://registry.npmjs.org/postcss-styl/-/postcss-styl-0.12.3.tgz",
+      "integrity": "sha512-8I7Cd8sxiEITIp32xBK4K/Aj1ukX6vuWnx8oY/oAH35NfQI4OZaY5nd68Yx8HeN5S49uhQ6DL0rNk0ZBu/TaLg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "defu": "^6.1.4",
-        "destr": "^2.0.3"
-      }
-    },
-    "node_modules/read-cache": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
-      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "pify": "^2.3.0"
-      }
-    },
-    "node_modules/read-pkg": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
-      "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/normalize-package-data": "^2.4.0",
-        "normalize-package-data": "^2.5.0",
-        "parse-json": "^5.0.0",
-        "type-fest": "^0.6.0"
+        "debug": "^4.1.1",
+        "fast-diff": "^1.2.0",
+        "lodash.sortedlastindex": "^4.1.0",
+        "postcss": "^7.0.27 || ^8.0.0",
+        "stylus": "^0.57.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": "^8.10.0 || ^10.13.0 || ^11.10.1 || >=12.13.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/stylus"
       }
     },
-    "node_modules/read-pkg-up": {
+    "node_modules/postcss-svgo": {
       "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
-      "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+      "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-7.0.1.tgz",
+      "integrity": "sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "find-up": "^4.1.0",
-        "read-pkg": "^5.2.0",
-        "type-fest": "^0.8.1"
+        "postcss-value-parser": "^4.2.0",
+        "svgo": "^3.3.2"
       },
       "engines": {
-        "node": ">=8"
+        "node": "^18.12.0 || ^20.9.0 || >= 18"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "peerDependencies": {
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/read-pkg-up/node_modules/find-up": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+    "node_modules/postcss-unique-selectors": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.2.tgz",
+      "integrity": "sha512-CjSam+7Vf8cflJQsHrMS0P2hmy9u0+n/P001kb5eAszLmhjMqrt/i5AqQuNFihhViwDvEAezqTmXqaYXL2ugMw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "locate-path": "^5.0.0",
-        "path-exists": "^4.0.0"
+        "postcss-selector-parser": "^6.1.1"
       },
       "engines": {
-        "node": ">=8"
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
       }
     },
-    "node_modules/read-pkg-up/node_modules/locate-path": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+    "node_modules/postcss-unique-selectors/node_modules/postcss-selector-parser": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "p-locate": "^4.1.0"
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=4"
       }
     },
-    "node_modules/read-pkg-up/node_modules/p-limit": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+    "node_modules/postcss-value-parser": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
       "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/postcss/node_modules/nanoid": {
+      "version": "3.3.7",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
       "license": "MIT",
-      "dependencies": {
-        "p-try": "^2.0.0"
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
       },
       "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
       }
     },
-    "node_modules/read-pkg-up/node_modules/p-locate": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-      "dev": true,
+    "node_modules/postgres-array": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
+      "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==",
       "license": "MIT",
-      "dependencies": {
-        "p-limit": "^2.2.0"
-      },
       "engines": {
-        "node": ">=8"
+        "node": ">=4"
       }
     },
-    "node_modules/read-pkg-up/node_modules/type-fest": {
-      "version": "0.8.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
-      "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
-      "dev": true,
-      "license": "(MIT OR CC0-1.0)",
+    "node_modules/postgres-bytea": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
+      "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==",
+      "license": "MIT",
       "engines": {
-        "node": ">=8"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/read-pkg/node_modules/type-fest": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
-      "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
-      "dev": true,
-      "license": "(MIT OR CC0-1.0)",
+    "node_modules/postgres-date": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
+      "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==",
+      "license": "MIT",
       "engines": {
-        "node": ">=8"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/readable-stream": {
-      "version": "4.5.2",
-      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
-      "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
-      "dev": true,
+    "node_modules/postgres-interval": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
+      "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
       "license": "MIT",
       "dependencies": {
-        "abort-controller": "^3.0.0",
-        "buffer": "^6.0.3",
-        "events": "^3.3.0",
-        "process": "^0.11.10",
-        "string_decoder": "^1.3.0"
+        "xtend": "^4.0.0"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/readdir-glob": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz",
-      "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
+    "node_modules/prelude-ls": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
       "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "minimatch": "^5.1.0"
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "node_modules/readdir-glob/node_modules/minimatch": {
-      "version": "5.1.6",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
-      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+    "node_modules/prettier": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
+      "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
       "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
+      "license": "MIT",
+      "bin": {
+        "prettier": "bin/prettier.cjs"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
       }
     },
-    "node_modules/readdirp": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
-      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+    "node_modules/prettier-linter-helpers": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+      "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "picomatch": "^2.2.1"
+        "fast-diff": "^1.1.2"
       },
       "engines": {
-        "node": ">=8.10.0"
+        "node": ">=6.0.0"
       }
     },
-    "node_modules/redis-errors": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz",
-      "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==",
+    "node_modules/pretty-bytes": {
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz",
+      "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=4"
+        "node": "^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/redis-parser": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz",
-      "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==",
+    "node_modules/process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+      "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "redis-errors": "^1.0.0"
-      },
       "engines": {
-        "node": ">=4"
+        "node": ">= 0.6.0"
       }
     },
-    "node_modules/refa": {
-      "version": "0.12.1",
-      "resolved": "https://registry.npmjs.org/refa/-/refa-0.12.1.tgz",
-      "integrity": "sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==",
+    "node_modules/process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
       "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/progress": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
       "license": "MIT",
-      "dependencies": {
-        "@eslint-community/regexpp": "^4.8.0"
-      },
       "engines": {
-        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+        "node": ">=0.4.0"
       }
     },
-    "node_modules/regexp-ast-analysis": {
-      "version": "0.7.1",
-      "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.7.1.tgz",
-      "integrity": "sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint-community/regexpp": "^4.8.0",
-        "refa": "^0.12.1"
-      },
-      "engines": {
-        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
-      }
-    },
-    "node_modules/regexp-tree": {
-      "version": "0.1.27",
-      "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz",
-      "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==",
+    "node_modules/prompts": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+      "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
       "dev": true,
       "license": "MIT",
-      "bin": {
-        "regexp-tree": "bin/regexp-tree"
-      }
-    },
-    "node_modules/regjsparser": {
-      "version": "0.10.0",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz",
-      "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==",
-      "dev": true,
-      "license": "BSD-2-Clause",
       "dependencies": {
-        "jsesc": "~0.5.0"
+        "kleur": "^3.0.3",
+        "sisteransi": "^1.0.5"
       },
-      "bin": {
-        "regjsparser": "bin/parser"
+      "engines": {
+        "node": ">= 6"
       }
     },
-    "node_modules/regjsparser/node_modules/jsesc": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-      "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+    "node_modules/proto-list": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+      "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
       "dev": true,
-      "bin": {
-        "jsesc": "bin/jsesc"
-      }
+      "license": "ISC"
     },
-    "node_modules/replace-in-file": {
-      "version": "6.3.5",
-      "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.5.tgz",
-      "integrity": "sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg==",
+    "node_modules/protocols": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz",
+      "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "chalk": "^4.1.2",
-        "glob": "^7.2.0",
-        "yargs": "^17.2.1"
-      },
-      "bin": {
-        "replace-in-file": "bin/cli.js"
-      },
-      "engines": {
-        "node": ">=10"
-      }
+      "license": "MIT"
     },
-    "node_modules/replace-in-file/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
+    "node_modules/proxy-agent": {
+      "version": "6.4.0",
+      "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz",
+      "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==",
       "license": "MIT",
       "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/replace-in-file/node_modules/glob": {
-      "version": "7.2.3",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
-      "dev": true,
-      "license": "ISC",
-      "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"
+        "agent-base": "^7.0.2",
+        "debug": "^4.3.4",
+        "http-proxy-agent": "^7.0.1",
+        "https-proxy-agent": "^7.0.3",
+        "lru-cache": "^7.14.1",
+        "pac-proxy-agent": "^7.0.1",
+        "proxy-from-env": "^1.1.0",
+        "socks-proxy-agent": "^8.0.2"
       },
       "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "node": ">= 14"
       }
     },
-    "node_modules/replace-in-file/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
+    "node_modules/proxy-agent/node_modules/lru-cache": {
+      "version": "7.18.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+      "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
       "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
       "engines": {
-        "node": "*"
+        "node": ">=12"
       }
     },
-    "node_modules/require-directory": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+    "node_modules/proxy-from-env": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+      "license": "MIT"
+    },
+    "node_modules/psl": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+      "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
+      "license": "MIT"
+    },
+    "node_modules/pump": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
       "license": "MIT",
-      "engines": {
-        "node": ">=0.10.0"
+      "dependencies": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
       }
     },
-    "node_modules/require-from-string": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
-      "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
-      "dev": true,
+    "node_modules/punycode": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
       "license": "MIT",
-      "optional": true,
-      "peer": true,
       "engines": {
-        "node": ">=0.10.0"
+        "node": ">=6"
       }
     },
-    "node_modules/require-in-the-middle": {
-      "version": "7.4.0",
-      "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz",
-      "integrity": "sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==",
-      "license": "MIT",
+    "node_modules/puppeteer-core": {
+      "version": "23.2.0",
+      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.2.0.tgz",
+      "integrity": "sha512-OFyPp2oolGSesx6ZrpmorE5tCaCKY1Z5e/h8f6sB0NpiezenB72jdWBdOrvBO/bUXyq14XyGJsDRUsv0ZOPdZA==",
+      "license": "Apache-2.0",
       "dependencies": {
-        "debug": "^4.3.5",
-        "module-details-from-path": "^1.0.3",
-        "resolve": "^1.22.8"
+        "@puppeteer/browsers": "2.3.1",
+        "chromium-bidi": "0.6.4",
+        "debug": "^4.3.6",
+        "devtools-protocol": "0.0.1330662",
+        "typed-query-selector": "^2.12.0",
+        "ws": "^8.18.0"
       },
       "engines": {
-        "node": ">=8.6.0"
+        "node": ">=18"
       }
     },
-    "node_modules/requires-port": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
-      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+    "node_modules/querystringify": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
       "license": "MIT"
     },
-    "node_modules/resolve": {
-      "version": "1.22.8",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
-      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+    "node_modules/queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/queue-tick": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
+      "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==",
+      "license": "MIT"
+    },
+    "node_modules/radix3": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/radix3/-/radix3-1.1.2.tgz",
+      "integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "is-core-module": "^2.13.0",
-        "path-parse": "^1.0.7",
-        "supports-preserve-symlinks-flag": "^1.0.0"
-      },
-      "bin": {
-        "resolve": "bin/resolve"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "safe-buffer": "^5.1.0"
       }
     },
-    "node_modules/resolve-from": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
-      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+    "node_modules/range-parser": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=4"
+        "node": ">= 0.6"
       }
     },
-    "node_modules/resolve-path": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz",
-      "integrity": "sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==",
+    "node_modules/rc9": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz",
+      "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "http-errors": "~1.6.2",
-        "path-is-absolute": "1.0.1"
-      },
-      "engines": {
-        "node": ">= 0.8"
+        "defu": "^6.1.4",
+        "destr": "^2.0.3"
       }
     },
-    "node_modules/resolve-path/node_modules/depd": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-      "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
+    "node_modules/read-cache": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">= 0.6"
+      "dependencies": {
+        "pify": "^2.3.0"
       }
     },
-    "node_modules/resolve-path/node_modules/http-errors": {
-      "version": "1.6.3",
-      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
-      "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
+    "node_modules/read-pkg": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+      "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "depd": "~1.1.2",
-        "inherits": "2.0.3",
-        "setprototypeof": "1.1.0",
-        "statuses": ">= 1.4.0 < 2"
+        "@types/normalize-package-data": "^2.4.0",
+        "normalize-package-data": "^2.5.0",
+        "parse-json": "^5.0.0",
+        "type-fest": "^0.6.0"
       },
       "engines": {
-        "node": ">= 0.6"
+        "node": ">=8"
       }
     },
-    "node_modules/resolve-path/node_modules/inherits": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-      "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+    "node_modules/read-pkg-up": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+      "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
       "dev": true,
-      "license": "ISC"
+      "license": "MIT",
+      "dependencies": {
+        "find-up": "^4.1.0",
+        "read-pkg": "^5.2.0",
+        "type-fest": "^0.8.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
     },
-    "node_modules/resolve-path/node_modules/setprototypeof": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
-      "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+    "node_modules/read-pkg-up/node_modules/find-up": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
       "dev": true,
-      "license": "ISC"
+      "license": "MIT",
+      "dependencies": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "node_modules/resolve-path/node_modules/statuses": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-      "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
+    "node_modules/read-pkg-up/node_modules/locate-path": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "p-locate": "^4.1.0"
+      },
       "engines": {
-        "node": ">= 0.6"
+        "node": ">=8"
       }
     },
-    "node_modules/resolve-pkg-maps": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
-      "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+    "node_modules/read-pkg-up/node_modules/p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "p-try": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
       "funding": {
-        "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/reusify": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
-      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+    "node_modules/read-pkg-up/node_modules/p-locate": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "p-limit": "^2.2.0"
+      },
       "engines": {
-        "iojs": ">=1.0.0",
-        "node": ">=0.10.0"
+        "node": ">=8"
       }
     },
-    "node_modules/rfdc": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
-      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+    "node_modules/read-pkg-up/node_modules/path-exists": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
     },
-    "node_modules/rimraf": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
-      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
-      "deprecated": "Rimraf versions prior to v4 are no longer supported",
+    "node_modules/read-pkg-up/node_modules/type-fest": {
+      "version": "0.8.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+      "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
       "dev": true,
-      "license": "ISC",
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/read-pkg/node_modules/type-fest": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+      "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+      "dev": true,
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/readable-stream": {
+      "version": "4.5.2",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz",
+      "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "glob": "^7.1.3"
-      },
-      "bin": {
-        "rimraf": "bin.js"
+        "abort-controller": "^3.0.0",
+        "buffer": "^6.0.3",
+        "events": "^3.3.0",
+        "process": "^0.11.10",
+        "string_decoder": "^1.3.0"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
-    "node_modules/rimraf/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+    "node_modules/readdir-glob": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz",
+      "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "minimatch": "^5.1.0"
+      }
+    },
+    "node_modules/readdir-glob/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
+        "balanced-match": "^1.0.0"
       }
     },
-    "node_modules/rimraf/node_modules/glob": {
-      "version": "7.2.3",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
+    "node_modules/readdir-glob/node_modules/minimatch": {
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
       "dev": true,
       "license": "ISC",
       "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"
+        "brace-expansion": "^2.0.1"
       },
       "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "node": ">=10"
       }
     },
-    "node_modules/rimraf/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+    "node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "brace-expansion": "^1.1.7"
+        "picomatch": "^2.2.1"
       },
       "engines": {
-        "node": "*"
+        "node": ">=8.10.0"
       }
     },
-    "node_modules/rollup": {
-      "version": "4.20.0",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz",
-      "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==",
+    "node_modules/redis-errors": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz",
+      "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@types/estree": "1.0.5"
-      },
-      "bin": {
-        "rollup": "dist/bin/rollup"
-      },
       "engines": {
-        "node": ">=18.0.0",
-        "npm": ">=8.0.0"
-      },
-      "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.20.0",
-        "@rollup/rollup-android-arm64": "4.20.0",
-        "@rollup/rollup-darwin-arm64": "4.20.0",
-        "@rollup/rollup-darwin-x64": "4.20.0",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.20.0",
-        "@rollup/rollup-linux-arm-musleabihf": "4.20.0",
-        "@rollup/rollup-linux-arm64-gnu": "4.20.0",
-        "@rollup/rollup-linux-arm64-musl": "4.20.0",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0",
-        "@rollup/rollup-linux-riscv64-gnu": "4.20.0",
-        "@rollup/rollup-linux-s390x-gnu": "4.20.0",
-        "@rollup/rollup-linux-x64-gnu": "4.20.0",
-        "@rollup/rollup-linux-x64-musl": "4.20.0",
-        "@rollup/rollup-win32-arm64-msvc": "4.20.0",
-        "@rollup/rollup-win32-ia32-msvc": "4.20.0",
-        "@rollup/rollup-win32-x64-msvc": "4.20.0",
-        "fsevents": "~2.3.2"
+        "node": ">=4"
       }
     },
-    "node_modules/rollup-plugin-visualizer": {
-      "version": "5.12.0",
-      "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz",
-      "integrity": "sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==",
+    "node_modules/redis-parser": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz",
+      "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "open": "^8.4.0",
-        "picomatch": "^2.3.1",
-        "source-map": "^0.7.4",
-        "yargs": "^17.5.1"
-      },
-      "bin": {
-        "rollup-plugin-visualizer": "dist/bin/cli.js"
+        "redis-errors": "^1.0.0"
       },
       "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "rollup": "2.x || 3.x || 4.x"
-      },
-      "peerDependenciesMeta": {
-        "rollup": {
-          "optional": true
-        }
+        "node": ">=4"
       }
     },
-    "node_modules/rollup-plugin-visualizer/node_modules/source-map": {
-      "version": "0.7.4",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
-      "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+    "node_modules/refa": {
+      "version": "0.12.1",
+      "resolved": "https://registry.npmjs.org/refa/-/refa-0.12.1.tgz",
+      "integrity": "sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==",
       "dev": true,
-      "license": "BSD-3-Clause",
+      "license": "MIT",
+      "dependencies": {
+        "@eslint-community/regexpp": "^4.8.0"
+      },
       "engines": {
-        "node": ">= 8"
+        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
-    "node_modules/rrweb-cssom": {
+    "node_modules/regexp-ast-analysis": {
       "version": "0.7.1",
-      "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
-      "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
-      "license": "MIT"
-    },
-    "node_modules/run-applescript": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
-      "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==",
+      "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.7.1.tgz",
+      "integrity": "sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">=18"
+      "dependencies": {
+        "@eslint-community/regexpp": "^4.8.0",
+        "refa": "^0.12.1"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "engines": {
+        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
-    "node_modules/run-parallel": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
-      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+    "node_modules/regexp-tree": {
+      "version": "0.1.27",
+      "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz",
+      "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==",
       "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
       "license": "MIT",
-      "dependencies": {
-        "queue-microtask": "^1.2.2"
+      "bin": {
+        "regexp-tree": "bin/regexp-tree"
       }
     },
-    "node_modules/runes": {
-      "version": "0.4.3",
-      "resolved": "https://registry.npmjs.org/runes/-/runes-0.4.3.tgz",
-      "integrity": "sha512-K6p9y4ZyL9wPzA+PMDloNQPfoDGTiFYDvdlXznyGKgD10BJpcAosvATKrExRKOrNLgD8E7Um7WGW0lxsnOuNLg==",
-      "license": "MIT",
-      "engines": {
-        "node": ">=4.0.0"
+    "node_modules/regjsparser": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz",
+      "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "jsesc": "~0.5.0"
+      },
+      "bin": {
+        "regjsparser": "bin/parser"
       }
     },
-    "node_modules/safe-buffer": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+    "node_modules/regjsparser/node_modules/jsesc": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+      "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
       "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ],
-      "license": "MIT"
-    },
-    "node_modules/safer-buffer": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-      "license": "MIT"
+      "bin": {
+        "jsesc": "bin/jsesc"
+      }
     },
-    "node_modules/sass": {
-      "version": "1.69.4",
-      "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.4.tgz",
-      "integrity": "sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==",
+    "node_modules/replace-in-file": {
+      "version": "6.3.5",
+      "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.5.tgz",
+      "integrity": "sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "chokidar": ">=3.0.0 <4.0.0",
-        "immutable": "^4.0.0",
-        "source-map-js": ">=0.6.2 <2.0.0"
+        "chalk": "^4.1.2",
+        "glob": "^7.2.0",
+        "yargs": "^17.2.1"
       },
       "bin": {
-        "sass": "sass.js"
+        "replace-in-file": "bin/cli.js"
       },
       "engines": {
-        "node": ">=14.0.0"
+        "node": ">=10"
       }
     },
-    "node_modules/sax": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
-      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+    "node_modules/replace-in-file/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
       "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/saxes": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
-      "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
       "license": "ISC",
       "dependencies": {
-        "xmlchars": "^2.2.0"
+        "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"
       },
       "engines": {
-        "node": ">=v12.22.7"
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/schema-utils": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz",
-      "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==",
-      "dev": true,
+    "node_modules/require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
       "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@types/json-schema": "^7.0.9",
-        "ajv": "^8.9.0",
-        "ajv-formats": "^2.1.1",
-        "ajv-keywords": "^5.1.0"
-      },
       "engines": {
-        "node": ">= 12.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/schema-utils/node_modules/ajv": {
-      "version": "8.17.1",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
-      "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
-      "dev": true,
+    "node_modules/require-in-the-middle": {
+      "version": "7.4.0",
+      "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz",
+      "integrity": "sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==",
       "license": "MIT",
-      "optional": true,
-      "peer": true,
       "dependencies": {
-        "fast-deep-equal": "^3.1.3",
-        "fast-uri": "^3.0.1",
-        "json-schema-traverse": "^1.0.0",
-        "require-from-string": "^2.0.2"
+        "debug": "^4.3.5",
+        "module-details-from-path": "^1.0.3",
+        "resolve": "^1.22.8"
       },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
+      "engines": {
+        "node": ">=8.6.0"
       }
     },
-    "node_modules/schema-utils/node_modules/ajv-keywords": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
-      "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
-      "dev": true,
+    "node_modules/requires-port": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+      "license": "MIT"
+    },
+    "node_modules/resolve": {
+      "version": "1.22.8",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
       "license": "MIT",
-      "optional": true,
-      "peer": true,
       "dependencies": {
-        "fast-deep-equal": "^3.1.3"
+        "is-core-module": "^2.13.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
       },
-      "peerDependencies": {
-        "ajv": "^8.8.2"
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/schema-utils/node_modules/json-schema-traverse": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-      "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+    "node_modules/resolve-from": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+      "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "peer": true
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "node_modules/scslre": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.3.0.tgz",
-      "integrity": "sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==",
+    "node_modules/resolve-path": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz",
+      "integrity": "sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@eslint-community/regexpp": "^4.8.0",
-        "refa": "^0.12.0",
-        "regexp-ast-analysis": "^0.7.0"
+        "http-errors": "~1.6.2",
+        "path-is-absolute": "1.0.1"
       },
       "engines": {
-        "node": "^14.0.0 || >=16.0.0"
+        "node": ">= 0.8"
       }
     },
-    "node_modules/scule": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz",
-      "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==",
+    "node_modules/resolve-path/node_modules/depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+      "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
       "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/semver": {
-      "version": "7.6.3",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
-      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
-      "license": "ISC",
-      "bin": {
-        "semver": "bin/semver.js"
-      },
+      "license": "MIT",
       "engines": {
-        "node": ">=10"
+        "node": ">= 0.6"
       }
     },
-    "node_modules/send": {
-      "version": "0.18.0",
-      "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
-      "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
+    "node_modules/resolve-path/node_modules/http-errors": {
+      "version": "1.6.3",
+      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+      "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "debug": "2.6.9",
-        "depd": "2.0.0",
-        "destroy": "1.2.0",
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "etag": "~1.8.1",
-        "fresh": "0.5.2",
-        "http-errors": "2.0.0",
-        "mime": "1.6.0",
-        "ms": "2.1.3",
-        "on-finished": "2.4.1",
-        "range-parser": "~1.2.1",
-        "statuses": "2.0.1"
+        "depd": "~1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.0",
+        "statuses": ">= 1.4.0 < 2"
       },
       "engines": {
-        "node": ">= 0.8.0"
+        "node": ">= 0.6"
       }
     },
-    "node_modules/send/node_modules/debug": {
-      "version": "2.6.9",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+    "node_modules/resolve-path/node_modules/inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/resolve-path/node_modules/setprototypeof": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+      "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/resolve-path/node_modules/statuses": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+      "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "ms": "2.0.0"
+      "engines": {
+        "node": ">= 0.6"
       }
     },
-    "node_modules/send/node_modules/debug/node_modules/ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+    "node_modules/resolve-pkg-maps": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+      "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+      }
     },
-    "node_modules/send/node_modules/mime": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
-      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+    "node_modules/reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
       "dev": true,
       "license": "MIT",
-      "bin": {
-        "mime": "cli.js"
-      },
       "engines": {
-        "node": ">=4"
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/send/node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+    "node_modules/rfdc": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+      "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/serialize-javascript": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
-      "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
+    "node_modules/rimraf": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "deprecated": "Rimraf versions prior to v4 are no longer supported",
       "dev": true,
-      "license": "BSD-3-Clause",
+      "license": "ISC",
       "dependencies": {
-        "randombytes": "^2.1.0"
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/serve-placeholder": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/serve-placeholder/-/serve-placeholder-2.0.2.tgz",
-      "integrity": "sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==",
+    "node_modules/rimraf/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "defu": "^6.1.4"
+        "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"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/serve-static": {
-      "version": "1.15.0",
-      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
-      "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
+    "node_modules/rollup": {
+      "version": "4.21.1",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.1.tgz",
+      "integrity": "sha512-ZnYyKvscThhgd3M5+Qt3pmhO4jIRR5RGzaSovB6Q7rGNrK5cUncrtLmcTTJVSdcKXyZjW8X8MB0JMSuH9bcAJg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "encodeurl": "~1.0.2",
-        "escape-html": "~1.0.3",
-        "parseurl": "~1.3.3",
-        "send": "0.18.0"
+        "@types/estree": "1.0.5"
+      },
+      "bin": {
+        "rollup": "dist/bin/rollup"
       },
       "engines": {
-        "node": ">= 0.8.0"
+        "node": ">=18.0.0",
+        "npm": ">=8.0.0"
+      },
+      "optionalDependencies": {
+        "@rollup/rollup-android-arm-eabi": "4.21.1",
+        "@rollup/rollup-android-arm64": "4.21.1",
+        "@rollup/rollup-darwin-arm64": "4.21.1",
+        "@rollup/rollup-darwin-x64": "4.21.1",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.21.1",
+        "@rollup/rollup-linux-arm-musleabihf": "4.21.1",
+        "@rollup/rollup-linux-arm64-gnu": "4.21.1",
+        "@rollup/rollup-linux-arm64-musl": "4.21.1",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.21.1",
+        "@rollup/rollup-linux-riscv64-gnu": "4.21.1",
+        "@rollup/rollup-linux-s390x-gnu": "4.21.1",
+        "@rollup/rollup-linux-x64-gnu": "4.21.1",
+        "@rollup/rollup-linux-x64-musl": "4.21.1",
+        "@rollup/rollup-win32-arm64-msvc": "4.21.1",
+        "@rollup/rollup-win32-ia32-msvc": "4.21.1",
+        "@rollup/rollup-win32-x64-msvc": "4.21.1",
+        "fsevents": "~2.3.2"
       }
     },
-    "node_modules/set-blocking": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-      "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/setprototypeof": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
-      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+    "node_modules/rollup-plugin-visualizer": {
+      "version": "5.12.0",
+      "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.12.0.tgz",
+      "integrity": "sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "shebang-regex": "^3.0.0"
+        "open": "^8.4.0",
+        "picomatch": "^2.3.1",
+        "source-map": "^0.7.4",
+        "yargs": "^17.5.1"
+      },
+      "bin": {
+        "rollup-plugin-visualizer": "dist/bin/cli.js"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "rollup": "2.x || 3.x || 4.x"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
       }
     },
-    "node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+    "node_modules/rollup-plugin-visualizer/node_modules/define-lazy-prop": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+      "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
       "dev": true,
       "license": "MIT",
       "engines": {
         "node": ">=8"
       }
     },
-    "node_modules/shell-quote": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
-      "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
+    "node_modules/rollup-plugin-visualizer/node_modules/is-docker": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+      "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
       "dev": true,
       "license": "MIT",
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/shimmer": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz",
-      "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==",
-      "license": "BSD-2-Clause"
-    },
-    "node_modules/siginfo": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
-      "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/signal-exit": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
-      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
-      "dev": true,
-      "license": "ISC",
+      "bin": {
+        "is-docker": "cli.js"
+      },
       "engines": {
-        "node": ">=14"
+        "node": ">=8"
       },
       "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/simple-git": {
-      "version": "3.25.0",
-      "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.25.0.tgz",
-      "integrity": "sha512-KIY5sBnzc4yEcJXW7Tdv4viEz8KyG+nU0hay+DWZasvdFOYKeUZ6Xc25LUHHjw0tinPT7O1eY6pzX7pRT1K8rw==",
+    "node_modules/rollup-plugin-visualizer/node_modules/is-wsl": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+      "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@kwsites/file-exists": "^1.1.1",
-        "@kwsites/promise-deferred": "^1.1.1",
-        "debug": "^4.3.5"
+        "is-docker": "^2.0.0"
       },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/steveukx/git-js?sponsor=1"
+      "engines": {
+        "node": ">=8"
       }
     },
-    "node_modules/sirv": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz",
-      "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==",
+    "node_modules/rollup-plugin-visualizer/node_modules/open": {
+      "version": "8.4.2",
+      "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
+      "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@polka/url": "^1.0.0-next.24",
-        "mrmime": "^2.0.0",
-        "totalist": "^3.0.0"
+        "define-lazy-prop": "^2.0.0",
+        "is-docker": "^2.1.1",
+        "is-wsl": "^2.2.0"
       },
       "engines": {
-        "node": ">= 10"
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/sisteransi": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
-      "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+    "node_modules/rollup-plugin-visualizer/node_modules/source-map": {
+      "version": "0.7.4",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+      "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
       "dev": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/rrweb-cssom": {
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
+      "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
       "license": "MIT"
     },
-    "node_modules/slash": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
-      "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+    "node_modules/run-applescript": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz",
+      "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=14.16"
+        "node": ">=18"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/slashes": {
-      "version": "3.0.12",
-      "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz",
-      "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==",
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
       "dev": true,
-      "license": "ISC"
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
+      }
     },
-    "node_modules/smart-buffer": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
-      "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+    "node_modules/runes": {
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/runes/-/runes-0.4.3.tgz",
+      "integrity": "sha512-K6p9y4ZyL9wPzA+PMDloNQPfoDGTiFYDvdlXznyGKgD10BJpcAosvATKrExRKOrNLgD8E7Um7WGW0lxsnOuNLg==",
       "license": "MIT",
       "engines": {
-        "node": ">= 6.0.0",
-        "npm": ">= 3.0.0"
+        "node": ">=4.0.0"
       }
     },
-    "node_modules/smob": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz",
-      "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==",
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
       "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
       "license": "MIT"
     },
-    "node_modules/socks": {
-      "version": "2.8.3",
-      "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
-      "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+      "license": "MIT"
+    },
+    "node_modules/sass": {
+      "version": "1.69.4",
+      "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.4.tgz",
+      "integrity": "sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==",
+      "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ip-address": "^9.0.5",
-        "smart-buffer": "^4.2.0"
+        "chokidar": ">=3.0.0 <4.0.0",
+        "immutable": "^4.0.0",
+        "source-map-js": ">=0.6.2 <2.0.0"
+      },
+      "bin": {
+        "sass": "sass.js"
       },
       "engines": {
-        "node": ">= 10.0.0",
-        "npm": ">= 3.0.0"
+        "node": ">=14.0.0"
       }
     },
-    "node_modules/socks-proxy-agent": {
-      "version": "8.0.4",
-      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz",
-      "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==",
-      "license": "MIT",
+    "node_modules/sax": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/saxes": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+      "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+      "license": "ISC",
       "dependencies": {
-        "agent-base": "^7.1.1",
-        "debug": "^4.3.4",
-        "socks": "^2.8.3"
+        "xmlchars": "^2.2.0"
       },
       "engines": {
-        "node": ">= 14"
+        "node": ">=v12.22.7"
       }
     },
-    "node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "devOptional": true,
-      "license": "BSD-3-Clause",
+    "node_modules/scslre": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.3.0.tgz",
+      "integrity": "sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint-community/regexpp": "^4.8.0",
+        "refa": "^0.12.0",
+        "regexp-ast-analysis": "^0.7.0"
+      },
       "engines": {
-        "node": ">=0.10.0"
+        "node": "^14.0.0 || >=16.0.0"
       }
     },
-    "node_modules/source-map-js": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
-      "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
-      "license": "BSD-3-Clause",
+    "node_modules/scule": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz",
+      "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/semver": {
+      "version": "7.6.3",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+      "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+      "license": "ISC",
+      "bin": {
+        "semver": "bin/semver.js"
+      },
       "engines": {
-        "node": ">=0.10.0"
+        "node": ">=10"
       }
     },
-    "node_modules/source-map-resolve": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz",
-      "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==",
-      "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
+    "node_modules/send": {
+      "version": "0.18.0",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
+      "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "atob": "^2.1.2",
-        "decode-uri-component": "^0.2.0"
+        "debug": "2.6.9",
+        "depd": "2.0.0",
+        "destroy": "1.2.0",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "2.0.0",
+        "mime": "1.6.0",
+        "ms": "2.1.3",
+        "on-finished": "2.4.1",
+        "range-parser": "~1.2.1",
+        "statuses": "2.0.1"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "node_modules/source-map-support": {
-      "version": "0.5.21",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
-      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+    "node_modules/send/node_modules/debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "buffer-from": "^1.0.0",
-        "source-map": "^0.6.0"
+        "ms": "2.0.0"
       }
     },
-    "node_modules/spdx-correct": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
-      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+    "node_modules/send/node_modules/debug/node_modules/ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "spdx-expression-parse": "^3.0.0",
-        "spdx-license-ids": "^3.0.0"
-      }
+      "license": "MIT"
     },
-    "node_modules/spdx-correct/node_modules/spdx-expression-parse": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
-      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
+    "node_modules/send/node_modules/mime": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+      "dev": true,
+      "license": "MIT",
+      "bin": {
+        "mime": "cli.js"
+      },
+      "engines": {
+        "node": ">=4"
       }
     },
-    "node_modules/spdx-exceptions": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
-      "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+    "node_modules/send/node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
       "dev": true,
-      "license": "CC-BY-3.0"
+      "license": "MIT"
     },
-    "node_modules/spdx-expression-parse": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
-      "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
+    "node_modules/serialize-javascript": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+      "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
       "dev": true,
-      "license": "MIT",
+      "license": "BSD-3-Clause",
       "dependencies": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
+        "randombytes": "^2.1.0"
       }
     },
-    "node_modules/spdx-license-ids": {
-      "version": "3.0.18",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
-      "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
+    "node_modules/serve-placeholder": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/serve-placeholder/-/serve-placeholder-2.0.2.tgz",
+      "integrity": "sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==",
       "dev": true,
-      "license": "CC0-1.0"
+      "license": "MIT",
+      "dependencies": {
+        "defu": "^6.1.4"
+      }
     },
-    "node_modules/speakingurl": {
-      "version": "14.0.1",
-      "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz",
-      "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
+    "node_modules/serve-static": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
+      "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
       "dev": true,
-      "license": "BSD-3-Clause",
+      "license": "MIT",
+      "dependencies": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "0.18.0"
+      },
       "engines": {
-        "node": ">=0.10.0"
+        "node": ">= 0.8.0"
       }
     },
-    "node_modules/sprintf-js": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
-      "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
-      "license": "BSD-3-Clause"
-    },
-    "node_modules/stable-hash": {
-      "version": "0.0.4",
-      "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz",
-      "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/stackback": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
-      "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
+    "node_modules/set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+      "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
       "dev": true,
-      "license": "MIT"
+      "license": "ISC"
     },
-    "node_modules/standard-as-callback": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz",
-      "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==",
+    "node_modules/setprototypeof": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+      "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
       "dev": true,
-      "license": "MIT"
+      "license": "ISC"
     },
-    "node_modules/statuses": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
-      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+    "node_modules/shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
       "engines": {
-        "node": ">= 0.8"
+        "node": ">=8"
       }
     },
-    "node_modules/std-env": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz",
-      "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==",
+    "node_modules/shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
       "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/streamx": {
-      "version": "2.18.0",
-      "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz",
-      "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==",
       "license": "MIT",
-      "dependencies": {
-        "fast-fifo": "^1.3.2",
-        "queue-tick": "^1.0.1",
-        "text-decoder": "^1.1.0"
-      },
-      "optionalDependencies": {
-        "bare-events": "^2.2.0"
+      "engines": {
+        "node": ">=8"
       }
     },
-    "node_modules/string_decoder": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
-      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+    "node_modules/shell-quote": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
+      "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "safe-buffer": "~5.2.0"
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/string-width": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
-      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+    "node_modules/shimmer": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz",
+      "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==",
+      "license": "BSD-2-Clause"
+    },
+    "node_modules/siginfo": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
+      "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+      "dev": true,
+      "license": "ISC"
+    },
+    "node_modules/simple-git": {
+      "version": "3.25.0",
+      "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.25.0.tgz",
+      "integrity": "sha512-KIY5sBnzc4yEcJXW7Tdv4viEz8KyG+nU0hay+DWZasvdFOYKeUZ6Xc25LUHHjw0tinPT7O1eY6pzX7pRT1K8rw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "eastasianwidth": "^0.2.0",
-        "emoji-regex": "^9.2.2",
-        "strip-ansi": "^7.0.1"
-      },
-      "engines": {
-        "node": ">=12"
+        "@kwsites/file-exists": "^1.1.1",
+        "@kwsites/promise-deferred": "^1.1.1",
+        "debug": "^4.3.5"
       },
       "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "type": "github",
+        "url": "https://github.com/steveukx/git-js?sponsor=1"
       }
     },
-    "node_modules/string-width-cjs": {
-      "name": "string-width",
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+    "node_modules/sirv": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz",
+      "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
+        "@polka/url": "^1.0.0-next.24",
+        "mrmime": "^2.0.0",
+        "totalist": "^3.0.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">= 10"
       }
     },
-    "node_modules/string-width-cjs/node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+    "node_modules/sisteransi": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+      "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/string-width/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+    "node_modules/slash": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+      "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=12"
+        "node": ">=14.16"
       },
       "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/string-width/node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
-      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+    "node_modules/slashes": {
+      "version": "3.0.12",
+      "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz",
+      "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
-      }
+      "license": "ISC"
     },
-    "node_modules/strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+    "node_modules/smart-buffer": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+      "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
       "license": "MIT",
-      "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
       "engines": {
-        "node": ">=8"
+        "node": ">= 6.0.0",
+        "npm": ">= 3.0.0"
       }
     },
-    "node_modules/strip-ansi-cjs": {
-      "name": "strip-ansi",
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+    "node_modules/smob": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz",
+      "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==",
       "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/socks": {
+      "version": "2.8.3",
+      "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
+      "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
       "license": "MIT",
       "dependencies": {
-        "ansi-regex": "^5.0.1"
+        "ip-address": "^9.0.5",
+        "smart-buffer": "^4.2.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">= 10.0.0",
+        "npm": ">= 3.0.0"
       }
     },
-    "node_modules/strip-final-newline": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
-      "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
-      "dev": true,
+    "node_modules/socks-proxy-agent": {
+      "version": "8.0.4",
+      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz",
+      "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==",
       "license": "MIT",
-      "engines": {
-        "node": ">=12"
+      "dependencies": {
+        "agent-base": "^7.1.1",
+        "debug": "^4.3.4",
+        "socks": "^2.8.3"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "engines": {
+        "node": ">= 14"
       }
     },
-    "node_modules/strip-indent": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
-      "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+    "node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "devOptional": true,
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-js": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+      "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/source-map-resolve": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz",
+      "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==",
+      "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "min-indent": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=8"
+        "atob": "^2.1.2",
+        "decode-uri-component": "^0.2.0"
       }
     },
-    "node_modules/strip-json-comments": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+    "node_modules/source-map-support": {
+      "version": "0.5.21",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
       }
     },
-    "node_modules/strip-literal": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.0.tgz",
-      "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==",
+    "node_modules/spdx-correct": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "dependencies": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "node_modules/spdx-correct/node_modules/spdx-expression-parse": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "js-tokens": "^9.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
       }
     },
-    "node_modules/strip-literal/node_modules/js-tokens": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz",
-      "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==",
+    "node_modules/spdx-exceptions": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+      "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
       "dev": true,
-      "license": "MIT"
+      "license": "CC-BY-3.0"
     },
-    "node_modules/stylehacks": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.3.tgz",
-      "integrity": "sha512-4DqtecvI/Nd+2BCvW9YEF6lhBN5UM50IJ1R3rnEAhBwbCKf4VehRf+uqvnVArnBayjYD/WtT3g0G/HSRxWfTRg==",
+    "node_modules/spdx-expression-parse": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz",
+      "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "browserslist": "^4.23.3",
-        "postcss-selector-parser": "^6.1.1"
-      },
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "node_modules/spdx-license-ids": {
+      "version": "3.0.20",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz",
+      "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==",
+      "dev": true,
+      "license": "CC0-1.0"
+    },
+    "node_modules/speakingurl": {
+      "version": "14.0.1",
+      "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz",
+      "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
+      "dev": true,
+      "license": "BSD-3-Clause",
       "engines": {
-        "node": "^18.12.0 || ^20.9.0 || >=22.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/stylehacks/node_modules/postcss-selector-parser": {
-      "version": "6.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
-      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+    "node_modules/sprintf-js": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
+      "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/stable-hash": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz",
+      "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/stackback": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
+      "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/standard-as-callback": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz",
+      "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/statuses": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+      "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "cssesc": "^3.0.0",
-        "util-deprecate": "^1.0.2"
-      },
       "engines": {
-        "node": ">=4"
+        "node": ">= 0.8"
       }
     },
-    "node_modules/stylus": {
-      "version": "0.57.0",
-      "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.57.0.tgz",
-      "integrity": "sha512-yOI6G8WYfr0q8v8rRvE91wbxFU+rJPo760Va4MF6K0I6BZjO4r+xSynkvyPBP9tV1CIEUeRsiidjIs2rzb1CnQ==",
+    "node_modules/std-env": {
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz",
+      "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==",
       "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/streamx": {
+      "version": "2.19.0",
+      "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.19.0.tgz",
+      "integrity": "sha512-5z6CNR4gtkPbwlxyEqoDGDmWIzoNJqCBt4Eac1ICP9YaIT08ct712cFj0u1rx4F8luAuL+3Qc+RFIdI4OX00kg==",
       "license": "MIT",
       "dependencies": {
-        "css": "^3.0.0",
-        "debug": "^4.3.2",
-        "glob": "^7.1.6",
-        "safer-buffer": "^2.1.2",
-        "sax": "~1.2.4",
-        "source-map": "^0.7.3"
-      },
-      "bin": {
-        "stylus": "bin/stylus"
+        "fast-fifo": "^1.3.2",
+        "queue-tick": "^1.0.1",
+        "text-decoder": "^1.1.0"
       },
-      "engines": {
-        "node": "*"
+      "optionalDependencies": {
+        "bare-events": "^2.2.0"
       }
     },
-    "node_modules/stylus/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+    "node_modules/string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
+        "safe-buffer": "~5.2.0"
       }
     },
-    "node_modules/stylus/node_modules/glob": {
-      "version": "7.2.3",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-      "deprecated": "Glob versions prior to v9 are no longer supported",
+    "node_modules/string-width": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "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"
+        "eastasianwidth": "^0.2.0",
+        "emoji-regex": "^9.2.2",
+        "strip-ansi": "^7.0.1"
       },
       "engines": {
-        "node": "*"
+        "node": ">=12"
       },
       "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/stylus/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+    "node_modules/string-width-cjs": {
+      "name": "string-width",
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/string-width-cjs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/string-width/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      }
+    },
+    "node_modules/string-width/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
+    },
+    "node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-ansi-cjs": {
+      "name": "strip-ansi",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-final-newline": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
+      "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/strip-indent": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
+      "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "min-indent": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-json-comments": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/strip-literal": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.0.tgz",
+      "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "js-tokens": "^9.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
+    "node_modules/strip-literal/node_modules/js-tokens": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz",
+      "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/stylehacks": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.3.tgz",
+      "integrity": "sha512-4DqtecvI/Nd+2BCvW9YEF6lhBN5UM50IJ1R3rnEAhBwbCKf4VehRf+uqvnVArnBayjYD/WtT3g0G/HSRxWfTRg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "browserslist": "^4.23.3",
+        "postcss-selector-parser": "^6.1.1"
+      },
+      "engines": {
+        "node": "^18.12.0 || ^20.9.0 || >=22.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
+      }
+    },
+    "node_modules/stylehacks/node_modules/postcss-selector-parser": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/stylus": {
+      "version": "0.57.0",
+      "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.57.0.tgz",
+      "integrity": "sha512-yOI6G8WYfr0q8v8rRvE91wbxFU+rJPo760Va4MF6K0I6BZjO4r+xSynkvyPBP9tV1CIEUeRsiidjIs2rzb1CnQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "css": "^3.0.0",
+        "debug": "^4.3.2",
+        "glob": "^7.1.6",
+        "safer-buffer": "^2.1.2",
+        "sax": "~1.2.4",
+        "source-map": "^0.7.3"
+      },
+      "bin": {
+        "stylus": "bin/stylus"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/stylus/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
       "dev": true,
       "license": "ISC",
       "dependencies": {
-        "brace-expansion": "^1.1.7"
+        "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"
       },
       "engines": {
         "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
     "node_modules/stylus/node_modules/source-map": {
@@ -16288,9 +16024,9 @@
       }
     },
     "node_modules/tailwindcss": {
-      "version": "3.4.9",
-      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.9.tgz",
-      "integrity": "sha512-1SEOvRr6sSdV5IDf9iC+NU4dhwdqzF4zKKq3sAbasUWHEM6lsMhX+eNN5gkPx1BvLFEnZQEUFbXnGj8Qlp83Pg==",
+      "version": "3.4.10",
+      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz",
+      "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -16446,9 +16182,9 @@
       "license": "ISC"
     },
     "node_modules/terser": {
-      "version": "5.31.5",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.5.tgz",
-      "integrity": "sha512-YPmas0L0rE1UyLL/llTWA0SiDOqIcAQYLeUj7cJYzXHlRTAnMSg9pPe4VJ5PlKvTrPQsdVFuiRiwyeNlYgwh2Q==",
+      "version": "5.31.6",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz",
+      "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
@@ -16464,119 +16200,52 @@
         "node": ">=10"
       }
     },
-    "node_modules/terser-webpack-plugin": {
-      "version": "5.3.10",
-      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
-      "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
+    "node_modules/terser/node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/test-exclude": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz",
+      "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
+      "license": "ISC",
       "dependencies": {
-        "@jridgewell/trace-mapping": "^0.3.20",
-        "jest-worker": "^27.4.5",
-        "schema-utils": "^3.1.1",
-        "serialize-javascript": "^6.0.1",
-        "terser": "^5.26.0"
+        "@istanbuljs/schema": "^0.1.2",
+        "glob": "^10.4.1",
+        "minimatch": "^9.0.4"
       },
       "engines": {
-        "node": ">= 10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependencies": {
-        "webpack": "^5.1.0"
-      },
-      "peerDependenciesMeta": {
-        "@swc/core": {
-          "optional": true
-        },
-        "esbuild": {
-          "optional": true
-        },
-        "uglify-js": {
-          "optional": true
-        }
+        "node": ">=18"
       }
     },
-    "node_modules/terser-webpack-plugin/node_modules/jest-worker": {
-      "version": "27.5.1",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
-      "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+    "node_modules/test-exclude/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "peer": true,
       "dependencies": {
-        "@types/node": "*",
-        "merge-stream": "^2.0.0",
-        "supports-color": "^8.0.0"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
+        "balanced-match": "^1.0.0"
       }
     },
-    "node_modules/terser-webpack-plugin/node_modules/schema-utils": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
-      "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
+    "node_modules/test-exclude/node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@types/json-schema": "^7.0.8",
-        "ajv": "^6.12.5",
-        "ajv-keywords": "^3.5.2"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      }
-    },
-    "node_modules/terser-webpack-plugin/node_modules/supports-color": {
-      "version": "8.1.1",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
-      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
+      "license": "ISC",
       "dependencies": {
-        "has-flag": "^4.0.0"
+        "brace-expansion": "^2.0.1"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">=16 || 14 >=14.17"
       },
       "funding": {
-        "url": "https://github.com/chalk/supports-color?sponsor=1"
-      }
-    },
-    "node_modules/terser/node_modules/commander": {
-      "version": "2.20.3",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/test-exclude": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz",
-      "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "@istanbuljs/schema": "^0.1.2",
-        "glob": "^10.4.1",
-        "minimatch": "^9.0.4"
-      },
-      "engines": {
-        "node": ">=18"
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
     "node_modules/text-decoder": {
@@ -16638,10 +16307,52 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/tinyglobby": {
+      "version": "0.2.5",
+      "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.5.tgz",
+      "integrity": "sha512-Dlqgt6h0QkoHttG53/WGADNh9QhcjCAIZMTERAVhdpmIBEejSuLI9ZmGKWzB7tweBjlk30+s/ofi4SLmBeTYhw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fdir": "^6.2.0",
+        "picomatch": "^4.0.2"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
+    "node_modules/tinyglobby/node_modules/fdir": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.3.0.tgz",
+      "integrity": "sha512-QOnuT+BOtivR77wYvCWHfGt9s4Pz1VIMbD463vegT5MLqNXy8rYFT/lPVEqf/bhYeT6qmqrNHhsX+rWwe3rOCQ==",
+      "dev": true,
+      "license": "MIT",
+      "peerDependencies": {
+        "picomatch": "^3 || ^4"
+      },
+      "peerDependenciesMeta": {
+        "picomatch": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/tinyglobby/node_modules/picomatch": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
+      "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
     "node_modules/tinypool": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz",
-      "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz",
+      "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -16934,9 +16645,9 @@
       }
     },
     "node_modules/undici-types": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz",
-      "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==",
+      "version": "6.19.8",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+      "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
       "license": "MIT"
     },
     "node_modules/unenv": {
@@ -17493,578 +17204,116 @@
     "node_modules/vite-plugin-checker/node_modules/commander": {
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
-      "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 12"
-      }
-    },
-    "node_modules/vite-plugin-checker/node_modules/npm-run-path": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
-      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "path-key": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/vite-plugin-eslint2": {
-      "version": "4.4.0",
-      "resolved": "https://registry.npmjs.org/vite-plugin-eslint2/-/vite-plugin-eslint2-4.4.0.tgz",
-      "integrity": "sha512-xy5G4Gj18ke1bO5OS0zgyunkPvPy/vSLJFTyMpGmKGKTlYuuhPad3Xy1PWLuqRMoWnuCoFMf2ST1EGhz89uqrA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@rollup/pluginutils": "^5.1.0",
-        "chokidar": "^3.6.0",
-        "debug": "^4.3.4"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "peerDependencies": {
-        "@types/eslint": "^7.0.0 || ^8.0.0 || ^9.0.0-0",
-        "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0-0",
-        "rollup": "^2.0.0 || ^3.0.0 || ^4.0.0",
-        "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0"
-      },
-      "peerDependenciesMeta": {
-        "rollup": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/vite-plugin-inspect": {
-      "version": "0.8.7",
-      "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.7.tgz",
-      "integrity": "sha512-/XXou3MVc13A5O9/2Nd6xczjrUwt7ZyI9h8pTnUMkr5SshLcb0PJUOVq2V+XVkdeU4njsqAtmK87THZuO2coGA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@antfu/utils": "^0.7.10",
-        "@rollup/pluginutils": "^5.1.0",
-        "debug": "^4.3.6",
-        "error-stack-parser-es": "^0.1.5",
-        "fs-extra": "^11.2.0",
-        "open": "^10.1.0",
-        "perfect-debounce": "^1.0.0",
-        "picocolors": "^1.0.1",
-        "sirv": "^2.0.4"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      },
-      "peerDependencies": {
-        "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0"
-      },
-      "peerDependenciesMeta": {
-        "@nuxt/kit": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/vite-plugin-inspect/node_modules/define-lazy-prop": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
-      "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/vite-plugin-inspect/node_modules/open": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz",
-      "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "default-browser": "^5.2.1",
-        "define-lazy-prop": "^3.0.0",
-        "is-inside-container": "^1.0.0",
-        "is-wsl": "^3.1.0"
-      },
-      "engines": {
-        "node": ">=18"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/vite-plugin-vue-inspector": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.1.3.tgz",
-      "integrity": "sha512-pMrseXIDP1Gb38mOevY+BvtNGNqiqmqa2pKB99lnLsADQww9w9xMbAfT4GB6RUoaOkSPrtlXqpq2Fq+Dj2AgFg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/core": "^7.23.0",
-        "@babel/plugin-proposal-decorators": "^7.23.0",
-        "@babel/plugin-syntax-import-attributes": "^7.22.5",
-        "@babel/plugin-syntax-import-meta": "^7.10.4",
-        "@babel/plugin-transform-typescript": "^7.22.15",
-        "@vue/babel-plugin-jsx": "^1.1.5",
-        "@vue/compiler-dom": "^3.3.4",
-        "kolorist": "^1.8.0",
-        "magic-string": "^0.30.4"
-      },
-      "peerDependencies": {
-        "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0"
-      }
-    },
-    "node_modules/vite-svg-loader": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/vite-svg-loader/-/vite-svg-loader-5.1.0.tgz",
-      "integrity": "sha512-M/wqwtOEjgb956/+m5ZrYT/Iq6Hax0OakWbokj8+9PXOnB7b/4AxESHieEtnNEy7ZpjsjYW1/5nK8fATQMmRxw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "svgo": "^3.0.2"
-      },
-      "peerDependencies": {
-        "vue": ">=3.2.13"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/aix-ppc64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
-      "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "aix"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/android-arm": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
-      "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/android-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
-      "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/android-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
-      "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/darwin-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
-      "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/darwin-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
-      "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
-      "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/freebsd-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
-      "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/linux-arm": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
-      "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/linux-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
-      "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/linux-ia32": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
-      "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/linux-loong64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
-      "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/linux-mips64el": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
-      "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
-      "cpu": [
-        "mips64el"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/linux-ppc64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
-      "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/linux-riscv64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
-      "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/linux-s390x": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
-      "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/linux-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
-      "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/netbsd-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
-      "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/openbsd-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
-      "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/sunos-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
-      "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "sunos"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/vite/node_modules/@esbuild/win32-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
-      "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
-      "cpu": [
-        "arm64"
-      ],
+      "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">= 12"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/win32-ia32": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
-      "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
-      "cpu": [
-        "ia32"
-      ],
+    "node_modules/vite-plugin-checker/node_modules/npm-run-path": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+      "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
+      "dependencies": {
+        "path-key": "^3.0.0"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=8"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/win32-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
-      "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/vite-plugin-eslint2": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/vite-plugin-eslint2/-/vite-plugin-eslint2-4.4.0.tgz",
+      "integrity": "sha512-xy5G4Gj18ke1bO5OS0zgyunkPvPy/vSLJFTyMpGmKGKTlYuuhPad3Xy1PWLuqRMoWnuCoFMf2ST1EGhz89uqrA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
+      "dependencies": {
+        "@rollup/pluginutils": "^5.1.0",
+        "chokidar": "^3.6.0",
+        "debug": "^4.3.4"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=18"
+      },
+      "peerDependencies": {
+        "@types/eslint": "^7.0.0 || ^8.0.0 || ^9.0.0-0",
+        "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0-0",
+        "rollup": "^2.0.0 || ^3.0.0 || ^4.0.0",
+        "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0"
+      },
+      "peerDependenciesMeta": {
+        "rollup": {
+          "optional": true
+        }
       }
     },
-    "node_modules/vite/node_modules/esbuild": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
-      "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+    "node_modules/vite-plugin-inspect": {
+      "version": "0.8.7",
+      "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.7.tgz",
+      "integrity": "sha512-/XXou3MVc13A5O9/2Nd6xczjrUwt7ZyI9h8pTnUMkr5SshLcb0PJUOVq2V+XVkdeU4njsqAtmK87THZuO2coGA==",
       "dev": true,
-      "hasInstallScript": true,
       "license": "MIT",
-      "bin": {
-        "esbuild": "bin/esbuild"
+      "dependencies": {
+        "@antfu/utils": "^0.7.10",
+        "@rollup/pluginutils": "^5.1.0",
+        "debug": "^4.3.6",
+        "error-stack-parser-es": "^0.1.5",
+        "fs-extra": "^11.2.0",
+        "open": "^10.1.0",
+        "perfect-debounce": "^1.0.0",
+        "picocolors": "^1.0.1",
+        "sirv": "^2.0.4"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=14"
       },
-      "optionalDependencies": {
-        "@esbuild/aix-ppc64": "0.21.5",
-        "@esbuild/android-arm": "0.21.5",
-        "@esbuild/android-arm64": "0.21.5",
-        "@esbuild/android-x64": "0.21.5",
-        "@esbuild/darwin-arm64": "0.21.5",
-        "@esbuild/darwin-x64": "0.21.5",
-        "@esbuild/freebsd-arm64": "0.21.5",
-        "@esbuild/freebsd-x64": "0.21.5",
-        "@esbuild/linux-arm": "0.21.5",
-        "@esbuild/linux-arm64": "0.21.5",
-        "@esbuild/linux-ia32": "0.21.5",
-        "@esbuild/linux-loong64": "0.21.5",
-        "@esbuild/linux-mips64el": "0.21.5",
-        "@esbuild/linux-ppc64": "0.21.5",
-        "@esbuild/linux-riscv64": "0.21.5",
-        "@esbuild/linux-s390x": "0.21.5",
-        "@esbuild/linux-x64": "0.21.5",
-        "@esbuild/netbsd-x64": "0.21.5",
-        "@esbuild/openbsd-x64": "0.21.5",
-        "@esbuild/sunos-x64": "0.21.5",
-        "@esbuild/win32-arm64": "0.21.5",
-        "@esbuild/win32-ia32": "0.21.5",
-        "@esbuild/win32-x64": "0.21.5"
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0"
+      },
+      "peerDependenciesMeta": {
+        "@nuxt/kit": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/vite-plugin-vue-inspector": {
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.1.3.tgz",
+      "integrity": "sha512-pMrseXIDP1Gb38mOevY+BvtNGNqiqmqa2pKB99lnLsADQww9w9xMbAfT4GB6RUoaOkSPrtlXqpq2Fq+Dj2AgFg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@babel/core": "^7.23.0",
+        "@babel/plugin-proposal-decorators": "^7.23.0",
+        "@babel/plugin-syntax-import-attributes": "^7.22.5",
+        "@babel/plugin-syntax-import-meta": "^7.10.4",
+        "@babel/plugin-transform-typescript": "^7.22.15",
+        "@vue/babel-plugin-jsx": "^1.1.5",
+        "@vue/compiler-dom": "^3.3.4",
+        "kolorist": "^1.8.0",
+        "magic-string": "^0.30.4"
+      },
+      "peerDependencies": {
+        "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0"
+      }
+    },
+    "node_modules/vite-svg-loader": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/vite-svg-loader/-/vite-svg-loader-5.1.0.tgz",
+      "integrity": "sha512-M/wqwtOEjgb956/+m5ZrYT/Iq6Hax0OakWbokj8+9PXOnB7b/4AxESHieEtnNEy7ZpjsjYW1/5nK8fATQMmRxw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "svgo": "^3.0.2"
+      },
+      "peerDependencies": {
+        "vue": ">=3.2.13"
       }
     },
     "node_modules/vitest": {
@@ -18179,6 +17428,19 @@
         "node": ">=16.17.0"
       }
     },
+    "node_modules/vitest/node_modules/signal-exit": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+      "dev": true,
+      "license": "ISC",
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/vscode-jsonrpc": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz",
@@ -18204,30 +17466,6 @@
         "vscode": "^1.52.0"
       }
     },
-    "node_modules/vscode-languageclient/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/vscode-languageclient/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/vscode-languageserver": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz",
@@ -18375,14 +17613,14 @@
       }
     },
     "node_modules/vue-i18n": {
-      "version": "9.13.1",
-      "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.13.1.tgz",
-      "integrity": "sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==",
+      "version": "9.14.0",
+      "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.0.tgz",
+      "integrity": "sha512-LxmpRuCt2rI8gqU+kxeflRZMQn4D5+4M3oP3PWZdowW/ePJraHqhF7p4CuaME52mUxdw3Mmy2yAUKgfZYgCRjA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@intlify/core-base": "9.13.1",
-        "@intlify/shared": "9.13.1",
+        "@intlify/core-base": "9.14.0",
+        "@intlify/shared": "9.14.0",
         "@vue/devtools-api": "^6.5.0"
       },
       "engines": {
@@ -18444,22 +17682,6 @@
         "node": ">=18"
       }
     },
-    "node_modules/watchpack": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz",
-      "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "glob-to-regexp": "^0.4.1",
-        "graceful-fs": "^4.1.2"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
     "node_modules/webidl-conversions": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
@@ -18469,56 +17691,6 @@
         "node": ">=12"
       }
     },
-    "node_modules/webpack": {
-      "version": "5.93.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz",
-      "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@types/eslint-scope": "^3.7.3",
-        "@types/estree": "^1.0.5",
-        "@webassemblyjs/ast": "^1.12.1",
-        "@webassemblyjs/wasm-edit": "^1.12.1",
-        "@webassemblyjs/wasm-parser": "^1.12.1",
-        "acorn": "^8.7.1",
-        "acorn-import-attributes": "^1.9.5",
-        "browserslist": "^4.21.10",
-        "chrome-trace-event": "^1.0.2",
-        "enhanced-resolve": "^5.17.0",
-        "es-module-lexer": "^1.2.1",
-        "eslint-scope": "5.1.1",
-        "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.2.0",
-        "mime-types": "^2.1.27",
-        "neo-async": "^2.6.2",
-        "schema-utils": "^3.2.0",
-        "tapable": "^2.1.1",
-        "terser-webpack-plugin": "^5.3.10",
-        "watchpack": "^2.4.1",
-        "webpack-sources": "^3.2.3"
-      },
-      "bin": {
-        "webpack": "bin/webpack.js"
-      },
-      "engines": {
-        "node": ">=10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependenciesMeta": {
-        "webpack-cli": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/webpack-sources": {
       "version": "3.2.3",
       "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
@@ -18536,55 +17708,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/webpack/node_modules/eslint-scope": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "esrecurse": "^4.3.0",
-        "estraverse": "^4.1.1"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/webpack/node_modules/estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "optional": true,
-      "peer": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
-    "node_modules/webpack/node_modules/schema-utils": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz",
-      "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "peer": true,
-      "dependencies": {
-        "@types/json-schema": "^7.0.8",
-        "ajv": "^6.12.5",
-        "ajv-keywords": "^3.5.2"
-      },
-      "engines": {
-        "node": ">= 10.13.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      }
-    },
     "node_modules/whatwg-encoding": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
@@ -18984,13 +18107,13 @@
       }
     },
     "node_modules/yocto-queue": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
-      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
+      "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=10"
+        "node": ">=12.20"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
diff --git a/translation/package-lock.json b/translation/package-lock.json
index 0318be9dcd..6d2882f026 100644
--- a/translation/package-lock.json
+++ b/translation/package-lock.json
@@ -10,12 +10,12 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.2.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.2.0.tgz",
-      "integrity": "sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==",
+      "version": "22.5.1",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.1.tgz",
+      "integrity": "sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw==",
       "license": "MIT",
       "dependencies": {
-        "undici-types": "~6.13.0"
+        "undici-types": "~6.19.2"
       }
     },
     "node_modules/asynckit": {
@@ -25,9 +25,9 @@
       "license": "MIT"
     },
     "node_modules/axios": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
-      "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
+      "version": "1.7.5",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz",
+      "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==",
       "license": "MIT",
       "dependencies": {
         "follow-redirects": "^1.15.6",
@@ -160,9 +160,9 @@
       "license": "MIT"
     },
     "node_modules/undici-types": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz",
-      "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==",
+      "version": "6.19.8",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+      "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
       "license": "MIT"
     }
   }

From ebeb2ec6541d4852070194d0a262053ee5a95bb1 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Wed, 28 Aug 2024 21:11:12 +0200
Subject: [PATCH 191/273] docker-compose: fix dev setup

My fix for this here https://github.com/ecamp/ecamp3/pull/5560/files#r1735167412
for the merge conflict with https://github.com/ecamp/ecamp3/pull/5372
was a little short-sighted.
---
 docker-compose.override.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docker-compose.override.yml b/docker-compose.override.yml
index e116a9401a..27143a7265 100644
--- a/docker-compose.override.yml
+++ b/docker-compose.override.yml
@@ -11,6 +11,7 @@ services:
       - ./api/docker/php/docker-entrypoint.sh:/usr/local/bin/docker-entrypoint:delegated
       - ./.cache/composer:/tmp/composer/cache:delegated
     environment:
+      DATABASE_URL: "postgresql://ecamp3:ecamp3@database:5432/ecamp3?serverVersion=15&charset=utf8"
       # See https://docs.docker.com/docker-for-mac/networking/#i-want-to-connect-from-a-container-to-a-service-on-the-host
       # See https://github.com/docker/for-linux/issues/264
       # The `remote_host` below may optionally be replaced with `remote_connect_back`

From fb3140ea33d7cda26aa4d5fc4c67e0a04d725845 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 28 Aug 2024 20:25:26 +0000
Subject: [PATCH 192/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.40

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index f7805c1339..7be056cbca 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.39
+    image: amazon/aws-cli:2.17.40
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From f91be91ec58aea2879a13a701c3216815b78ef28 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 28 Aug 2024 20:26:03 +0000
Subject: [PATCH 193/273] chore(deps): update helm release oauth2-proxy to
 v7.7.13

---
 .ops/ops-dashboard/Chart.lock | 10 +++++-----
 .ops/ops-dashboard/Chart.yaml |  6 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/.ops/ops-dashboard/Chart.lock b/.ops/ops-dashboard/Chart.lock
index a9125e69c0..f1dc15d299 100644
--- a/.ops/ops-dashboard/Chart.lock
+++ b/.ops/ops-dashboard/Chart.lock
@@ -1,15 +1,15 @@
 dependencies:
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.12
+  version: 7.7.13
 - name: kubernetes-dashboard
   repository: https://kubernetes.github.io/dashboard/
   version: 7.5.0
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.12
+  version: 7.7.13
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.12
-digest: sha256:82a62eb3ac6b4c78a84b14c975ddcc070e9151a8569b16552ce30175c9cdec99
-generated: "2024-08-23T21:40:43.883983991Z"
+  version: 7.7.13
+digest: sha256:3cca1c2d60fa30a95494b4735572c7c474e05e97a278410625260070f5d76f59
+generated: "2024-08-28T20:25:48.196065226Z"
diff --git a/.ops/ops-dashboard/Chart.yaml b/.ops/ops-dashboard/Chart.yaml
index 71d317fbaf..fcd4eb1560 100644
--- a/.ops/ops-dashboard/Chart.yaml
+++ b/.ops/ops-dashboard/Chart.yaml
@@ -26,16 +26,16 @@ appVersion: 0.1.0
 dependencies:
   - name: oauth2-proxy
     alias: grafana-proxy
-    version: 7.7.12
+    version: 7.7.13
     repository: https://oauth2-proxy.github.io/manifests
   - name: kubernetes-dashboard
     version: 7.5.0
     repository: https://kubernetes.github.io/dashboard/
   - name: oauth2-proxy
     alias: kubernetes-dashboard-proxy
-    version: 7.7.12
+    version: 7.7.13
     repository: https://oauth2-proxy.github.io/manifests
   - name: oauth2-proxy
     alias: logging-proxy
-    version: 7.7.12
+    version: 7.7.13
     repository: https://oauth2-proxy.github.io/manifests

From d1d912d246f7981fb90dc969a3249801e1872a14 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 28 Aug 2024 20:35:04 +0000
Subject: [PATCH 194/273] chore(deps): lock file maintenance

---
 .ops/aws-setup/package-lock.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index e655d238a8..b6ce62d8ee 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -3093,9 +3093,9 @@
             }
         },
         "node_modules/aws-sdk": {
-            "version": "2.1684.0",
-            "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1684.0.tgz",
-            "integrity": "sha512-Womhydf2UhEeLALLOUEDIuJ1Iv2k9aOsqAeDaQT3AhayiYt7pguvncs5IgEAxZ0TRH7driA7kTk+iGnCP2jMMA==",
+            "version": "2.1685.0",
+            "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1685.0.tgz",
+            "integrity": "sha512-axo1by16nZXqHAFu65+/pLnqqaU3ez5ko3jTGDt0byafT7XD948z3WqqrXWT9vJTUF93DdTZ9DEcazj4Ai91cQ==",
             "hasInstallScript": true,
             "license": "Apache-2.0",
             "dependencies": {

From 2f9170be367d6c0008726b4b9d6a9f0e8b63ae55 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 29 Aug 2024 10:31:46 +0000
Subject: [PATCH 195/273] fix(deps): update dependency puppeteer-core to
 v23.2.1

---
 print/package-lock.json | 8 ++++----
 print/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index 4ec3ef5df8..f4c9f9e1c8 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -16,7 +16,7 @@
         "hal-json-vuex": "3.0.0-alpha.1",
         "isomorphic-dompurify": "2.15.0",
         "lodash": "4.17.21",
-        "puppeteer-core": "23.2.0",
+        "puppeteer-core": "23.2.1",
         "runes": "0.4.3",
         "vuex": "4.1.0"
       },
@@ -14232,9 +14232,9 @@
       }
     },
     "node_modules/puppeteer-core": {
-      "version": "23.2.0",
-      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.2.0.tgz",
-      "integrity": "sha512-OFyPp2oolGSesx6ZrpmorE5tCaCKY1Z5e/h8f6sB0NpiezenB72jdWBdOrvBO/bUXyq14XyGJsDRUsv0ZOPdZA==",
+      "version": "23.2.1",
+      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.2.1.tgz",
+      "integrity": "sha512-AIFWfQ4Sq+En+OgqIUy8VJmD8yJHMDyt+qEmEVKW07zu5DKDNqysO7fzBZp0W85ShJTUlUf+RleKl4XLwFpUPA==",
       "license": "Apache-2.0",
       "dependencies": {
         "@puppeteer/browsers": "2.3.1",
diff --git a/print/package.json b/print/package.json
index 9d617134de..1858bbd1ee 100644
--- a/print/package.json
+++ b/print/package.json
@@ -25,7 +25,7 @@
     "hal-json-vuex": "3.0.0-alpha.1",
     "isomorphic-dompurify": "2.15.0",
     "lodash": "4.17.21",
-    "puppeteer-core": "23.2.0",
+    "puppeteer-core": "23.2.1",
     "runes": "0.4.3",
     "vuex": "4.1.0"
   },

From 360f27f10168872c9b005902181e9952581fa0fa Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 29 Aug 2024 10:32:12 +0000
Subject: [PATCH 196/273] fix(deps): update dependency twig/cssinliner-extra to
 v3.12.0

---
 api/composer.lock | 29 ++++++++++++++---------------
 1 file changed, 14 insertions(+), 15 deletions(-)

diff --git a/api/composer.lock b/api/composer.lock
index a97d97cc08..3c06517c02 100644
--- a/api/composer.lock
+++ b/api/composer.lock
@@ -9732,20 +9732,20 @@
         },
         {
             "name": "twig/cssinliner-extra",
-            "version": "v3.11.0",
+            "version": "v3.12.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/twigphp/cssinliner-extra.git",
-                "reference": "7312a0275812b86918febb4b7a67d0cb084c5d02"
+                "reference": "31fd1f7bc79bf3b7c188316e02d78fdd0fc153e3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/7312a0275812b86918febb4b7a67d0cb084c5d02",
-                "reference": "7312a0275812b86918febb4b7a67d0cb084c5d02",
+                "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/31fd1f7bc79bf3b7c188316e02d78fdd0fc153e3",
+                "reference": "31fd1f7bc79bf3b7c188316e02d78fdd0fc153e3",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
+                "php": ">=8.0.2",
                 "symfony/deprecation-contracts": "^2.5|^3",
                 "tijsverkoyen/css-to-inline-styles": "^2.0",
                 "twig/twig": "^3.0"
@@ -9785,7 +9785,7 @@
                 "twig"
             ],
             "support": {
-                "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.11.0"
+                "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.12.0"
             },
             "funding": [
                 {
@@ -9797,7 +9797,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-06-21T06:22:31+00:00"
+            "time": "2024-08-26T15:29:01+00:00"
         },
         {
             "name": "twig/extra-bundle",
@@ -9875,24 +9875,23 @@
         },
         {
             "name": "twig/twig",
-            "version": "v3.11.0",
+            "version": "v3.12.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/twigphp/Twig.git",
-                "reference": "e80fb8ebba85c7341a97a9ebf825d7fd4b77708d"
+                "reference": "4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/Twig/zipball/e80fb8ebba85c7341a97a9ebf825d7fd4b77708d",
-                "reference": "e80fb8ebba85c7341a97a9ebf825d7fd4b77708d",
+                "url": "https://api.github.com/repos/twigphp/Twig/zipball/4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea",
+                "reference": "4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
+                "php": ">=8.0.2",
                 "symfony/deprecation-contracts": "^2.5|^3",
                 "symfony/polyfill-ctype": "^1.8",
                 "symfony/polyfill-mbstring": "^1.3",
-                "symfony/polyfill-php80": "^1.22",
                 "symfony/polyfill-php81": "^1.29"
             },
             "require-dev": {
@@ -9939,7 +9938,7 @@
             ],
             "support": {
                 "issues": "https://github.com/twigphp/Twig/issues",
-                "source": "https://github.com/twigphp/Twig/tree/v3.11.0"
+                "source": "https://github.com/twigphp/Twig/tree/v3.12.0"
             },
             "funding": [
                 {
@@ -9951,7 +9950,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-08-08T16:15:16+00:00"
+            "time": "2024-08-29T09:51:12+00:00"
         },
         {
             "name": "webmozart/assert",

From df8e3947a1f281cc550b561a18e1ed6f703defc4 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 29 Aug 2024 14:23:40 +0000
Subject: [PATCH 197/273] chore(deps): update helm release oauth2-proxy to
 v7.7.14

---
 .ops/ops-dashboard/Chart.lock | 10 +++++-----
 .ops/ops-dashboard/Chart.yaml |  6 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/.ops/ops-dashboard/Chart.lock b/.ops/ops-dashboard/Chart.lock
index f1dc15d299..d9d052bc89 100644
--- a/.ops/ops-dashboard/Chart.lock
+++ b/.ops/ops-dashboard/Chart.lock
@@ -1,15 +1,15 @@
 dependencies:
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.13
+  version: 7.7.14
 - name: kubernetes-dashboard
   repository: https://kubernetes.github.io/dashboard/
   version: 7.5.0
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.13
+  version: 7.7.14
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.13
-digest: sha256:3cca1c2d60fa30a95494b4735572c7c474e05e97a278410625260070f5d76f59
-generated: "2024-08-28T20:25:48.196065226Z"
+  version: 7.7.14
+digest: sha256:dc9775fbb9abf5af555187a62be23a4f4ef6fbdab0935f45441c9633b0069db5
+generated: "2024-08-29T14:23:26.274211321Z"
diff --git a/.ops/ops-dashboard/Chart.yaml b/.ops/ops-dashboard/Chart.yaml
index fcd4eb1560..786d20510a 100644
--- a/.ops/ops-dashboard/Chart.yaml
+++ b/.ops/ops-dashboard/Chart.yaml
@@ -26,16 +26,16 @@ appVersion: 0.1.0
 dependencies:
   - name: oauth2-proxy
     alias: grafana-proxy
-    version: 7.7.13
+    version: 7.7.14
     repository: https://oauth2-proxy.github.io/manifests
   - name: kubernetes-dashboard
     version: 7.5.0
     repository: https://kubernetes.github.io/dashboard/
   - name: oauth2-proxy
     alias: kubernetes-dashboard-proxy
-    version: 7.7.13
+    version: 7.7.14
     repository: https://oauth2-proxy.github.io/manifests
   - name: oauth2-proxy
     alias: logging-proxy
-    version: 7.7.13
+    version: 7.7.14
     repository: https://oauth2-proxy.github.io/manifests

From d2deb3f2d3b8b9cbc58c3d9fc1301e68730077a1 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 29 Aug 2024 14:24:31 +0000
Subject: [PATCH 198/273] fix(deps): update dependency twig/extra-bundle to
 v3.12.0

---
 api/composer.lock | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/api/composer.lock b/api/composer.lock
index 3c06517c02..d585c485d2 100644
--- a/api/composer.lock
+++ b/api/composer.lock
@@ -9801,20 +9801,20 @@
         },
         {
             "name": "twig/extra-bundle",
-            "version": "v3.11.0",
+            "version": "v3.12.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/twigphp/twig-extra-bundle.git",
-                "reference": "bf8a304eac15838d7724fdf64c345bdefbb75f03"
+                "reference": "a5427976a23c50b98d034d2f4c215ffaaaf5875f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/bf8a304eac15838d7724fdf64c345bdefbb75f03",
-                "reference": "bf8a304eac15838d7724fdf64c345bdefbb75f03",
+                "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/a5427976a23c50b98d034d2f4c215ffaaaf5875f",
+                "reference": "a5427976a23c50b98d034d2f4c215ffaaaf5875f",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.2.5",
+                "php": ">=8.0.2",
                 "symfony/framework-bundle": "^5.4|^6.4|^7.0",
                 "symfony/twig-bundle": "^5.4|^6.4|^7.0",
                 "twig/twig": "^3.0"
@@ -9859,7 +9859,7 @@
                 "twig"
             ],
             "support": {
-                "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.11.0"
+                "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.12.0"
             },
             "funding": [
                 {
@@ -9871,7 +9871,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-06-21T06:25:01+00:00"
+            "time": "2024-08-10T10:32:24+00:00"
         },
         {
             "name": "twig/twig",

From a7d67f73c3b530af569154704c052b4474f82862 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 29 Aug 2024 17:12:21 +0000
Subject: [PATCH 199/273] chore(deps): update dependency @nuxt/eslint to v0.5.4

---
 print/package-lock.json | 158 +++++++++++++++++++---------------------
 print/package.json      |   2 +-
 2 files changed, 74 insertions(+), 86 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index f4c9f9e1c8..7f66e1a9ae 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -24,7 +24,7 @@
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.1",
-        "@nuxt/eslint": "0.5.3",
+        "@nuxt/eslint": "0.5.4",
         "@nuxt/eslint-config": "0.5.3",
         "@nuxtjs/i18n": "8.5.1",
         "@nuxtjs/tailwindcss": "6.12.1",
@@ -2060,16 +2060,16 @@
       }
     },
     "node_modules/@nuxt/eslint": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint/-/eslint-0.5.3.tgz",
-      "integrity": "sha512-v5qhTou69hHEC0UmxJAPBS9h6fXVpyzCYIicEx6CyTbgYB6Vf1XJ5nSMVjWrgDu5LmUJ9tAEYvVRRmVQ3gxMIg==",
+      "version": "0.5.4",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint/-/eslint-0.5.4.tgz",
+      "integrity": "sha512-/meZHYxbzw3UXEjTAbEcvYKE1xHe5bp8Ze+5mBtZnqxjqH42pNvpK8Nd3/qkcarMsMFFY3chknZUa7MJkCcz4A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint/config-inspector": "^0.5.4",
         "@nuxt/devtools-kit": "^1.4.1",
-        "@nuxt/eslint-config": "0.5.3",
-        "@nuxt/eslint-plugin": "0.5.3",
+        "@nuxt/eslint-config": "0.5.4",
+        "@nuxt/eslint-plugin": "0.5.4",
         "@nuxt/kit": "^3.13.0",
         "chokidar": "^3.6.0",
         "eslint-flat-config-utils": "^0.3.1",
@@ -2138,6 +2138,64 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
+    "node_modules/@nuxt/eslint/node_modules/@nuxt/eslint-config": {
+      "version": "0.5.4",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.4.tgz",
+      "integrity": "sha512-RzIAtmCfHA5F7cYmc//M1uX6vgeyo3yOU9YHFS6DkE04+gpml4PcRgBpG2SPZWMlzWEZHwvkeNVcuCltuS8G9A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint/js": "^9.9.1",
+        "@nuxt/eslint-plugin": "0.5.4",
+        "@rushstack/eslint-patch": "^1.10.4",
+        "@stylistic/eslint-plugin": "^2.7.1",
+        "@typescript-eslint/eslint-plugin": "^8.3.0",
+        "@typescript-eslint/parser": "^8.3.0",
+        "eslint-config-flat-gitignore": "^0.2.0",
+        "eslint-flat-config-utils": "^0.3.1",
+        "eslint-plugin-import-x": "^4.1.1",
+        "eslint-plugin-jsdoc": "^50.2.2",
+        "eslint-plugin-regexp": "^2.6.0",
+        "eslint-plugin-unicorn": "^55.0.0",
+        "eslint-plugin-vue": "^9.27.0",
+        "globals": "^15.9.0",
+        "local-pkg": "^0.5.0",
+        "pathe": "^1.1.2",
+        "tslib": "^2.7.0",
+        "vue-eslint-parser": "^9.4.3"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0"
+      }
+    },
+    "node_modules/@nuxt/eslint/node_modules/@nuxt/eslint-plugin": {
+      "version": "0.5.4",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.4.tgz",
+      "integrity": "sha512-uJ02Mc+L4DEq/bi2LPLZ4ygZ7IhygOqQ9U65g2gOb8QRjQ1ZY2wucCNL2OAdtJgjJ6tLd504QhjDg8fwGENbpQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "^8.3.0",
+        "@typescript-eslint/utils": "^8.3.0"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0"
+      }
+    },
+    "node_modules/@nuxt/eslint/node_modules/eslint-config-flat-gitignore": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-flat-gitignore/-/eslint-config-flat-gitignore-0.2.0.tgz",
+      "integrity": "sha512-s4lsQLYX+76FCt3PZPwdLwWlqssa5SLufl2gopFmCo3PETOLY3OW5IrD3/l2R0FfYEJvd9BRJ19yJ+yfc5oW3g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint/compat": "^1.1.1",
+        "find-up-simple": "^1.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      }
+    },
     "node_modules/@nuxt/kit": {
       "version": "3.13.0",
       "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.0.tgz",
@@ -4243,53 +4301,14 @@
       }
     },
     "node_modules/@stylistic/eslint-plugin": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.6.4.tgz",
-      "integrity": "sha512-euUGnjzH8EOqEYTGk9dB2OBINp0FX1nuO7/k4fO82zNRBIKZgJoDwTLM4Ce+Om6W1Qmh1PrZjCr4jh4tMEXGPQ==",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.7.1.tgz",
+      "integrity": "sha512-JqnHom8CP14oOgPhwTPbn0QgsBJwgNySQSe00V9GQQDlY1tEqZUlK4jM2DIOJ5nE+oXoy51vZWHnHkfZ6rEruw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@stylistic/eslint-plugin-js": "2.6.4",
-        "@stylistic/eslint-plugin-jsx": "2.6.4",
-        "@stylistic/eslint-plugin-plus": "2.6.4",
-        "@stylistic/eslint-plugin-ts": "2.6.4",
-        "@types/eslint": "^9.6.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "peerDependencies": {
-        "eslint": ">=8.40.0"
-      }
-    },
-    "node_modules/@stylistic/eslint-plugin-js": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.6.4.tgz",
-      "integrity": "sha512-kx1hS3xTvzxZLdr/DCU/dLBE++vcP97sHeEFX2QXhk1Ipa4K1rzPOLw1HCbf4mU3s+7kHP5eYpDe+QteEOFLug==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/eslint": "^9.6.0",
-        "acorn": "^8.12.1",
-        "eslint-visitor-keys": "^4.0.0",
-        "espree": "^10.1.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "peerDependencies": {
-        "eslint": ">=8.40.0"
-      }
-    },
-    "node_modules/@stylistic/eslint-plugin-jsx": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-2.6.4.tgz",
-      "integrity": "sha512-bIvVhdtjmyu3S10V7QRIuawtCZSq9gRmzAX23ucjCOdSFzEwlq+di0IM0riBAvvQerrJL4SM6G3xgyPs8BSXIA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@stylistic/eslint-plugin-js": "^2.6.4",
-        "@types/eslint": "^9.6.0",
+        "@types/eslint": "^9.6.1",
+        "@typescript-eslint/utils": "^8.3.0",
         "eslint-visitor-keys": "^4.0.0",
         "espree": "^10.1.0",
         "estraverse": "^5.3.0",
@@ -4302,7 +4321,7 @@
         "eslint": ">=8.40.0"
       }
     },
-    "node_modules/@stylistic/eslint-plugin-jsx/node_modules/picomatch": {
+    "node_modules/@stylistic/eslint-plugin/node_modules/picomatch": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
       "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
@@ -4315,37 +4334,6 @@
         "url": "https://github.com/sponsors/jonschlinkert"
       }
     },
-    "node_modules/@stylistic/eslint-plugin-plus": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-2.6.4.tgz",
-      "integrity": "sha512-EuRvtxhf7Hv8OoMIePulP/6rBJIgPTu1l5GAm1780WcF1Cl8bOZXIn84Pdac5pNv6lVlzCOFm8MD3VE+2YROuA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/eslint": "^9.6.0"
-      },
-      "peerDependencies": {
-        "eslint": "*"
-      }
-    },
-    "node_modules/@stylistic/eslint-plugin-ts": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.6.4.tgz",
-      "integrity": "sha512-yxL8Hj6WkObw1jfiLpBzKy5yfxY6vwlwO4miq34ySErUjUecPV5jxfVbOe4q1QDPKemQGPq93v7sAQS5PzM8lA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@stylistic/eslint-plugin-js": "2.6.4",
-        "@types/eslint": "^9.6.0",
-        "@typescript-eslint/utils": "^8.1.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "peerDependencies": {
-        "eslint": ">=8.40.0"
-      }
-    },
     "node_modules/@tailwindcss/typography": {
       "version": "0.5.15",
       "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.15.tgz",
@@ -7826,9 +7814,9 @@
       }
     },
     "node_modules/eslint-plugin-import-x": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.1.0.tgz",
-      "integrity": "sha512-1BYJU0C5NBJLY4qukmwDbFrf2w8fLGEU9zZV3viWa7gNnbn4o4meQy5O4LVXn56eFh9Y4fQxu3udhIqQuVITvw==",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.1.1.tgz",
+      "integrity": "sha512-dBEM8fACIFNt4H7GoOaRmnH6evJW6JSTJTYYgmRd3vI4geBTjgDM/JyUDKUwIw0HDSyI+u7Vs3vFRXUo/BOAtA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/print/package.json b/print/package.json
index 1858bbd1ee..f5335fa151 100644
--- a/print/package.json
+++ b/print/package.json
@@ -33,7 +33,7 @@
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
     "@eslint/js": "9.9.1",
-    "@nuxt/eslint": "0.5.3",
+    "@nuxt/eslint": "0.5.4",
     "@nuxt/eslint-config": "0.5.3",
     "@nuxtjs/i18n": "8.5.1",
     "@nuxtjs/tailwindcss": "6.12.1",

From ac3d34cf69c8b5c3aa65c0b0cbda24dd21f4ac04 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 29 Aug 2024 18:29:20 +0000
Subject: [PATCH 200/273] chore(deps): update dependency @vitejs/plugin-vue to
 v5.1.3

---
 pdf/package-lock.json | 8 ++++----
 pdf/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index a1f93b2ea2..8985510d6a 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -17,7 +17,7 @@
         "@eslint/js": "9.9.1",
         "@intlify/core": "^9.10.2",
         "@rushstack/eslint-patch": "1.10.4",
-        "@vitejs/plugin-vue": "5.1.2",
+        "@vitejs/plugin-vue": "5.1.3",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/babel-preset-app": "5.0.8",
         "@vue/compiler-dom": "3.4.38",
@@ -3141,9 +3141,9 @@
       "license": "ISC"
     },
     "node_modules/@vitejs/plugin-vue": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.2.tgz",
-      "integrity": "sha512-nY9IwH12qeiJqumTCLJLE7IiNx7HZ39cbHaysEUd+Myvbz9KAqd2yq+U01Kab1R/H1BmiyM2ShTYlNH32Fzo3A==",
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.3.tgz",
+      "integrity": "sha512-3xbWsKEKXYlmX82aOHufFQVnkbMC/v8fLpWwh6hWOUrK5fbbtBh9Q/WWse27BFgSy2/e2c0fz5Scgya9h2GLhw==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/pdf/package.json b/pdf/package.json
index cbd39ba95c..05b45d1290 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -37,7 +37,7 @@
     "@eslint/js": "9.9.1",
     "@intlify/core": "^9.10.2",
     "@rushstack/eslint-patch": "1.10.4",
-    "@vitejs/plugin-vue": "5.1.2",
+    "@vitejs/plugin-vue": "5.1.3",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/babel-preset-app": "5.0.8",
     "@vue/compiler-dom": "3.4.38",

From d8f7ed189ae5cc841dfe7fc402ab5312e579e416 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 29 Aug 2024 18:29:51 +0000
Subject: [PATCH 201/273] fix(deps): update dependency rize/uri-template to
 v0.3.7

---
 api/composer.json |  2 +-
 api/composer.lock | 14 +++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 693d2fd43c..fbd7bb3ae0 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -23,7 +23,7 @@
         "phpdocumentor/reflection-docblock": "5.4.1",
         "phpmyadmin/sql-parser": "5.9.1",
         "ramsey/uuid": "4.7.6",
-        "rize/uri-template": "0.3.6",
+        "rize/uri-template": "0.3.7",
         "sentry/sentry-symfony": "5.0.1",
         "stof/doctrine-extensions-bundle": "1.12.0",
         "swaggest/json-schema": "0.12.42",
diff --git a/api/composer.lock b/api/composer.lock
index d585c485d2..b1b225e554 100644
--- a/api/composer.lock
+++ b/api/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": "7de7e74804a67c17934b6bb1a2742dad",
+    "content-hash": "24650dffe09b7d1af9de2358b2732abe",
     "packages": [
         {
             "name": "api-platform/core",
@@ -4729,16 +4729,16 @@
         },
         {
             "name": "rize/uri-template",
-            "version": "0.3.6",
+            "version": "0.3.7",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rize/UriTemplate.git",
-                "reference": "34efe65c79710eed0883884f2285ae6d4a0aad19"
+                "reference": "0c78eaa2e5241faf6c9f246beb53ef3fb31057fd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rize/UriTemplate/zipball/34efe65c79710eed0883884f2285ae6d4a0aad19",
-                "reference": "34efe65c79710eed0883884f2285ae6d4a0aad19",
+                "url": "https://api.github.com/repos/rize/UriTemplate/zipball/0c78eaa2e5241faf6c9f246beb53ef3fb31057fd",
+                "reference": "0c78eaa2e5241faf6c9f246beb53ef3fb31057fd",
                 "shasum": ""
             },
             "require": {
@@ -4771,7 +4771,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rize/UriTemplate/issues",
-                "source": "https://github.com/rize/UriTemplate/tree/0.3.6"
+                "source": "https://github.com/rize/UriTemplate/tree/0.3.7"
             },
             "funding": [
                 {
@@ -4787,7 +4787,7 @@
                     "type": "open_collective"
                 }
             ],
-            "time": "2024-03-10T08:07:49+00:00"
+            "time": "2024-08-29T15:43:27+00:00"
         },
         {
             "name": "sentry/sentry",

From 6c35a24be038bff9fd53513c05bb64956dec90f1 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 29 Aug 2024 18:37:37 +0000
Subject: [PATCH 202/273] chore(deps): update dependency @nuxt/eslint-config to
 v0.5.4

---
 print/package-lock.json | 82 ++++-------------------------------------
 print/package.json      |  2 +-
 2 files changed, 8 insertions(+), 76 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index 7f66e1a9ae..c581a186c5 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -25,7 +25,7 @@
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.1",
         "@nuxt/eslint": "0.5.4",
-        "@nuxt/eslint-config": "0.5.3",
+        "@nuxt/eslint-config": "0.5.4",
         "@nuxtjs/i18n": "8.5.1",
         "@nuxtjs/tailwindcss": "6.12.1",
         "@tailwindcss/typography": "0.5.15",
@@ -2095,50 +2095,6 @@
       }
     },
     "node_modules/@nuxt/eslint-config": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.3.tgz",
-      "integrity": "sha512-V/z6pvNLiUwh4Y2goaqIDA91rmglWujYyUTfm6e0uKillJPKyUXjPwlQyxtvfEtUyyaR/RnUswjzluL6xcZt2g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint/js": "^9.9.1",
-        "@nuxt/eslint-plugin": "0.5.3",
-        "@rushstack/eslint-patch": "^1.10.4",
-        "@stylistic/eslint-plugin": "^2.6.4",
-        "@typescript-eslint/eslint-plugin": "^8.3.0",
-        "@typescript-eslint/parser": "^8.3.0",
-        "eslint-config-flat-gitignore": "^0.1.8",
-        "eslint-flat-config-utils": "^0.3.1",
-        "eslint-plugin-import-x": "^4.0.0",
-        "eslint-plugin-jsdoc": "^50.2.2",
-        "eslint-plugin-regexp": "^2.6.0",
-        "eslint-plugin-unicorn": "^55.0.0",
-        "eslint-plugin-vue": "^9.27.0",
-        "globals": "^15.9.0",
-        "local-pkg": "^0.5.0",
-        "pathe": "^1.1.2",
-        "tslib": "^2.7.0",
-        "vue-eslint-parser": "^9.4.3"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
-      }
-    },
-    "node_modules/@nuxt/eslint-plugin": {
-      "version": "0.5.3",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.3.tgz",
-      "integrity": "sha512-Qcm33Jv+BIQNreSyG0Rold64iL0VBTaL6s+dh2/88UwKknnb5GWnkP19Op7+w1xkl74okky6LIPkHPSJq3Ue7A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "^8.3.0",
-        "@typescript-eslint/utils": "^8.3.0"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
-      }
-    },
-    "node_modules/@nuxt/eslint/node_modules/@nuxt/eslint-config": {
       "version": "0.5.4",
       "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.4.tgz",
       "integrity": "sha512-RzIAtmCfHA5F7cYmc//M1uX6vgeyo3yOU9YHFS6DkE04+gpml4PcRgBpG2SPZWMlzWEZHwvkeNVcuCltuS8G9A==",
@@ -2168,7 +2124,7 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
-    "node_modules/@nuxt/eslint/node_modules/@nuxt/eslint-plugin": {
+    "node_modules/@nuxt/eslint-plugin": {
       "version": "0.5.4",
       "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.4.tgz",
       "integrity": "sha512-uJ02Mc+L4DEq/bi2LPLZ4ygZ7IhygOqQ9U65g2gOb8QRjQ1ZY2wucCNL2OAdtJgjJ6tLd504QhjDg8fwGENbpQ==",
@@ -2182,20 +2138,6 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
-    "node_modules/@nuxt/eslint/node_modules/eslint-config-flat-gitignore": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-flat-gitignore/-/eslint-config-flat-gitignore-0.2.0.tgz",
-      "integrity": "sha512-s4lsQLYX+76FCt3PZPwdLwWlqssa5SLufl2gopFmCo3PETOLY3OW5IrD3/l2R0FfYEJvd9BRJ19yJ+yfc5oW3g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint/compat": "^1.1.1",
-        "find-up-simple": "^1.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      }
-    },
     "node_modules/@nuxt/kit": {
       "version": "3.13.0",
       "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.0.tgz",
@@ -7751,14 +7693,14 @@
       }
     },
     "node_modules/eslint-config-flat-gitignore": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmjs.org/eslint-config-flat-gitignore/-/eslint-config-flat-gitignore-0.1.8.tgz",
-      "integrity": "sha512-OEUbS2wzzYtUfshjOqzFo4Bl4lHykXUdM08TCnYNl7ki+niW4Q1R0j0FDFDr0vjVsI5ZFOz5LvluxOP+Ew+dYw==",
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-flat-gitignore/-/eslint-config-flat-gitignore-0.2.0.tgz",
+      "integrity": "sha512-s4lsQLYX+76FCt3PZPwdLwWlqssa5SLufl2gopFmCo3PETOLY3OW5IrD3/l2R0FfYEJvd9BRJ19yJ+yfc5oW3g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "find-up-simple": "^1.0.0",
-        "parse-gitignore": "^2.0.0"
+        "@eslint/compat": "^1.1.1",
+        "find-up-simple": "^1.0.0"
       },
       "funding": {
         "url": "https://github.com/sponsors/antfu"
@@ -12852,16 +12794,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/parse-gitignore": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-2.0.0.tgz",
-      "integrity": "sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=14"
-      }
-    },
     "node_modules/parse-imports": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.1.1.tgz",
diff --git a/print/package.json b/print/package.json
index f5335fa151..afce38281f 100644
--- a/print/package.json
+++ b/print/package.json
@@ -34,7 +34,7 @@
     "@eslint/eslintrc": "3.1.0",
     "@eslint/js": "9.9.1",
     "@nuxt/eslint": "0.5.4",
-    "@nuxt/eslint-config": "0.5.3",
+    "@nuxt/eslint-config": "0.5.4",
     "@nuxtjs/i18n": "8.5.1",
     "@nuxtjs/tailwindcss": "6.12.1",
     "@tailwindcss/typography": "0.5.15",

From 74c3c3c3c401008c9288800ed9f311615ca83281 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 29 Aug 2024 21:27:45 +0000
Subject: [PATCH 203/273] fix(deps): update dependency phpmyadmin/sql-parser to
 v5.10.0

---
 api/composer.json |  2 +-
 api/composer.lock | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index fbd7bb3ae0..6e6690c3d0 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -21,7 +21,7 @@
         "lexik/jwt-authentication-bundle": "3.1.0",
         "nelmio/cors-bundle": "2.5.0",
         "phpdocumentor/reflection-docblock": "5.4.1",
-        "phpmyadmin/sql-parser": "5.9.1",
+        "phpmyadmin/sql-parser": "5.10.0",
         "ramsey/uuid": "4.7.6",
         "rize/uri-template": "0.3.7",
         "sentry/sentry-symfony": "5.0.1",
diff --git a/api/composer.lock b/api/composer.lock
index b1b225e554..42de1a4f62 100644
--- a/api/composer.lock
+++ b/api/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": "24650dffe09b7d1af9de2358b2732abe",
+    "content-hash": "10de57a2363f13e6e4ba3dd9ce24aa33",
     "packages": [
         {
             "name": "api-platform/core",
@@ -3904,16 +3904,16 @@
         },
         {
             "name": "phpmyadmin/sql-parser",
-            "version": "5.9.1",
+            "version": "5.10.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpmyadmin/sql-parser.git",
-                "reference": "169a9f11f1957ea36607c9b29eac1b48679f1ecc"
+                "reference": "91d980ab76c3f152481e367f62b921adc38af451"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/169a9f11f1957ea36607c9b29eac1b48679f1ecc",
-                "reference": "169a9f11f1957ea36607c9b29eac1b48679f1ecc",
+                "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/91d980ab76c3f152481e367f62b921adc38af451",
+                "reference": "91d980ab76c3f152481e367f62b921adc38af451",
                 "shasum": ""
             },
             "require": {
@@ -3987,7 +3987,7 @@
                     "type": "other"
                 }
             ],
-            "time": "2024-08-13T19:01:01+00:00"
+            "time": "2024-08-29T20:56:34+00:00"
         },
         {
             "name": "phpstan/phpdoc-parser",

From c02d1559ccd58b48eb60e9eceb09e839042c5fd3 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 30 Aug 2024 00:13:48 +0000
Subject: [PATCH 204/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.41

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 7be056cbca..2329d7514f 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.40
+    image: amazon/aws-cli:2.17.41
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From 112f3b849a1d7dd15eb4d566339e966dd5dd34be Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 30 Aug 2024 00:22:24 +0000
Subject: [PATCH 205/273] chore(deps): update dependency symfony/maker-bundle
 to v1.61.0

---
 api/composer.json |  2 +-
 api/composer.lock | 14 +++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 6e6690c3d0..b9f4c6ee6f 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -64,7 +64,7 @@
         "symfony/browser-kit": "7.1.1",
         "symfony/css-selector": "7.1.1",
         "symfony/debug-bundle": "7.1.1",
-        "symfony/maker-bundle": "1.60.0",
+        "symfony/maker-bundle": "1.61.0",
         "symfony/phpunit-bridge": "7.1.3",
         "symfony/stopwatch": "7.1.1",
         "symfony/var-dumper": "7.1.3",
diff --git a/api/composer.lock b/api/composer.lock
index 42de1a4f62..d35621bc32 100644
--- a/api/composer.lock
+++ b/api/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": "10de57a2363f13e6e4ba3dd9ce24aa33",
+    "content-hash": "23850c0dce6d6caa82ed1d413194abc5",
     "packages": [
         {
             "name": "api-platform/core",
@@ -14508,16 +14508,16 @@
         },
         {
             "name": "symfony/maker-bundle",
-            "version": "v1.60.0",
+            "version": "v1.61.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/maker-bundle.git",
-                "reference": "c305a02a22974670f359d4274c9431e1a191f559"
+                "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/c305a02a22974670f359d4274c9431e1a191f559",
-                "reference": "c305a02a22974670f359d4274c9431e1a191f559",
+                "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/a3b7f14d349f8f44ed752d4dde2263f77510cc18",
+                "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18",
                 "shasum": ""
             },
             "require": {
@@ -14580,7 +14580,7 @@
             ],
             "support": {
                 "issues": "https://github.com/symfony/maker-bundle/issues",
-                "source": "https://github.com/symfony/maker-bundle/tree/v1.60.0"
+                "source": "https://github.com/symfony/maker-bundle/tree/v1.61.0"
             },
             "funding": [
                 {
@@ -14596,7 +14596,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-06-10T06:03:18+00:00"
+            "time": "2024-08-29T22:50:23+00:00"
         },
         {
             "name": "symfony/phpunit-bridge",

From ee1ae3fe42c8563155def8602fa919bb8471813a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 30 Aug 2024 07:41:17 +0000
Subject: [PATCH 206/273] fix(deps): update dependency rize/uri-template to
 v0.3.8

---
 api/composer.json |  2 +-
 api/composer.lock | 14 +++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index b9f4c6ee6f..f1eb32bd7b 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -23,7 +23,7 @@
         "phpdocumentor/reflection-docblock": "5.4.1",
         "phpmyadmin/sql-parser": "5.10.0",
         "ramsey/uuid": "4.7.6",
-        "rize/uri-template": "0.3.7",
+        "rize/uri-template": "0.3.8",
         "sentry/sentry-symfony": "5.0.1",
         "stof/doctrine-extensions-bundle": "1.12.0",
         "swaggest/json-schema": "0.12.42",
diff --git a/api/composer.lock b/api/composer.lock
index d35621bc32..ef78a7a419 100644
--- a/api/composer.lock
+++ b/api/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": "23850c0dce6d6caa82ed1d413194abc5",
+    "content-hash": "a1fb8818f3315adecc255e59d42e31cb",
     "packages": [
         {
             "name": "api-platform/core",
@@ -4729,16 +4729,16 @@
         },
         {
             "name": "rize/uri-template",
-            "version": "0.3.7",
+            "version": "0.3.8",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rize/UriTemplate.git",
-                "reference": "0c78eaa2e5241faf6c9f246beb53ef3fb31057fd"
+                "reference": "34a5b96d0b65a5dddb7d20f09b6527a43faede24"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rize/UriTemplate/zipball/0c78eaa2e5241faf6c9f246beb53ef3fb31057fd",
-                "reference": "0c78eaa2e5241faf6c9f246beb53ef3fb31057fd",
+                "url": "https://api.github.com/repos/rize/UriTemplate/zipball/34a5b96d0b65a5dddb7d20f09b6527a43faede24",
+                "reference": "34a5b96d0b65a5dddb7d20f09b6527a43faede24",
                 "shasum": ""
             },
             "require": {
@@ -4771,7 +4771,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rize/UriTemplate/issues",
-                "source": "https://github.com/rize/UriTemplate/tree/0.3.7"
+                "source": "https://github.com/rize/UriTemplate/tree/0.3.8"
             },
             "funding": [
                 {
@@ -4787,7 +4787,7 @@
                     "type": "open_collective"
                 }
             ],
-            "time": "2024-08-29T15:43:27+00:00"
+            "time": "2024-08-30T07:09:40+00:00"
         },
         {
             "name": "sentry/sentry",

From 0042a75097a4369a642b7f1ae8ae727c359d4af3 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 30 Aug 2024 09:27:08 +0000
Subject: [PATCH 207/273] fix(deps): update dependency webonyx/graphql-php to
 v15.13.0

---
 api/composer.json |  2 +-
 api/composer.lock | 18 +++++++++---------
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index f1eb32bd7b..3fdc935811 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -48,7 +48,7 @@
         "symfony/yaml": "7.1.1",
         "twig/cssinliner-extra": "^3.4",
         "twig/extra-bundle": "^3.4",
-        "webonyx/graphql-php": "15.12.5"
+        "webonyx/graphql-php": "15.13.0"
     },
     "require-dev": {
         "brianium/paratest": "^7.4",
diff --git a/api/composer.lock b/api/composer.lock
index ef78a7a419..d8deb42967 100644
--- a/api/composer.lock
+++ b/api/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": "a1fb8818f3315adecc255e59d42e31cb",
+    "content-hash": "10a37b948c6f25fb9b48fd1a055e7791",
     "packages": [
         {
             "name": "api-platform/core",
@@ -10012,16 +10012,16 @@
         },
         {
             "name": "webonyx/graphql-php",
-            "version": "v15.12.5",
+            "version": "v15.13.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webonyx/graphql-php.git",
-                "reference": "7bcd31d1dcf67781ed5cb493b22c519c539c05e6"
+                "reference": "b3b8c5bba097b0db95098fadb63e8980e184a03b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/7bcd31d1dcf67781ed5cb493b22c519c539c05e6",
-                "reference": "7bcd31d1dcf67781ed5cb493b22c519c539c05e6",
+                "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/b3b8c5bba097b0db95098fadb63e8980e184a03b",
+                "reference": "b3b8c5bba097b0db95098fadb63e8980e184a03b",
                 "shasum": ""
             },
             "require": {
@@ -10034,12 +10034,12 @@
                 "amphp/http-server": "^2.1",
                 "dms/phpunit-arraysubset-asserts": "dev-master",
                 "ergebnis/composer-normalize": "^2.28",
-                "friendsofphp/php-cs-fixer": "3.59.3",
+                "friendsofphp/php-cs-fixer": "3.63.2",
                 "mll-lab/php-cs-fixer-config": "^5",
                 "nyholm/psr7": "^1.5",
                 "phpbench/phpbench": "^1.2",
                 "phpstan/extension-installer": "^1.1",
-                "phpstan/phpstan": "1.11.5",
+                "phpstan/phpstan": "1.12.0",
                 "phpstan/phpstan-phpunit": "1.4.0",
                 "phpstan/phpstan-strict-rules": "1.6.0",
                 "phpunit/phpunit": "^9.5 || ^10.5.21",
@@ -10074,7 +10074,7 @@
             ],
             "support": {
                 "issues": "https://github.com/webonyx/graphql-php/issues",
-                "source": "https://github.com/webonyx/graphql-php/tree/v15.12.5"
+                "source": "https://github.com/webonyx/graphql-php/tree/v15.13.0"
             },
             "funding": [
                 {
@@ -10082,7 +10082,7 @@
                     "type": "open_collective"
                 }
             ],
-            "time": "2024-06-23T11:30:58+00:00"
+            "time": "2024-08-29T10:55:21+00:00"
         },
         {
             "name": "willdurand/negotiation",

From af0ac0eb980b3df220cbf681950dc7db42e50f8b Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 30 Aug 2024 15:49:24 +0000
Subject: [PATCH 208/273] fix(deps): update dependency api-platform/core to
 v3.3.12

---
 api/composer.json |  2 +-
 api/composer.lock | 14 +++++++-------
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 3fdc935811..51d997bee5 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -5,7 +5,7 @@
         "php": ">=8.1.0",
         "ext-ctype": "*",
         "ext-iconv": "*",
-        "api-platform/core": "3.3.11",
+        "api-platform/core": "3.3.12",
         "composer/package-versions-deprecated": "1.11.99",
         "cweagans/composer-patches": "1.7.3",
         "doctrine/doctrine-bundle": "2.12.0",
diff --git a/api/composer.lock b/api/composer.lock
index d8deb42967..28e0288132 100644
--- a/api/composer.lock
+++ b/api/composer.lock
@@ -4,20 +4,20 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "10a37b948c6f25fb9b48fd1a055e7791",
+    "content-hash": "c74844197da6455c382f89d98e5edb75",
     "packages": [
         {
             "name": "api-platform/core",
-            "version": "v3.3.11",
+            "version": "v3.3.12",
             "source": {
                 "type": "git",
                 "url": "https://github.com/api-platform/core.git",
-                "reference": "ea7d443376dfa1f9a05b53060049e7837d2ec7d4"
+                "reference": "e2eeb6b710f96542b75357a13d8d69ed4d8be5e2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/api-platform/core/zipball/ea7d443376dfa1f9a05b53060049e7837d2ec7d4",
-                "reference": "ea7d443376dfa1f9a05b53060049e7837d2ec7d4",
+                "url": "https://api.github.com/repos/api-platform/core/zipball/e2eeb6b710f96542b75357a13d8d69ed4d8be5e2",
+                "reference": "e2eeb6b710f96542b75357a13d8d69ed4d8be5e2",
                 "shasum": ""
             },
             "require": {
@@ -190,9 +190,9 @@
             ],
             "support": {
                 "issues": "https://github.com/api-platform/core/issues",
-                "source": "https://github.com/api-platform/core/tree/v3.3.11"
+                "source": "https://github.com/api-platform/core/tree/v3.3.12"
             },
-            "time": "2024-07-20T08:19:33+00:00"
+            "time": "2024-08-30T14:44:44+00:00"
         },
         {
             "name": "behat/transliterator",

From a5d6f75fdfc561c6bd51b74b54eae4d6cbe582dd Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 30 Aug 2024 23:02:46 +0000
Subject: [PATCH 209/273] chore(deps): update
 mheap/github-action-required-labels digest to d25134c

---
 .github/workflows/pull-request-rules.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/pull-request-rules.yml b/.github/workflows/pull-request-rules.yml
index 7a87f54a5f..7aba4abef9 100644
--- a/.github/workflows/pull-request-rules.yml
+++ b/.github/workflows/pull-request-rules.yml
@@ -13,7 +13,7 @@ jobs:
     name: No "Meeting Discuss" label
     runs-on: ubuntu-latest
     steps:
-      - uses: mheap/github-action-required-labels@5847eef68201219cf0a4643ea7be61e77837bbce # v5
+      - uses: mheap/github-action-required-labels@d25134c992b943fb6ad00c25ea00eb5988c0a9dd # v5
         if: github.event_name == 'pull_request'
         with:
           mode: exactly

From 0aaed333925ee9edba05da343de94a56a907375d Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 30 Aug 2024 23:02:51 +0000
Subject: [PATCH 210/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.42

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 2329d7514f..379879049a 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.41
+    image: amazon/aws-cli:2.17.42
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From 5ea4746de676374ff60ffd19b1d5748c3ba3c001 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 31 Aug 2024 01:11:24 +0000
Subject: [PATCH 211/273] fix(deps): update dependency axios to v1.7.6

---
 frontend/package-lock.json | 8 ++++----
 frontend/package.json      | 2 +-
 print/package-lock.json    | 8 ++++----
 print/package.json         | 2 +-
 4 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index be19ae3859..d0a2025395 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -40,7 +40,7 @@
         "@zxcvbn-ts/language-fr": "3.0.2",
         "@zxcvbn-ts/language-it": "3.0.2",
         "assert": "2.1.0",
-        "axios": "1.7.5",
+        "axios": "1.7.6",
         "colorjs.io": "0.5.2",
         "comlink": "4.4.1",
         "dayjs": "1.11.13",
@@ -5203,9 +5203,9 @@
       }
     },
     "node_modules/axios": {
-      "version": "1.7.5",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz",
-      "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==",
+      "version": "1.7.6",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.6.tgz",
+      "integrity": "sha512-Ekur6XDwhnJ5RgOCaxFnXyqlPALI3rVeukZMwOdfghW7/wGz784BYKiQq+QD8NPcr91KRo30KfHOchyijwWw7g==",
       "license": "MIT",
       "dependencies": {
         "follow-redirects": "^1.15.6",
diff --git a/frontend/package.json b/frontend/package.json
index c115f21522..b3119b27e0 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -52,7 +52,7 @@
     "@zxcvbn-ts/language-fr": "3.0.2",
     "@zxcvbn-ts/language-it": "3.0.2",
     "assert": "2.1.0",
-    "axios": "1.7.5",
+    "axios": "1.7.6",
     "colorjs.io": "0.5.2",
     "comlink": "4.4.1",
     "dayjs": "1.11.13",
diff --git a/print/package-lock.json b/print/package-lock.json
index c581a186c5..556523d2df 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -9,7 +9,7 @@
         "@jamescoyle/vue-icon": "0.1.2",
         "@mdi/js": "7.4.47",
         "@sentry/node": "8.27.0",
-        "axios": "1.7.5",
+        "axios": "1.7.6",
         "colorjs.io": "0.5.2",
         "dayjs": "1.11.13",
         "deepmerge": "4.3.1",
@@ -5716,9 +5716,9 @@
       }
     },
     "node_modules/axios": {
-      "version": "1.7.5",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz",
-      "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==",
+      "version": "1.7.6",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.6.tgz",
+      "integrity": "sha512-Ekur6XDwhnJ5RgOCaxFnXyqlPALI3rVeukZMwOdfghW7/wGz784BYKiQq+QD8NPcr91KRo30KfHOchyijwWw7g==",
       "license": "MIT",
       "dependencies": {
         "follow-redirects": "^1.15.6",
diff --git a/print/package.json b/print/package.json
index afce38281f..1254c38d7a 100644
--- a/print/package.json
+++ b/print/package.json
@@ -18,7 +18,7 @@
     "@jamescoyle/vue-icon": "0.1.2",
     "@mdi/js": "7.4.47",
     "@sentry/node": "8.27.0",
-    "axios": "1.7.5",
+    "axios": "1.7.6",
     "colorjs.io": "0.5.2",
     "dayjs": "1.11.13",
     "deepmerge": "4.3.1",

From 3217c99fbeac132a75000a012ad089e6be360220 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 31 Aug 2024 01:11:41 +0000
Subject: [PATCH 212/273] fix(deps): update symfony packages to v7.1.4

---
 api/composer.json |  24 ++---
 api/composer.lock | 256 +++++++++++++++++++++++-----------------------
 2 files changed, 140 insertions(+), 140 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 51d997bee5..af27d355d9 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -28,24 +28,24 @@
         "stof/doctrine-extensions-bundle": "1.12.0",
         "swaggest/json-schema": "0.12.42",
         "symfony/asset": "7.1.1",
-        "symfony/console": "7.1.3",
+        "symfony/console": "7.1.4",
         "symfony/dotenv": "7.1.3",
-        "symfony/expression-language": "7.1.1",
+        "symfony/expression-language": "7.1.4",
         "symfony/flex": "2.4.6",
-        "symfony/framework-bundle": "7.1.3",
-        "symfony/http-client": "7.1.3",
+        "symfony/framework-bundle": "7.1.4",
+        "symfony/http-client": "7.1.4",
         "symfony/intl": "7.1.1",
         "symfony/mailer": "7.1.2",
         "symfony/monolog-bundle": "3.10.0",
-        "symfony/property-access": "7.1.1",
+        "symfony/property-access": "7.1.4",
         "symfony/property-info": "7.1.3",
         "symfony/runtime": "7.1.1",
-        "symfony/security-bundle": "7.1.3",
-        "symfony/serializer": "7.1.3",
+        "symfony/security-bundle": "7.1.4",
+        "symfony/serializer": "7.1.4",
         "symfony/translation": "7.1.3",
         "symfony/twig-bundle": "7.1.1",
-        "symfony/validator": "7.1.3",
-        "symfony/yaml": "7.1.1",
+        "symfony/validator": "7.1.4",
+        "symfony/yaml": "7.1.4",
         "twig/cssinliner-extra": "^3.4",
         "twig/extra-bundle": "^3.4",
         "webonyx/graphql-php": "15.13.0"
@@ -65,10 +65,10 @@
         "symfony/css-selector": "7.1.1",
         "symfony/debug-bundle": "7.1.1",
         "symfony/maker-bundle": "1.61.0",
-        "symfony/phpunit-bridge": "7.1.3",
+        "symfony/phpunit-bridge": "7.1.4",
         "symfony/stopwatch": "7.1.1",
-        "symfony/var-dumper": "7.1.3",
-        "symfony/web-profiler-bundle": "7.1.3",
+        "symfony/var-dumper": "7.1.4",
+        "symfony/web-profiler-bundle": "7.1.4",
         "vimeo/psalm": "5.25.0"
     },
     "config": {
diff --git a/api/composer.lock b/api/composer.lock
index 28e0288132..c92557f94d 100644
--- a/api/composer.lock
+++ b/api/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": "c74844197da6455c382f89d98e5edb75",
+    "content-hash": "05f49652fabdf404c97aed2ac8424699",
     "packages": [
         {
             "name": "api-platform/core",
@@ -5225,16 +5225,16 @@
         },
         {
             "name": "symfony/cache",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/cache.git",
-                "reference": "8ac37acee794372f9732fe8a61a8221f6762148e"
+                "reference": "b61e464d7687bb7e8f677d5031c632bf3820df18"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/cache/zipball/8ac37acee794372f9732fe8a61a8221f6762148e",
-                "reference": "8ac37acee794372f9732fe8a61a8221f6762148e",
+                "url": "https://api.github.com/repos/symfony/cache/zipball/b61e464d7687bb7e8f677d5031c632bf3820df18",
+                "reference": "b61e464d7687bb7e8f677d5031c632bf3820df18",
                 "shasum": ""
             },
             "require": {
@@ -5302,7 +5302,7 @@
                 "psr6"
             ],
             "support": {
-                "source": "https://github.com/symfony/cache/tree/v7.1.3"
+                "source": "https://github.com/symfony/cache/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -5318,7 +5318,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-17T06:10:24+00:00"
+            "time": "2024-08-12T09:59:40+00:00"
         },
         {
             "name": "symfony/cache-contracts",
@@ -5547,16 +5547,16 @@
         },
         {
             "name": "symfony/console",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/console.git",
-                "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9"
+                "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/console/zipball/cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9",
-                "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9",
+                "url": "https://api.github.com/repos/symfony/console/zipball/1eed7af6961d763e7832e874d7f9b21c3ea9c111",
+                "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111",
                 "shasum": ""
             },
             "require": {
@@ -5620,7 +5620,7 @@
                 "terminal"
             ],
             "support": {
-                "source": "https://github.com/symfony/console/tree/v7.1.3"
+                "source": "https://github.com/symfony/console/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -5636,7 +5636,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-26T12:41:01+00:00"
+            "time": "2024-08-15T22:48:53+00:00"
         },
         {
             "name": "symfony/css-selector",
@@ -5705,16 +5705,16 @@
         },
         {
             "name": "symfony/dependency-injection",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/dependency-injection.git",
-                "reference": "8126f0be4ff984e4db0140e60917900a53facb49"
+                "reference": "5320e0bc2c9e2d7450bb4091e497a305a68b28ed"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/8126f0be4ff984e4db0140e60917900a53facb49",
-                "reference": "8126f0be4ff984e4db0140e60917900a53facb49",
+                "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/5320e0bc2c9e2d7450bb4091e497a305a68b28ed",
+                "reference": "5320e0bc2c9e2d7450bb4091e497a305a68b28ed",
                 "shasum": ""
             },
             "require": {
@@ -5765,7 +5765,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.1.3"
+                "source": "https://github.com/symfony/dependency-injection/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -5781,7 +5781,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-26T07:35:39+00:00"
+            "time": "2024-08-29T08:16:25+00:00"
         },
         {
             "name": "symfony/deprecation-contracts",
@@ -6265,16 +6265,16 @@
         },
         {
             "name": "symfony/expression-language",
-            "version": "v7.1.1",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/expression-language.git",
-                "reference": "463cb95f80c14136175f4e03f7f6199b01c6b8b4"
+                "reference": "b9e4bc6685d513c10235145ed1042a6081635806"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/expression-language/zipball/463cb95f80c14136175f4e03f7f6199b01c6b8b4",
-                "reference": "463cb95f80c14136175f4e03f7f6199b01c6b8b4",
+                "url": "https://api.github.com/repos/symfony/expression-language/zipball/b9e4bc6685d513c10235145ed1042a6081635806",
+                "reference": "b9e4bc6685d513c10235145ed1042a6081635806",
                 "shasum": ""
             },
             "require": {
@@ -6309,7 +6309,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.1.1"
+                "source": "https://github.com/symfony/expression-language/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -6325,7 +6325,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-05-31T14:57:53+00:00"
+            "time": "2024-08-12T09:59:40+00:00"
         },
         {
             "name": "symfony/filesystem",
@@ -6395,16 +6395,16 @@
         },
         {
             "name": "symfony/finder",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/finder.git",
-                "reference": "717c6329886f32dc65e27461f80f2a465412fdca"
+                "reference": "d95bbf319f7d052082fb7af147e0f835a695e823"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/finder/zipball/717c6329886f32dc65e27461f80f2a465412fdca",
-                "reference": "717c6329886f32dc65e27461f80f2a465412fdca",
+                "url": "https://api.github.com/repos/symfony/finder/zipball/d95bbf319f7d052082fb7af147e0f835a695e823",
+                "reference": "d95bbf319f7d052082fb7af147e0f835a695e823",
                 "shasum": ""
             },
             "require": {
@@ -6439,7 +6439,7 @@
             "description": "Finds files and directories via an intuitive fluent interface",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/finder/tree/v7.1.3"
+                "source": "https://github.com/symfony/finder/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -6455,7 +6455,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-24T07:08:44+00:00"
+            "time": "2024-08-13T14:28:19+00:00"
         },
         {
             "name": "symfony/flex",
@@ -6524,16 +6524,16 @@
         },
         {
             "name": "symfony/framework-bundle",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/framework-bundle.git",
-                "reference": "a32ec544bd501eb4619eb977860ad3076ee55061"
+                "reference": "711af4eefcb4054a9c93e44b403626e1826bcddd"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/a32ec544bd501eb4619eb977860ad3076ee55061",
-                "reference": "a32ec544bd501eb4619eb977860ad3076ee55061",
+                "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/711af4eefcb4054a9c93e44b403626e1826bcddd",
+                "reference": "711af4eefcb4054a9c93e44b403626e1826bcddd",
                 "shasum": ""
             },
             "require": {
@@ -6651,7 +6651,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.1.3"
+                "source": "https://github.com/symfony/framework-bundle/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -6667,20 +6667,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-26T13:24:34+00:00"
+            "time": "2024-08-11T16:10:02+00:00"
         },
         {
             "name": "symfony/http-client",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-client.git",
-                "reference": "b79858aa7a051ea791b0d50269a234a0b50cb231"
+                "reference": "a8f8d60b30b331cf4b743b3632e5acdba3f8285c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-client/zipball/b79858aa7a051ea791b0d50269a234a0b50cb231",
-                "reference": "b79858aa7a051ea791b0d50269a234a0b50cb231",
+                "url": "https://api.github.com/repos/symfony/http-client/zipball/a8f8d60b30b331cf4b743b3632e5acdba3f8285c",
+                "reference": "a8f8d60b30b331cf4b743b3632e5acdba3f8285c",
                 "shasum": ""
             },
             "require": {
@@ -6745,7 +6745,7 @@
                 "http"
             ],
             "support": {
-                "source": "https://github.com/symfony/http-client/tree/v7.1.3"
+                "source": "https://github.com/symfony/http-client/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -6761,7 +6761,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-17T06:10:24+00:00"
+            "time": "2024-08-26T06:32:37+00:00"
         },
         {
             "name": "symfony/http-client-contracts",
@@ -6920,16 +6920,16 @@
         },
         {
             "name": "symfony/http-kernel",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/http-kernel.git",
-                "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186"
+                "reference": "6efcbd1b3f444f631c386504fc83eeca25963747"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/db9702f3a04cc471ec8c70e881825db26ac5f186",
-                "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186",
+                "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6efcbd1b3f444f631c386504fc83eeca25963747",
+                "reference": "6efcbd1b3f444f631c386504fc83eeca25963747",
                 "shasum": ""
             },
             "require": {
@@ -7014,7 +7014,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.1.3"
+                "source": "https://github.com/symfony/http-kernel/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -7030,7 +7030,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-26T14:58:15+00:00"
+            "time": "2024-08-30T17:02:28+00:00"
         },
         {
             "name": "symfony/intl",
@@ -7200,16 +7200,16 @@
         },
         {
             "name": "symfony/mime",
-            "version": "v7.1.2",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/mime.git",
-                "reference": "26a00b85477e69a4bab63b66c5dce64f18b0cbfc"
+                "reference": "ccaa6c2503db867f472a587291e764d6a1e58758"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/mime/zipball/26a00b85477e69a4bab63b66c5dce64f18b0cbfc",
-                "reference": "26a00b85477e69a4bab63b66c5dce64f18b0cbfc",
+                "url": "https://api.github.com/repos/symfony/mime/zipball/ccaa6c2503db867f472a587291e764d6a1e58758",
+                "reference": "ccaa6c2503db867f472a587291e764d6a1e58758",
                 "shasum": ""
             },
             "require": {
@@ -7264,7 +7264,7 @@
                 "mime-type"
             ],
             "support": {
-                "source": "https://github.com/symfony/mime/tree/v7.1.2"
+                "source": "https://github.com/symfony/mime/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -7280,7 +7280,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-06-28T10:03:55+00:00"
+            "time": "2024-08-13T14:28:19+00:00"
         },
         {
             "name": "symfony/monolog-bridge",
@@ -7742,16 +7742,16 @@
         },
         {
             "name": "symfony/property-access",
-            "version": "v7.1.1",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/property-access.git",
-                "reference": "74e39e6a6276b8e384f34c6ddbc10a6c9a60193a"
+                "reference": "6c709f97103355016e5782d0622437ae381012ad"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/property-access/zipball/74e39e6a6276b8e384f34c6ddbc10a6c9a60193a",
-                "reference": "74e39e6a6276b8e384f34c6ddbc10a6c9a60193a",
+                "url": "https://api.github.com/repos/symfony/property-access/zipball/6c709f97103355016e5782d0622437ae381012ad",
+                "reference": "6c709f97103355016e5782d0622437ae381012ad",
                 "shasum": ""
             },
             "require": {
@@ -7798,7 +7798,7 @@
                 "reflection"
             ],
             "support": {
-                "source": "https://github.com/symfony/property-access/tree/v7.1.1"
+                "source": "https://github.com/symfony/property-access/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -7814,7 +7814,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-05-31T14:57:53+00:00"
+            "time": "2024-08-30T16:12:47+00:00"
         },
         {
             "name": "symfony/property-info",
@@ -7985,16 +7985,16 @@
         },
         {
             "name": "symfony/routing",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/routing.git",
-                "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0"
+                "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/routing/zipball/8a908a3f22d5a1b5d297578c2ceb41b02fa916d0",
-                "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0",
+                "url": "https://api.github.com/repos/symfony/routing/zipball/1500aee0094a3ce1c92626ed8cf3c2037e86f5a7",
+                "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7",
                 "shasum": ""
             },
             "require": {
@@ -8046,7 +8046,7 @@
                 "url"
             ],
             "support": {
-                "source": "https://github.com/symfony/routing/tree/v7.1.3"
+                "source": "https://github.com/symfony/routing/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -8062,7 +8062,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-17T06:10:24+00:00"
+            "time": "2024-08-29T08:16:25+00:00"
         },
         {
             "name": "symfony/runtime",
@@ -8145,16 +8145,16 @@
         },
         {
             "name": "symfony/security-bundle",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/security-bundle.git",
-                "reference": "4f77a89e21c2e700b5fbbf3c1eccd71b9a5d69ad"
+                "reference": "5e10107856ff64d477c61fed7bcbb8a16125ea01"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/security-bundle/zipball/4f77a89e21c2e700b5fbbf3c1eccd71b9a5d69ad",
-                "reference": "4f77a89e21c2e700b5fbbf3c1eccd71b9a5d69ad",
+                "url": "https://api.github.com/repos/symfony/security-bundle/zipball/5e10107856ff64d477c61fed7bcbb8a16125ea01",
+                "reference": "5e10107856ff64d477c61fed7bcbb8a16125ea01",
                 "shasum": ""
             },
             "require": {
@@ -8163,7 +8163,7 @@
                 "php": ">=8.2",
                 "symfony/clock": "^6.4|^7.0",
                 "symfony/config": "^6.4|^7.0",
-                "symfony/dependency-injection": "^6.4|^7.0",
+                "symfony/dependency-injection": "^6.4.11|^7.1.4",
                 "symfony/event-dispatcher": "^6.4|^7.0",
                 "symfony/http-foundation": "^6.4|^7.0",
                 "symfony/http-kernel": "^6.4|^7.0",
@@ -8231,7 +8231,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.1.3"
+                "source": "https://github.com/symfony/security-bundle/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -8247,20 +8247,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-26T07:24:20+00:00"
+            "time": "2024-08-20T11:38:55+00:00"
         },
         {
             "name": "symfony/security-core",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/security-core.git",
-                "reference": "aa4f432586a129017ce0ba34e2b1bfe6babfe8c7"
+                "reference": "f5ccd9d005993e5ff7251e57fe4a0615c8535866"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/security-core/zipball/aa4f432586a129017ce0ba34e2b1bfe6babfe8c7",
-                "reference": "aa4f432586a129017ce0ba34e2b1bfe6babfe8c7",
+                "url": "https://api.github.com/repos/symfony/security-core/zipball/f5ccd9d005993e5ff7251e57fe4a0615c8535866",
+                "reference": "f5ccd9d005993e5ff7251e57fe4a0615c8535866",
                 "shasum": ""
             },
             "require": {
@@ -8317,7 +8317,7 @@
             "description": "Symfony Security Component - Core Library",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/security-core/tree/v7.1.3"
+                "source": "https://github.com/symfony/security-core/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -8333,7 +8333,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-26T12:41:01+00:00"
+            "time": "2024-08-29T08:16:25+00:00"
         },
         {
             "name": "symfony/security-csrf",
@@ -8405,16 +8405,16 @@
         },
         {
             "name": "symfony/security-http",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/security-http.git",
-                "reference": "19f07b6530dbb82017c38ee7582b154f5c42b179"
+                "reference": "acd1ecc807b76b9bdefe53168c3a52a11205fc20"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/security-http/zipball/19f07b6530dbb82017c38ee7582b154f5c42b179",
-                "reference": "19f07b6530dbb82017c38ee7582b154f5c42b179",
+                "url": "https://api.github.com/repos/symfony/security-http/zipball/acd1ecc807b76b9bdefe53168c3a52a11205fc20",
+                "reference": "acd1ecc807b76b9bdefe53168c3a52a11205fc20",
                 "shasum": ""
             },
             "require": {
@@ -8473,7 +8473,7 @@
             "description": "Symfony Security Component - HTTP Integration",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/security-http/tree/v7.1.3"
+                "source": "https://github.com/symfony/security-http/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -8489,20 +8489,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-26T07:24:20+00:00"
+            "time": "2024-08-15T22:52:38+00:00"
         },
         {
             "name": "symfony/serializer",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/serializer.git",
-                "reference": "0d5ddac365fbfffc30ca9bc944ad3eb9b3763c09"
+                "reference": "0158b0e91b7cf7e744a6fb9acaeb613d1ca40dbb"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/serializer/zipball/0d5ddac365fbfffc30ca9bc944ad3eb9b3763c09",
-                "reference": "0d5ddac365fbfffc30ca9bc944ad3eb9b3763c09",
+                "url": "https://api.github.com/repos/symfony/serializer/zipball/0158b0e91b7cf7e744a6fb9acaeb613d1ca40dbb",
+                "reference": "0158b0e91b7cf7e744a6fb9acaeb613d1ca40dbb",
                 "shasum": ""
             },
             "require": {
@@ -8570,7 +8570,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.1.3"
+                "source": "https://github.com/symfony/serializer/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -8586,7 +8586,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-17T06:10:24+00:00"
+            "time": "2024-08-22T09:39:57+00:00"
         },
         {
             "name": "symfony/service-contracts",
@@ -8735,16 +8735,16 @@
         },
         {
             "name": "symfony/string",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/string.git",
-                "reference": "ea272a882be7f20cad58d5d78c215001617b7f07"
+                "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/string/zipball/ea272a882be7f20cad58d5d78c215001617b7f07",
-                "reference": "ea272a882be7f20cad58d5d78c215001617b7f07",
+                "url": "https://api.github.com/repos/symfony/string/zipball/6cd670a6d968eaeb1c77c2e76091c45c56bc367b",
+                "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b",
                 "shasum": ""
             },
             "require": {
@@ -8802,7 +8802,7 @@
                 "utf8"
             ],
             "support": {
-                "source": "https://github.com/symfony/string/tree/v7.1.3"
+                "source": "https://github.com/symfony/string/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -8818,7 +8818,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-22T10:25:37+00:00"
+            "time": "2024-08-12T09:59:40+00:00"
         },
         {
             "name": "symfony/translation",
@@ -9269,16 +9269,16 @@
         },
         {
             "name": "symfony/validator",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/validator.git",
-                "reference": "ba711a6cfc008544dad059abb3c1d997f1472237"
+                "reference": "0d7e0dfd41702d6b9356214b76110421c1e74368"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/validator/zipball/ba711a6cfc008544dad059abb3c1d997f1472237",
-                "reference": "ba711a6cfc008544dad059abb3c1d997f1472237",
+                "url": "https://api.github.com/repos/symfony/validator/zipball/0d7e0dfd41702d6b9356214b76110421c1e74368",
+                "reference": "0d7e0dfd41702d6b9356214b76110421c1e74368",
                 "shasum": ""
             },
             "require": {
@@ -9346,7 +9346,7 @@
             "description": "Provides tools to validate values",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/validator/tree/v7.1.3"
+                "source": "https://github.com/symfony/validator/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -9362,20 +9362,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-26T12:41:01+00:00"
+            "time": "2024-08-30T15:58:06+00:00"
         },
         {
             "name": "symfony/var-dumper",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/var-dumper.git",
-                "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f"
+                "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/86af4617cca75a6e28598f49ae0690f3b9d4591f",
-                "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f",
+                "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a5fa7481b199090964d6fd5dab6294d5a870c7aa",
+                "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa",
                 "shasum": ""
             },
             "require": {
@@ -9429,7 +9429,7 @@
                 "dump"
             ],
             "support": {
-                "source": "https://github.com/symfony/var-dumper/tree/v7.1.3"
+                "source": "https://github.com/symfony/var-dumper/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -9445,7 +9445,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-26T12:41:01+00:00"
+            "time": "2024-08-30T16:12:47+00:00"
         },
         {
             "name": "symfony/var-exporter",
@@ -9608,16 +9608,16 @@
         },
         {
             "name": "symfony/yaml",
-            "version": "v7.1.1",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/yaml.git",
-                "reference": "fa34c77015aa6720469db7003567b9f772492bf2"
+                "reference": "92e080b851c1c655c786a2da77f188f2dccd0f4b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/yaml/zipball/fa34c77015aa6720469db7003567b9f772492bf2",
-                "reference": "fa34c77015aa6720469db7003567b9f772492bf2",
+                "url": "https://api.github.com/repos/symfony/yaml/zipball/92e080b851c1c655c786a2da77f188f2dccd0f4b",
+                "reference": "92e080b851c1c655c786a2da77f188f2dccd0f4b",
                 "shasum": ""
             },
             "require": {
@@ -9659,7 +9659,7 @@
             "description": "Loads and dumps YAML files",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/yaml/tree/v7.1.1"
+                "source": "https://github.com/symfony/yaml/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -9675,7 +9675,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-05-31T14:57:53+00:00"
+            "time": "2024-08-12T09:59:40+00:00"
         },
         {
             "name": "tijsverkoyen/css-to-inline-styles",
@@ -14600,16 +14600,16 @@
         },
         {
             "name": "symfony/phpunit-bridge",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/phpunit-bridge.git",
-                "reference": "e823122d31935eb711e2767c31f3d71cb0b87fb1"
+                "reference": "e876eb90e32a8fc4c4911d458e09f88d65877d1c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e823122d31935eb711e2767c31f3d71cb0b87fb1",
-                "reference": "e823122d31935eb711e2767c31f3d71cb0b87fb1",
+                "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e876eb90e32a8fc4c4911d458e09f88d65877d1c",
+                "reference": "e876eb90e32a8fc4c4911d458e09f88d65877d1c",
                 "shasum": ""
             },
             "require": {
@@ -14662,7 +14662,7 @@
             "description": "Provides utilities for PHPUnit, especially user deprecation notices management",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.3"
+                "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -14678,7 +14678,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-26T12:41:01+00:00"
+            "time": "2024-08-13T14:28:19+00:00"
         },
         {
             "name": "symfony/process",
@@ -14743,16 +14743,16 @@
         },
         {
             "name": "symfony/web-profiler-bundle",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/web-profiler-bundle.git",
-                "reference": "b9357f73d2c14dcd36783a67386f510654828668"
+                "reference": "3cfc775277a8f2dacdd0f72d196bc87b272a763f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/b9357f73d2c14dcd36783a67386f510654828668",
-                "reference": "b9357f73d2c14dcd36783a67386f510654828668",
+                "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/3cfc775277a8f2dacdd0f72d196bc87b272a763f",
+                "reference": "3cfc775277a8f2dacdd0f72d196bc87b272a763f",
                 "shasum": ""
             },
             "require": {
@@ -14804,7 +14804,7 @@
                 "dev"
             ],
             "support": {
-                "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.1.3"
+                "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -14820,7 +14820,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-26T12:41:01+00:00"
+            "time": "2024-08-12T09:59:40+00:00"
         },
         {
             "name": "theofidry/alice-data-fixtures",

From 0a6a53c39715b4486ecfc7ec51cd7ec8af731ce7 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 31 Aug 2024 07:04:07 +0000
Subject: [PATCH 213/273] chore(deps): update dependency
 friendsofphp/php-cs-fixer to v3.64.0

---
 api/composer.json |  2 +-
 api/composer.lock | 26 +++++++++++++-------------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index af27d355d9..f5b7dc7f07 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -52,7 +52,7 @@
     },
     "require-dev": {
         "brianium/paratest": "^7.4",
-        "friendsofphp/php-cs-fixer": "3.63.2",
+        "friendsofphp/php-cs-fixer": "3.64.0",
         "hautelook/alice-bundle": "2.13.0",
         "justinrainbow/json-schema": "6.0.0",
         "php-coveralls/php-coveralls": "2.7.0",
diff --git a/api/composer.lock b/api/composer.lock
index c92557f94d..05de9564ba 100644
--- a/api/composer.lock
+++ b/api/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": "05f49652fabdf404c97aed2ac8424699",
+    "content-hash": "101db9fca0b5b20ce00e4526d91ec2f1",
     "packages": [
         {
             "name": "api-platform/core",
@@ -11020,16 +11020,16 @@
         },
         {
             "name": "fidry/cpu-core-counter",
-            "version": "1.1.0",
+            "version": "1.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/theofidry/cpu-core-counter.git",
-                "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42"
+                "reference": "8520451a140d3f46ac33042715115e290cf5785f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/f92996c4d5c1a696a6a970e20f7c4216200fcc42",
-                "reference": "f92996c4d5c1a696a6a970e20f7c4216200fcc42",
+                "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f",
+                "reference": "8520451a140d3f46ac33042715115e290cf5785f",
                 "shasum": ""
             },
             "require": {
@@ -11069,7 +11069,7 @@
             ],
             "support": {
                 "issues": "https://github.com/theofidry/cpu-core-counter/issues",
-                "source": "https://github.com/theofidry/cpu-core-counter/tree/1.1.0"
+                "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0"
             },
             "funding": [
                 {
@@ -11077,20 +11077,20 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-02-07T09:43:46+00:00"
+            "time": "2024-08-06T10:04:20+00:00"
         },
         {
             "name": "friendsofphp/php-cs-fixer",
-            "version": "v3.63.2",
+            "version": "v3.64.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
-                "reference": "9d427f3f14984403a6ae9fc726b61765ca0c005e"
+                "reference": "58dd9c931c785a79739310aef5178928305ffa67"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/9d427f3f14984403a6ae9fc726b61765ca0c005e",
-                "reference": "9d427f3f14984403a6ae9fc726b61765ca0c005e",
+                "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/58dd9c931c785a79739310aef5178928305ffa67",
+                "reference": "58dd9c931c785a79739310aef5178928305ffa67",
                 "shasum": ""
             },
             "require": {
@@ -11172,7 +11172,7 @@
             ],
             "support": {
                 "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
-                "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.63.2"
+                "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.64.0"
             },
             "funding": [
                 {
@@ -11180,7 +11180,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-28T10:47:21+00:00"
+            "time": "2024-08-30T23:09:38+00:00"
         },
         {
             "name": "hautelook/alice-bundle",

From d9c9893c603f8896ad0ac79a7c183ffb8f83b255 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 31 Aug 2024 22:57:11 +0000
Subject: [PATCH 214/273] fix(deps): update dependency axios to v1.7.7

---
 frontend/package-lock.json | 8 ++++----
 frontend/package.json      | 2 +-
 print/package-lock.json    | 8 ++++----
 print/package.json         | 2 +-
 4 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index d0a2025395..895affb822 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -40,7 +40,7 @@
         "@zxcvbn-ts/language-fr": "3.0.2",
         "@zxcvbn-ts/language-it": "3.0.2",
         "assert": "2.1.0",
-        "axios": "1.7.6",
+        "axios": "1.7.7",
         "colorjs.io": "0.5.2",
         "comlink": "4.4.1",
         "dayjs": "1.11.13",
@@ -5203,9 +5203,9 @@
       }
     },
     "node_modules/axios": {
-      "version": "1.7.6",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.6.tgz",
-      "integrity": "sha512-Ekur6XDwhnJ5RgOCaxFnXyqlPALI3rVeukZMwOdfghW7/wGz784BYKiQq+QD8NPcr91KRo30KfHOchyijwWw7g==",
+      "version": "1.7.7",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz",
+      "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==",
       "license": "MIT",
       "dependencies": {
         "follow-redirects": "^1.15.6",
diff --git a/frontend/package.json b/frontend/package.json
index b3119b27e0..079f26f438 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -52,7 +52,7 @@
     "@zxcvbn-ts/language-fr": "3.0.2",
     "@zxcvbn-ts/language-it": "3.0.2",
     "assert": "2.1.0",
-    "axios": "1.7.6",
+    "axios": "1.7.7",
     "colorjs.io": "0.5.2",
     "comlink": "4.4.1",
     "dayjs": "1.11.13",
diff --git a/print/package-lock.json b/print/package-lock.json
index 556523d2df..e53ee5494c 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -9,7 +9,7 @@
         "@jamescoyle/vue-icon": "0.1.2",
         "@mdi/js": "7.4.47",
         "@sentry/node": "8.27.0",
-        "axios": "1.7.6",
+        "axios": "1.7.7",
         "colorjs.io": "0.5.2",
         "dayjs": "1.11.13",
         "deepmerge": "4.3.1",
@@ -5716,9 +5716,9 @@
       }
     },
     "node_modules/axios": {
-      "version": "1.7.6",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.6.tgz",
-      "integrity": "sha512-Ekur6XDwhnJ5RgOCaxFnXyqlPALI3rVeukZMwOdfghW7/wGz784BYKiQq+QD8NPcr91KRo30KfHOchyijwWw7g==",
+      "version": "1.7.7",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz",
+      "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==",
       "license": "MIT",
       "dependencies": {
         "follow-redirects": "^1.15.6",
diff --git a/print/package.json b/print/package.json
index 1254c38d7a..cc38618ddb 100644
--- a/print/package.json
+++ b/print/package.json
@@ -18,7 +18,7 @@
     "@jamescoyle/vue-icon": "0.1.2",
     "@mdi/js": "7.4.47",
     "@sentry/node": "8.27.0",
-    "axios": "1.7.6",
+    "axios": "1.7.7",
     "colorjs.io": "0.5.2",
     "dayjs": "1.11.13",
     "deepmerge": "4.3.1",

From f81202c3aff82740fa8e6230c09f31b0586ebf27 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 1 Sep 2024 06:15:20 +0000
Subject: [PATCH 215/273] chore(deps): update php

---
 .github/workflows/check-dependencies.yml              | 2 +-
 .github/workflows/continuous-integration-optional.yml | 8 ++++----
 .github/workflows/continuous-integration.yml          | 4 ++--
 .github/workflows/reusable-api-performance-test.yml   | 2 +-
 api/Dockerfile                                        | 2 +-
 renovate.json                                         | 2 +-
 6 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/.github/workflows/check-dependencies.yml b/.github/workflows/check-dependencies.yml
index 9f8d164391..fa5e01cecb 100644
--- a/.github/workflows/check-dependencies.yml
+++ b/.github/workflows/check-dependencies.yml
@@ -26,7 +26,7 @@ jobs:
 
       - uses: shivammathur/setup-php@v2
         with:
-          php-version: '8.3.10'
+          php-version: '8.3.11'
           tools: composer:2.7.0
           coverage: xdebug
 
diff --git a/.github/workflows/continuous-integration-optional.yml b/.github/workflows/continuous-integration-optional.yml
index 2f19cc7187..9ecbef7e3b 100644
--- a/.github/workflows/continuous-integration-optional.yml
+++ b/.github/workflows/continuous-integration-optional.yml
@@ -21,7 +21,7 @@ jobs:
 
       - uses: shivammathur/setup-php@v2
         with:
-          php-version: '8.3.10'
+          php-version: '8.3.11'
           tools: composer:2.7.0
           coverage: xdebug
 
@@ -36,7 +36,7 @@ jobs:
 
       - uses: shivammathur/setup-php@v2
         with:
-          php-version: '8.3.10'
+          php-version: '8.3.11'
           tools: composer:2.7.0
           coverage: xdebug
 
@@ -66,7 +66,7 @@ jobs:
 
       - uses: shivammathur/setup-php@v2
         with:
-          php-version: '8.3.10'
+          php-version: '8.3.11'
           tools: composer:2.7.0
           coverage: xdebug
 
@@ -114,7 +114,7 @@ jobs:
 
       - uses: shivammathur/setup-php@v2
         with:
-          php-version: '8.3.10'
+          php-version: '8.3.11'
           tools: composer:2.7.0
           coverage: xdebug
 
diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index 129f54073d..e1aa533808 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -75,7 +75,7 @@ jobs:
 
       - uses: shivammathur/setup-php@v2
         with:
-          php-version: '8.3.10'
+          php-version: '8.3.11'
           tools: composer:2.7.0
           coverage: none
 
@@ -245,7 +245,7 @@ jobs:
 
       - uses: shivammathur/setup-php@v2
         with:
-          php-version: '8.3.10'
+          php-version: '8.3.11'
           extensions: intl-73.1
           tools: composer:2.7.0
           coverage: pcov
diff --git a/.github/workflows/reusable-api-performance-test.yml b/.github/workflows/reusable-api-performance-test.yml
index b1fa952d32..b23fdd01ef 100644
--- a/.github/workflows/reusable-api-performance-test.yml
+++ b/.github/workflows/reusable-api-performance-test.yml
@@ -32,7 +32,7 @@ jobs:
 
       - uses: shivammathur/setup-php@v2
         with:
-          php-version: '8.3.10'
+          php-version: '8.3.11'
           extensions: intl-73.1
           tools: composer:2.7.0
           coverage: pcov
diff --git a/api/Dockerfile b/api/Dockerfile
index 3098dd5626..aebbdc1627 100644
--- a/api/Dockerfile
+++ b/api/Dockerfile
@@ -3,7 +3,7 @@
 # Adapted from https://github.com/api-platform/api-platform/blob/fa1c5808305d7cadbf7b8392e0fddb6e80fb2092/api/Dockerfile
 
 # Versions
-FROM dunglas/frankenphp:1.2-php8.3.10 AS frankenphp_upstream
+FROM dunglas/frankenphp:1.2-php8.3.11 AS frankenphp_upstream
 
 # the different stages of this Dockerfile are meant to be built into separate images
 # https://docs.docker.com/develop/develop-images/multistage-build/#stop-at-a-specific-build-stage
diff --git a/renovate.json b/renovate.json
index 719cb34ba2..07fd4ddad8 100644
--- a/renovate.json
+++ b/renovate.json
@@ -6,7 +6,7 @@
   ],
   "constraints": {
     "node": "22.7.0",
-    "php": "8.3.10"
+    "php": "8.3.11"
   },
   "automergeType": "branch",
   "rebaseWhen": "conflicted",

From 22032e0db91b8a38cd446bb1b191c9f5385b4dac Mon Sep 17 00:00:00 2001
From: Manuel Meister <news.manuelsworld@gmail.com>
Date: Sun, 1 Sep 2024 12:14:06 +0200
Subject: [PATCH 216/273] Remove useless test

---
 .../views/camp/__tests__/Dashboard.spec.js    | 140 ------------------
 1 file changed, 140 deletions(-)
 delete mode 100644 frontend/src/views/camp/__tests__/Dashboard.spec.js

diff --git a/frontend/src/views/camp/__tests__/Dashboard.spec.js b/frontend/src/views/camp/__tests__/Dashboard.spec.js
deleted file mode 100644
index e98272b576..0000000000
--- a/frontend/src/views/camp/__tests__/Dashboard.spec.js
+++ /dev/null
@@ -1,140 +0,0 @@
-import Dashboard from '../Dashboard.vue'
-import { shallowMount } from '@vue/test-utils'
-
-describe('Dashboard view', () => {
-  it('Renders View', async () => {
-    const vueWrapper = shallowMount(Dashboard, DEFAULT_DASHBOARD_OPTIONS())
-
-    expect(vueWrapper.html()).toBeTruthy()
-  })
-})
-
-const CAMP_COLLAB = '/camp_collaborations/58dc1b96dcce'
-const USER_URL = '/users/17d341a80579'
-const USER = {
-  _meta: {
-    self: USER_URL,
-  },
-}
-
-const STORE = {
-  state: {
-    auth: {
-      user: USER,
-    },
-  },
-}
-
-const ROUTE = () => ({
-  query: {},
-})
-const ROUTER = () => ({
-  replace: jest.fn(),
-})
-const AUTH = {
-  loadUser: jest.fn(),
-}
-
-function createCampWithRole(role) {
-  return () => ({
-    campCollaborations: () => ({
-      _meta: {
-        self: '/campCollaborations?camp=%2Fapi%2Fcamps%2F6973c230d6b1',
-        load: Promise.resolve({
-          allItems: [],
-        }),
-        loading: false,
-      },
-      items: [
-        {
-          role: role,
-          user: () => USER,
-          _meta: { self: '/camp_collaborations/58dc1b96dcce' },
-        },
-      ],
-    }),
-    categories: () => ({
-      _meta: {
-        self: '/categories?camp=%2Fapi%2Fcamps%2F6973c230d6b1',
-        load: Promise.resolve({
-          allItems: [],
-        }),
-        loading: false,
-      },
-    }),
-    periods: () => ({
-      _meta: {
-        self: '/periods?camp=%2Fapi%2Fcamps%2F6973c230d6b1',
-        load: Promise.resolve({
-          allItems: [],
-        }),
-        loading: false,
-      },
-    }),
-    progressLabels: () => ({
-      _meta: {
-        self: '/progressLabels?camp=%2Fapi%2Fcamps%2F6973c230d6b1',
-        load: Promise.resolve({
-          allItems: [],
-        }),
-        loading: false,
-      },
-    }),
-    activities: () => ({
-      _meta: {
-        self: '/activities?camp=%2Fapi%2Fcamps%2F6973c230d6b1',
-        load: Promise.resolve({
-          allItems: [],
-        }),
-        loading: false,
-      },
-    }),
-  })
-}
-
-const DEFAULT_DASHBOARD_OPTIONS = () => ({
-  propsData: {
-    camp: createCampWithRole('manager'),
-  },
-  mocks: {
-    $store: STORE,
-    $auth: AUTH,
-    $route: ROUTE(),
-    $router: ROUTER(),
-    $tc: () => '',
-    api: { reload: () => Promise.resolve() },
-  },
-  data: () => ({
-    loading: false,
-    filter: {
-      period: null,
-      responsible: [],
-      category: [],
-    },
-  }),
-  computed: {
-    periods: () => {},
-    progressLabels: () => {},
-    multiplePeriods: () => false,
-    campCollaborations: () => {},
-    categories: () => {},
-    scheduleEntries: () => [],
-    scheduleEntriesLoading: () => false,
-    days: () => {},
-    filteredScheduleEntries: () => [],
-    groupedScheduleEntries: () => {},
-    showOnlyMyActivities: () => false,
-    loggedInCampCollaboration: () => CAMP_COLLAB,
-    syncUrlQueryActive: () => true,
-  },
-  stubs: [
-    'TextAlignBaseline',
-    'FilterDivider',
-    'ActivityRow',
-    'SelectFilter',
-    'BooleanFilter',
-    'CategoryChip',
-    'ContentCard',
-    'UserAvatar',
-  ],
-})

From 91d13407aeb286407fd03ecd7f7c3bd8663d2078 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 1 Sep 2024 13:32:32 +0000
Subject: [PATCH 217/273] chore(deps): update dependency @nuxt/eslint-config to
 v0.5.5

---
 print/package-lock.json | 64 ++++++++++++++++++++++++++++++++++-------
 print/package.json      |  2 +-
 2 files changed, 54 insertions(+), 12 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index e53ee5494c..7191871533 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -25,7 +25,7 @@
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.1",
         "@nuxt/eslint": "0.5.4",
-        "@nuxt/eslint-config": "0.5.4",
+        "@nuxt/eslint-config": "0.5.5",
         "@nuxtjs/i18n": "8.5.1",
         "@nuxtjs/tailwindcss": "6.12.1",
         "@tailwindcss/typography": "0.5.15",
@@ -2095,16 +2095,15 @@
       }
     },
     "node_modules/@nuxt/eslint-config": {
-      "version": "0.5.4",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.4.tgz",
-      "integrity": "sha512-RzIAtmCfHA5F7cYmc//M1uX6vgeyo3yOU9YHFS6DkE04+gpml4PcRgBpG2SPZWMlzWEZHwvkeNVcuCltuS8G9A==",
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.5.tgz",
+      "integrity": "sha512-g99Q6VEGUTg8VKklNE5AaDyHFCcJTepTS6f2ea5yQRlAsJe8VUUUSnwqYw68saU3Mq6R/QOip2ic6A5SxZOy0w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint/js": "^9.9.1",
-        "@nuxt/eslint-plugin": "0.5.4",
-        "@rushstack/eslint-patch": "^1.10.4",
-        "@stylistic/eslint-plugin": "^2.7.1",
+        "@nuxt/eslint-plugin": "0.5.5",
+        "@stylistic/eslint-plugin": "^2.7.2",
         "@typescript-eslint/eslint-plugin": "^8.3.0",
         "@typescript-eslint/parser": "^8.3.0",
         "eslint-config-flat-gitignore": "^0.2.0",
@@ -2117,13 +2116,26 @@
         "globals": "^15.9.0",
         "local-pkg": "^0.5.0",
         "pathe": "^1.1.2",
-        "tslib": "^2.7.0",
         "vue-eslint-parser": "^9.4.3"
       },
       "peerDependencies": {
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
+    "node_modules/@nuxt/eslint-config/node_modules/@nuxt/eslint-plugin": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.5.tgz",
+      "integrity": "sha512-Qwz+sz4HWa+QTTAYveryq25a2wXB0FgR0WvVGKYPhD1nBxJGkE6nwM8CILrsdICL6fKp2nfWLBzUr/UlGPqHkw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "^8.3.0",
+        "@typescript-eslint/utils": "^8.3.0"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0"
+      }
+    },
     "node_modules/@nuxt/eslint-plugin": {
       "version": "0.5.4",
       "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.4.tgz",
@@ -2138,6 +2150,36 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
+    "node_modules/@nuxt/eslint/node_modules/@nuxt/eslint-config": {
+      "version": "0.5.4",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.4.tgz",
+      "integrity": "sha512-RzIAtmCfHA5F7cYmc//M1uX6vgeyo3yOU9YHFS6DkE04+gpml4PcRgBpG2SPZWMlzWEZHwvkeNVcuCltuS8G9A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint/js": "^9.9.1",
+        "@nuxt/eslint-plugin": "0.5.4",
+        "@rushstack/eslint-patch": "^1.10.4",
+        "@stylistic/eslint-plugin": "^2.7.1",
+        "@typescript-eslint/eslint-plugin": "^8.3.0",
+        "@typescript-eslint/parser": "^8.3.0",
+        "eslint-config-flat-gitignore": "^0.2.0",
+        "eslint-flat-config-utils": "^0.3.1",
+        "eslint-plugin-import-x": "^4.1.1",
+        "eslint-plugin-jsdoc": "^50.2.2",
+        "eslint-plugin-regexp": "^2.6.0",
+        "eslint-plugin-unicorn": "^55.0.0",
+        "eslint-plugin-vue": "^9.27.0",
+        "globals": "^15.9.0",
+        "local-pkg": "^0.5.0",
+        "pathe": "^1.1.2",
+        "tslib": "^2.7.0",
+        "vue-eslint-parser": "^9.4.3"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0"
+      }
+    },
     "node_modules/@nuxt/kit": {
       "version": "3.13.0",
       "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.0.tgz",
@@ -4243,9 +4285,9 @@
       }
     },
     "node_modules/@stylistic/eslint-plugin": {
-      "version": "2.7.1",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.7.1.tgz",
-      "integrity": "sha512-JqnHom8CP14oOgPhwTPbn0QgsBJwgNySQSe00V9GQQDlY1tEqZUlK4jM2DIOJ5nE+oXoy51vZWHnHkfZ6rEruw==",
+      "version": "2.7.2",
+      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.7.2.tgz",
+      "integrity": "sha512-3DVLU5HEuk2pQoBmXJlzvrxbKNpu2mJ0SRqz5O/CJjyNCr12ZiPcYMEtuArTyPOk5i7bsAU44nywh1rGfe3gKQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
diff --git a/print/package.json b/print/package.json
index cc38618ddb..23f8f367c6 100644
--- a/print/package.json
+++ b/print/package.json
@@ -34,7 +34,7 @@
     "@eslint/eslintrc": "3.1.0",
     "@eslint/js": "9.9.1",
     "@nuxt/eslint": "0.5.4",
-    "@nuxt/eslint-config": "0.5.4",
+    "@nuxt/eslint-config": "0.5.5",
     "@nuxtjs/i18n": "8.5.1",
     "@nuxtjs/tailwindcss": "6.12.1",
     "@tailwindcss/typography": "0.5.15",

From 58cfa6d55bdbc45a3a14ec4b33276ea75b297da8 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 1 Sep 2024 13:45:45 +0000
Subject: [PATCH 218/273] chore(deps): update dependency @types/node to
 v20.16.3

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index b6ce62d8ee..4d70a18da8 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -15,7 +15,7 @@
                 "@eslint/compat": "1.1.1",
                 "@eslint/eslintrc": "3.1.0",
                 "@eslint/js": "9.9.1",
-                "@types/node": "20.16.2",
+                "@types/node": "20.16.3",
                 "eslint": "8.57.0",
                 "eslint-config-prettier": "9.1.0",
                 "eslint-plugin-n": "17.10.2",
@@ -2923,9 +2923,9 @@
             }
         },
         "node_modules/@types/node": {
-            "version": "20.16.2",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.2.tgz",
-            "integrity": "sha512-91s/n4qUPV/wg8eE9KHYW1kouTfDk2FPGjXbBMfRWP/2vg1rCXNQL1OCabwGs0XSdukuK+MwCDXE30QpSeMUhQ==",
+            "version": "20.16.3",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.3.tgz",
+            "integrity": "sha512-/wdGiWRkMOm53gAsSyFMXFZHbVg7C6CbkrzHNpaHoYfsUWPg7m6ZRKtvQjgvQ9i8WT540a3ydRlRQbxjY30XxQ==",
             "license": "MIT",
             "dependencies": {
                 "undici-types": "~6.19.2"
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 58df16ab43..b2cb86f2d2 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -19,7 +19,7 @@
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.1",
-        "@types/node": "20.16.2",
+        "@types/node": "20.16.3",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
         "eslint-plugin-n": "17.10.2",

From bbe9d6e7cf8522e070c503ec44ab5f1f2169b5d0 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 1 Sep 2024 13:46:27 +0000
Subject: [PATCH 219/273] fix(deps): update dependency doctrine/doctrine-bundle
 to v2.13.0

---
 api/composer.json |  2 +-
 api/composer.lock | 26 +++++++++++++-------------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index f5b7dc7f07..f8b6573628 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -8,7 +8,7 @@
         "api-platform/core": "3.3.12",
         "composer/package-versions-deprecated": "1.11.99",
         "cweagans/composer-patches": "1.7.3",
-        "doctrine/doctrine-bundle": "2.12.0",
+        "doctrine/doctrine-bundle": "2.13.0",
         "doctrine/doctrine-migrations-bundle": "3.3.1",
         "doctrine/orm": "2.19.7",
         "exercise/htmlpurifier-bundle": "5.0",
diff --git a/api/composer.lock b/api/composer.lock
index 05de9564ba..1a7bfc731c 100644
--- a/api/composer.lock
+++ b/api/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": "101db9fca0b5b20ce00e4526d91ec2f1",
+    "content-hash": "f1aa4e168ce805ab1291e68a986746b9",
     "packages": [
         {
             "name": "api-platform/core",
@@ -922,16 +922,16 @@
         },
         {
             "name": "doctrine/doctrine-bundle",
-            "version": "2.12.0",
+            "version": "2.13.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/DoctrineBundle.git",
-                "reference": "5418e811a14724068e95e0ba43353b903ada530f"
+                "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/5418e811a14724068e95e0ba43353b903ada530f",
-                "reference": "5418e811a14724068e95e0ba43353b903ada530f",
+                "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/ca59d84b8e63143ce1aed90cdb333ba329d71563",
+                "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563",
                 "shasum": ""
             },
             "require": {
@@ -1022,7 +1022,7 @@
             ],
             "support": {
                 "issues": "https://github.com/doctrine/DoctrineBundle/issues",
-                "source": "https://github.com/doctrine/DoctrineBundle/tree/2.12.0"
+                "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.0"
             },
             "funding": [
                 {
@@ -1038,7 +1038,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-03-19T07:20:37+00:00"
+            "time": "2024-09-01T09:46:40+00:00"
         },
         {
             "name": "doctrine/doctrine-migrations-bundle",
@@ -5852,16 +5852,16 @@
         },
         {
             "name": "symfony/doctrine-bridge",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/doctrine-bridge.git",
-                "reference": "b526822483124b62ff3cda14237418408f444e4d"
+                "reference": "5c31b278a52023970f4ef398e42ab9048483abfa"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/b526822483124b62ff3cda14237418408f444e4d",
-                "reference": "b526822483124b62ff3cda14237418408f444e4d",
+                "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/5c31b278a52023970f4ef398e42ab9048483abfa",
+                "reference": "5c31b278a52023970f4ef398e42ab9048483abfa",
                 "shasum": ""
             },
             "require": {
@@ -5940,7 +5940,7 @@
             "description": "Provides integration for Doctrine with various Symfony components",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.3"
+                "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -5956,7 +5956,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-26T12:41:01+00:00"
+            "time": "2024-08-13T10:29:23+00:00"
         },
         {
             "name": "symfony/dotenv",

From 899b99dc5cd1ce73dd089e9fe450635034623734 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 1 Sep 2024 13:55:43 +0000
Subject: [PATCH 220/273] chore(deps): update dependency @nuxt/eslint to v0.5.5

---
 print/package-lock.json | 65 +++++------------------------------------
 print/package.json      |  2 +-
 2 files changed, 8 insertions(+), 59 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index 7191871533..6a40475a2f 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -24,7 +24,7 @@
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.1",
-        "@nuxt/eslint": "0.5.4",
+        "@nuxt/eslint": "0.5.5",
         "@nuxt/eslint-config": "0.5.5",
         "@nuxtjs/i18n": "8.5.1",
         "@nuxtjs/tailwindcss": "6.12.1",
@@ -2060,16 +2060,16 @@
       }
     },
     "node_modules/@nuxt/eslint": {
-      "version": "0.5.4",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint/-/eslint-0.5.4.tgz",
-      "integrity": "sha512-/meZHYxbzw3UXEjTAbEcvYKE1xHe5bp8Ze+5mBtZnqxjqH42pNvpK8Nd3/qkcarMsMFFY3chknZUa7MJkCcz4A==",
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint/-/eslint-0.5.5.tgz",
+      "integrity": "sha512-QfSPHNyZdRNKmjMcvSNK/kP7lZvW+u4sCazCbcsHRm+FD+LFcAeawZAS0qOwMoPxuaQMP/HR2xzxOZN+u1XFhA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint/config-inspector": "^0.5.4",
         "@nuxt/devtools-kit": "^1.4.1",
-        "@nuxt/eslint-config": "0.5.4",
-        "@nuxt/eslint-plugin": "0.5.4",
+        "@nuxt/eslint-config": "0.5.5",
+        "@nuxt/eslint-plugin": "0.5.5",
         "@nuxt/kit": "^3.13.0",
         "chokidar": "^3.6.0",
         "eslint-flat-config-utils": "^0.3.1",
@@ -2122,7 +2122,7 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
-    "node_modules/@nuxt/eslint-config/node_modules/@nuxt/eslint-plugin": {
+    "node_modules/@nuxt/eslint-plugin": {
       "version": "0.5.5",
       "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.5.tgz",
       "integrity": "sha512-Qwz+sz4HWa+QTTAYveryq25a2wXB0FgR0WvVGKYPhD1nBxJGkE6nwM8CILrsdICL6fKp2nfWLBzUr/UlGPqHkw==",
@@ -2136,50 +2136,6 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
-    "node_modules/@nuxt/eslint-plugin": {
-      "version": "0.5.4",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.4.tgz",
-      "integrity": "sha512-uJ02Mc+L4DEq/bi2LPLZ4ygZ7IhygOqQ9U65g2gOb8QRjQ1ZY2wucCNL2OAdtJgjJ6tLd504QhjDg8fwGENbpQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "^8.3.0",
-        "@typescript-eslint/utils": "^8.3.0"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
-      }
-    },
-    "node_modules/@nuxt/eslint/node_modules/@nuxt/eslint-config": {
-      "version": "0.5.4",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.4.tgz",
-      "integrity": "sha512-RzIAtmCfHA5F7cYmc//M1uX6vgeyo3yOU9YHFS6DkE04+gpml4PcRgBpG2SPZWMlzWEZHwvkeNVcuCltuS8G9A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint/js": "^9.9.1",
-        "@nuxt/eslint-plugin": "0.5.4",
-        "@rushstack/eslint-patch": "^1.10.4",
-        "@stylistic/eslint-plugin": "^2.7.1",
-        "@typescript-eslint/eslint-plugin": "^8.3.0",
-        "@typescript-eslint/parser": "^8.3.0",
-        "eslint-config-flat-gitignore": "^0.2.0",
-        "eslint-flat-config-utils": "^0.3.1",
-        "eslint-plugin-import-x": "^4.1.1",
-        "eslint-plugin-jsdoc": "^50.2.2",
-        "eslint-plugin-regexp": "^2.6.0",
-        "eslint-plugin-unicorn": "^55.0.0",
-        "eslint-plugin-vue": "^9.27.0",
-        "globals": "^15.9.0",
-        "local-pkg": "^0.5.0",
-        "pathe": "^1.1.2",
-        "tslib": "^2.7.0",
-        "vue-eslint-parser": "^9.4.3"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
-      }
-    },
     "node_modules/@nuxt/kit": {
       "version": "3.13.0",
       "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.0.tgz",
@@ -4166,13 +4122,6 @@
         "win32"
       ]
     },
-    "node_modules/@rushstack/eslint-patch": {
-      "version": "1.10.4",
-      "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz",
-      "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/@sentry/core": {
       "version": "8.27.0",
       "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.27.0.tgz",
diff --git a/print/package.json b/print/package.json
index 23f8f367c6..9cd28a6172 100644
--- a/print/package.json
+++ b/print/package.json
@@ -33,7 +33,7 @@
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
     "@eslint/js": "9.9.1",
-    "@nuxt/eslint": "0.5.4",
+    "@nuxt/eslint": "0.5.5",
     "@nuxt/eslint-config": "0.5.5",
     "@nuxtjs/i18n": "8.5.1",
     "@nuxtjs/tailwindcss": "6.12.1",

From 5be42c388e57c6b1e94d747e7f756b00d8573979 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 1 Sep 2024 16:15:30 +0000
Subject: [PATCH 221/273] chore(deps): update dependency lint-staged to
 v15.2.10

---
 frontend/package-lock.json | 10 +++++-----
 frontend/package.json      |  2 +-
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 895affb822..c588e5def5 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -98,7 +98,7 @@
         "globals": "15.9.0",
         "jest-serializer-vue-tjw": "3.20.0",
         "jsdom": "25.0.0",
-        "lint-staged": "15.2.9",
+        "lint-staged": "15.2.10",
         "prettier": "3.3.3",
         "sass": "1.32.13",
         "unplugin-vue-components": "0.27.4",
@@ -8870,9 +8870,9 @@
       }
     },
     "node_modules/lint-staged": {
-      "version": "15.2.9",
-      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.9.tgz",
-      "integrity": "sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==",
+      "version": "15.2.10",
+      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz",
+      "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8882,7 +8882,7 @@
         "execa": "~8.0.1",
         "lilconfig": "~3.1.2",
         "listr2": "~8.2.4",
-        "micromatch": "~4.0.7",
+        "micromatch": "~4.0.8",
         "pidtree": "~0.6.0",
         "string-argv": "~0.3.2",
         "yaml": "~2.5.0"
diff --git a/frontend/package.json b/frontend/package.json
index 079f26f438..587137d9d6 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -110,7 +110,7 @@
     "globals": "15.9.0",
     "jest-serializer-vue-tjw": "3.20.0",
     "jsdom": "25.0.0",
-    "lint-staged": "15.2.9",
+    "lint-staged": "15.2.10",
     "prettier": "3.3.3",
     "sass": "1.32.13",
     "unplugin-vue-components": "0.27.4",

From 7fc5524a447c6d4d1566fd9752a938e1923be538 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 2 Sep 2024 18:43:27 +0000
Subject: [PATCH 222/273] chore(deps): update dependency
 @typescript-eslint/eslint-plugin to v8.4.0

---
 print/package-lock.json | 319 +++++++++++++++++++++++++++++++++++++---
 print/package.json      |   2 +-
 2 files changed, 301 insertions(+), 20 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index 6a40475a2f..15f12f4c15 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -29,7 +29,7 @@
         "@nuxtjs/i18n": "8.5.1",
         "@nuxtjs/tailwindcss": "6.12.1",
         "@tailwindcss/typography": "0.5.15",
-        "@typescript-eslint/eslint-plugin": "8.3.0",
+        "@typescript-eslint/eslint-plugin": "8.4.0",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/compiler-dom": "3.4.38",
         "@vue/compiler-sfc": "3.4.38",
@@ -4427,17 +4427,17 @@
       }
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.3.0.tgz",
-      "integrity": "sha512-FLAIn63G5KH+adZosDYiutqkOkYEx0nvcwNNfJAf+c7Ae/H35qWwTYvPZUKFj5AS+WfHG/WJJfWnDnyNUlp8UA==",
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.4.0.tgz",
+      "integrity": "sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.3.0",
-        "@typescript-eslint/type-utils": "8.3.0",
-        "@typescript-eslint/utils": "8.3.0",
-        "@typescript-eslint/visitor-keys": "8.3.0",
+        "@typescript-eslint/scope-manager": "8.4.0",
+        "@typescript-eslint/type-utils": "8.4.0",
+        "@typescript-eslint/utils": "8.4.0",
+        "@typescript-eslint/visitor-keys": "8.4.0",
         "graphemer": "^1.4.0",
         "ignore": "^5.3.1",
         "natural-compare": "^1.4.0",
@@ -4460,6 +4460,69 @@
         }
       }
     },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.4.0.tgz",
+      "integrity": "sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.4.0",
+        "@typescript-eslint/visitor-keys": "8.4.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.4.0.tgz",
+      "integrity": "sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz",
+      "integrity": "sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.4.0",
+        "eslint-visitor-keys": "^3.4.3"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/@typescript-eslint/parser": {
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.3.0.tgz",
@@ -4508,15 +4571,58 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.3.0.tgz",
-      "integrity": "sha512-wrV6qh//nLbfXZQoj32EXKmwHf4b7L+xXLrP3FZ0GOUU72gSvLjeWUl5J5Ue5IwRxIV1TfF73j/eaBapxx99Lg==",
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.4.0.tgz",
+      "integrity": "sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "8.3.0",
-        "@typescript-eslint/utils": "8.3.0",
+        "@typescript-eslint/typescript-estree": "8.4.0",
+        "@typescript-eslint/utils": "8.4.0",
+        "debug": "^4.3.4",
+        "ts-api-utils": "^1.3.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.4.0.tgz",
+      "integrity": "sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.4.0.tgz",
+      "integrity": "sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "@typescript-eslint/types": "8.4.0",
+        "@typescript-eslint/visitor-keys": "8.4.0",
         "debug": "^4.3.4",
+        "fast-glob": "^3.3.2",
+        "is-glob": "^4.0.3",
+        "minimatch": "^9.0.4",
+        "semver": "^7.6.0",
         "ts-api-utils": "^1.3.0"
       },
       "engines": {
@@ -4532,6 +4638,63 @@
         }
       }
     },
+    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz",
+      "integrity": "sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.4.0",
+        "eslint-visitor-keys": "^3.4.3"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/@typescript-eslint/types": {
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.3.0.tgz",
@@ -4602,16 +4765,16 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.3.0.tgz",
-      "integrity": "sha512-F77WwqxIi/qGkIGOGXNBLV7nykwfjLsdauRB/DOFPdv6LTF3BHHkBpq81/b5iMPSF055oO2BiivDJV4ChvNtXA==",
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.4.0.tgz",
+      "integrity": "sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "8.3.0",
-        "@typescript-eslint/types": "8.3.0",
-        "@typescript-eslint/typescript-estree": "8.3.0"
+        "@typescript-eslint/scope-manager": "8.4.0",
+        "@typescript-eslint/types": "8.4.0",
+        "@typescript-eslint/typescript-estree": "8.4.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4624,6 +4787,124 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
+    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.4.0.tgz",
+      "integrity": "sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.4.0",
+        "@typescript-eslint/visitor-keys": "8.4.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.4.0.tgz",
+      "integrity": "sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.4.0.tgz",
+      "integrity": "sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "@typescript-eslint/types": "8.4.0",
+        "@typescript-eslint/visitor-keys": "8.4.0",
+        "debug": "^4.3.4",
+        "fast-glob": "^3.3.2",
+        "is-glob": "^4.0.3",
+        "minimatch": "^9.0.4",
+        "semver": "^7.6.0",
+        "ts-api-utils": "^1.3.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz",
+      "integrity": "sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.4.0",
+        "eslint-visitor-keys": "^3.4.3"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/@typescript-eslint/visitor-keys": {
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz",
diff --git a/print/package.json b/print/package.json
index 9cd28a6172..1d64c7586a 100644
--- a/print/package.json
+++ b/print/package.json
@@ -38,7 +38,7 @@
     "@nuxtjs/i18n": "8.5.1",
     "@nuxtjs/tailwindcss": "6.12.1",
     "@tailwindcss/typography": "0.5.15",
-    "@typescript-eslint/eslint-plugin": "8.3.0",
+    "@typescript-eslint/eslint-plugin": "8.4.0",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/compiler-dom": "3.4.38",
     "@vue/compiler-sfc": "3.4.38",

From 92987e5a8e80f224a9841e54268fe2290d71b9e3 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 3 Sep 2024 04:00:23 +0000
Subject: [PATCH 223/273] chore(deps): update dependency eslint-plugin-vue to
 v9.28.0

---
 frontend/package-lock.json | 10 +++++-----
 frontend/package.json      |  2 +-
 pdf/package-lock.json      | 10 +++++-----
 pdf/package.json           |  2 +-
 print/package-lock.json    | 10 +++++-----
 print/package.json         |  2 +-
 6 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 895affb822..24ec2a240b 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -92,7 +92,7 @@
         "eslint-plugin-n": "17.10.2",
         "eslint-plugin-prettier": "5.2.1",
         "eslint-plugin-promise": "7.1.0",
-        "eslint-plugin-vue": "9.27.0",
+        "eslint-plugin-vue": "9.28.0",
         "eslint-plugin-vue-scoped-css": "2.8.1",
         "flush-promises": "1.0.2",
         "globals": "15.9.0",
@@ -6745,9 +6745,9 @@
       }
     },
     "node_modules/eslint-plugin-vue": {
-      "version": "9.27.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz",
-      "integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==",
+      "version": "9.28.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.28.0.tgz",
+      "integrity": "sha512-ShrihdjIhOTxs+MfWun6oJWuk+g/LAhN+CiuOl/jjkG3l0F2AuK5NMTaWqyvBgkFtpYmyks6P4603mLmhNJW8g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6756,7 +6756,7 @@
         "natural-compare": "^1.4.0",
         "nth-check": "^2.1.1",
         "postcss-selector-parser": "^6.0.15",
-        "semver": "^7.6.0",
+        "semver": "^7.6.3",
         "vue-eslint-parser": "^9.4.3",
         "xml-name-validator": "^4.0.0"
       },
diff --git a/frontend/package.json b/frontend/package.json
index 079f26f438..7a902dfd24 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -104,7 +104,7 @@
     "eslint-plugin-n": "17.10.2",
     "eslint-plugin-prettier": "5.2.1",
     "eslint-plugin-promise": "7.1.0",
-    "eslint-plugin-vue": "9.27.0",
+    "eslint-plugin-vue": "9.28.0",
     "eslint-plugin-vue-scoped-css": "2.8.1",
     "flush-promises": "1.0.2",
     "globals": "15.9.0",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index 8985510d6a..ce44f0fc0c 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -31,7 +31,7 @@
         "dayjs": "1.11.13",
         "eslint": "8.57.0",
         "eslint-plugin-local-rules": "3.0.2",
-        "eslint-plugin-vue": "9.27.0",
+        "eslint-plugin-vue": "9.28.0",
         "globals": "15.9.0",
         "jsdom": "25.0.0",
         "prettier": "3.3.3",
@@ -4745,9 +4745,9 @@
       }
     },
     "node_modules/eslint-plugin-vue": {
-      "version": "9.27.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz",
-      "integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==",
+      "version": "9.28.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.28.0.tgz",
+      "integrity": "sha512-ShrihdjIhOTxs+MfWun6oJWuk+g/LAhN+CiuOl/jjkG3l0F2AuK5NMTaWqyvBgkFtpYmyks6P4603mLmhNJW8g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4756,7 +4756,7 @@
         "natural-compare": "^1.4.0",
         "nth-check": "^2.1.1",
         "postcss-selector-parser": "^6.0.15",
-        "semver": "^7.6.0",
+        "semver": "^7.6.3",
         "vue-eslint-parser": "^9.4.3",
         "xml-name-validator": "^4.0.0"
       },
diff --git a/pdf/package.json b/pdf/package.json
index 05b45d1290..dd8335b278 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -51,7 +51,7 @@
     "dayjs": "1.11.13",
     "eslint": "8.57.0",
     "eslint-plugin-local-rules": "3.0.2",
-    "eslint-plugin-vue": "9.27.0",
+    "eslint-plugin-vue": "9.28.0",
     "globals": "15.9.0",
     "jsdom": "25.0.0",
     "prettier": "3.3.3",
diff --git a/print/package-lock.json b/print/package-lock.json
index 15f12f4c15..e2d9f32c3d 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -41,7 +41,7 @@
         "eslint-config-prettier": "9.1.0",
         "eslint-plugin-local-rules": "3.0.2",
         "eslint-plugin-prettier": "5.2.1",
-        "eslint-plugin-vue": "9.27.0",
+        "eslint-plugin-vue": "9.28.0",
         "eslint-plugin-vue-scoped-css": "2.8.1",
         "globals": "15.9.0",
         "nuxt": "3.13.0",
@@ -8200,9 +8200,9 @@
       }
     },
     "node_modules/eslint-plugin-vue": {
-      "version": "9.27.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz",
-      "integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==",
+      "version": "9.28.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.28.0.tgz",
+      "integrity": "sha512-ShrihdjIhOTxs+MfWun6oJWuk+g/LAhN+CiuOl/jjkG3l0F2AuK5NMTaWqyvBgkFtpYmyks6P4603mLmhNJW8g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -8211,7 +8211,7 @@
         "natural-compare": "^1.4.0",
         "nth-check": "^2.1.1",
         "postcss-selector-parser": "^6.0.15",
-        "semver": "^7.6.0",
+        "semver": "^7.6.3",
         "vue-eslint-parser": "^9.4.3",
         "xml-name-validator": "^4.0.0"
       },
diff --git a/print/package.json b/print/package.json
index 1d64c7586a..72f47147e3 100644
--- a/print/package.json
+++ b/print/package.json
@@ -50,7 +50,7 @@
     "eslint-config-prettier": "9.1.0",
     "eslint-plugin-local-rules": "3.0.2",
     "eslint-plugin-prettier": "5.2.1",
-    "eslint-plugin-vue": "9.27.0",
+    "eslint-plugin-vue": "9.28.0",
     "eslint-plugin-vue-scoped-css": "2.8.1",
     "globals": "15.9.0",
     "nuxt": "3.13.0",

From ee415c2e039ec58641216787d989a8692beb3067 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 3 Sep 2024 11:22:27 +0000
Subject: [PATCH 224/273] fix(deps): update dependency puppeteer-core to
 v23.2.2

---
 print/package-lock.json | 16 ++++++++--------
 print/package.json      |  2 +-
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index e2d9f32c3d..a59ce2008e 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -16,7 +16,7 @@
         "hal-json-vuex": "3.0.0-alpha.1",
         "isomorphic-dompurify": "2.15.0",
         "lodash": "4.17.21",
-        "puppeteer-core": "23.2.1",
+        "puppeteer-core": "23.2.2",
         "runes": "0.4.3",
         "vuex": "4.1.0"
       },
@@ -6470,9 +6470,9 @@
       }
     },
     "node_modules/chromium-bidi": {
-      "version": "0.6.4",
-      "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.4.tgz",
-      "integrity": "sha512-8zoq6ogmhQQkAKZVKO2ObFTl4uOkqoX1PlKQX3hZQ5E9cbUotcAb7h4pTNVAGGv8Z36PF3CtdOriEp/Rz82JqQ==",
+      "version": "0.6.5",
+      "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.5.tgz",
+      "integrity": "sha512-RuLrmzYrxSb0s9SgpB+QN5jJucPduZQ/9SIe76MDxYJuecPW5mxMdacJ1f4EtgiV+R0p3sCkznTMvH0MPGFqjA==",
       "license": "Apache-2.0",
       "dependencies": {
         "mitt": "3.0.1",
@@ -14424,13 +14424,13 @@
       }
     },
     "node_modules/puppeteer-core": {
-      "version": "23.2.1",
-      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.2.1.tgz",
-      "integrity": "sha512-AIFWfQ4Sq+En+OgqIUy8VJmD8yJHMDyt+qEmEVKW07zu5DKDNqysO7fzBZp0W85ShJTUlUf+RleKl4XLwFpUPA==",
+      "version": "23.2.2",
+      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.2.2.tgz",
+      "integrity": "sha512-MK2Kbdmro+nX9/pfGKm8TiU5G3CuS6BbcNfkcz42GWnHp7KYsJHrP6lPDepiyvwjti5Bt/4a8U3w+DoFpIcBHQ==",
       "license": "Apache-2.0",
       "dependencies": {
         "@puppeteer/browsers": "2.3.1",
-        "chromium-bidi": "0.6.4",
+        "chromium-bidi": "0.6.5",
         "debug": "^4.3.6",
         "devtools-protocol": "0.0.1330662",
         "typed-query-selector": "^2.12.0",
diff --git a/print/package.json b/print/package.json
index 72f47147e3..0139722379 100644
--- a/print/package.json
+++ b/print/package.json
@@ -25,7 +25,7 @@
     "hal-json-vuex": "3.0.0-alpha.1",
     "isomorphic-dompurify": "2.15.0",
     "lodash": "4.17.21",
-    "puppeteer-core": "23.2.1",
+    "puppeteer-core": "23.2.2",
     "runes": "0.4.3",
     "vuex": "4.1.0"
   },

From 26773354c17496cda3b134255d07d5c05b08f023 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 3 Sep 2024 11:23:02 +0000
Subject: [PATCH 225/273] fix(deps): update sentry-javascript monorepo to
 v8.28.0

---
 frontend/package-lock.json | 114 ++++++++++++++++++-------------------
 frontend/package.json      |   4 +-
 print/package-lock.json    |  52 ++++++++---------
 print/package.json         |   2 +-
 4 files changed, 86 insertions(+), 86 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 24ec2a240b..2aeaf8e030 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -14,8 +14,8 @@
         "@react-pdf/pdfkit": "3.1.10",
         "@react-pdf/primitives": "3.1.1",
         "@react-pdf/render": "3.4.4",
-        "@sentry/browser": "8.27.0",
-        "@sentry/vue": "8.27.0",
+        "@sentry/browser": "8.28.0",
+        "@sentry/vue": "8.28.0",
         "@tiptap/extension-bold": "2.6.6",
         "@tiptap/extension-bubble-menu": "2.6.6",
         "@tiptap/extension-bullet-list": "2.6.6",
@@ -3270,58 +3270,58 @@
       ]
     },
     "node_modules/@sentry-internal/browser-utils": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.27.0.tgz",
-      "integrity": "sha512-YTIwQ1GM1NTRXgN4DvpFSQ2x4pjlqQ0FQAyHW5x2ZYv4z7VmqG4Xkid1P/srQUipECk6nxkebfD4WR19nLsvnQ==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.28.0.tgz",
+      "integrity": "sha512-tE9++KEy8SlqibTmYymuxFVAnutsXBqrwQ936WJbjaMfkqXiro7C1El0ybkprskd0rKS7kln20Q6nQlNlMEoTA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/core": "8.27.0",
-        "@sentry/types": "8.27.0",
-        "@sentry/utils": "8.27.0"
+        "@sentry/core": "8.28.0",
+        "@sentry/types": "8.28.0",
+        "@sentry/utils": "8.28.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry-internal/feedback": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.27.0.tgz",
-      "integrity": "sha512-b71PQc9aK1X9b/SO1DiJlrnAEx4n0MzPZQ/tKd9oRWDyGit6pJWZfQns9r2rvc96kJPMOTxFAa/upXRCkA723A==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.28.0.tgz",
+      "integrity": "sha512-5vYunPCDBLCJ8QNnhepacdYheiN+UtYxpGAIaC/zjBC1nDuBgWs+TfKPo1UlO/1sesfgs9ibpxtShOweucL61g==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/core": "8.27.0",
-        "@sentry/types": "8.27.0",
-        "@sentry/utils": "8.27.0"
+        "@sentry/core": "8.28.0",
+        "@sentry/types": "8.28.0",
+        "@sentry/utils": "8.28.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry-internal/replay": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.27.0.tgz",
-      "integrity": "sha512-Ofucncaon98dvlxte2L//hwuG9yILSxNrTz/PmO0k+HzB9q+oBic4667QF+azWR2qv4oKSWpc+vEovP3hVqveA==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.28.0.tgz",
+      "integrity": "sha512-70jvzzOL5O74gahgXKyRkZgiYN93yly5gq+bbj4/6NRQ+EtPd285+ccy0laExdfyK0ugvvwD4v+1MQit52OAsg==",
       "license": "MIT",
       "dependencies": {
-        "@sentry-internal/browser-utils": "8.27.0",
-        "@sentry/core": "8.27.0",
-        "@sentry/types": "8.27.0",
-        "@sentry/utils": "8.27.0"
+        "@sentry-internal/browser-utils": "8.28.0",
+        "@sentry/core": "8.28.0",
+        "@sentry/types": "8.28.0",
+        "@sentry/utils": "8.28.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry-internal/replay-canvas": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.27.0.tgz",
-      "integrity": "sha512-uuEfiWbjwugB9M4KxXxovHYiKRqg/R6U4EF8xM/Ub4laUuEcWsfRp7lQ3MxL3qYojbca8ncIFic2bIoKMPeejA==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.28.0.tgz",
+      "integrity": "sha512-RfpYHDHMUKGeEdx41QtHITjEn6P3tGaDPHvatqdrD3yv4j+wbJ6laX1PrIxCpGFUtjdzkqi/KUcvUd2kzbH/FA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry-internal/replay": "8.27.0",
-        "@sentry/core": "8.27.0",
-        "@sentry/types": "8.27.0",
-        "@sentry/utils": "8.27.0"
+        "@sentry-internal/replay": "8.28.0",
+        "@sentry/core": "8.28.0",
+        "@sentry/types": "8.28.0",
+        "@sentry/utils": "8.28.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3338,18 +3338,18 @@
       }
     },
     "node_modules/@sentry/browser": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.27.0.tgz",
-      "integrity": "sha512-eL1eaHwoYUGkp4mpeYesH6WtCrm+0u9jYCW5Lm0MAeTmpx22BZKEmj0OljuUJXGnJwFbvPDlRjyz6QG11m8kZA==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.28.0.tgz",
+      "integrity": "sha512-i/gjMYzIGQiPFH1pCbdnTwH9xs9mTAqzN+goP3GWX5a58frc7h8vxyA/5z0yMd0aCW6U8mVxnoAT72vGbKbx0g==",
       "license": "MIT",
       "dependencies": {
-        "@sentry-internal/browser-utils": "8.27.0",
-        "@sentry-internal/feedback": "8.27.0",
-        "@sentry-internal/replay": "8.27.0",
-        "@sentry-internal/replay-canvas": "8.27.0",
-        "@sentry/core": "8.27.0",
-        "@sentry/types": "8.27.0",
-        "@sentry/utils": "8.27.0"
+        "@sentry-internal/browser-utils": "8.28.0",
+        "@sentry-internal/feedback": "8.28.0",
+        "@sentry-internal/replay": "8.28.0",
+        "@sentry-internal/replay-canvas": "8.28.0",
+        "@sentry/core": "8.28.0",
+        "@sentry/types": "8.28.0",
+        "@sentry/utils": "8.28.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3528,34 +3528,34 @@
       }
     },
     "node_modules/@sentry/core": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.27.0.tgz",
-      "integrity": "sha512-4frlXluHT3Du+Omw91K04jpvbfMtydvg4Bxj2+gt/DT19Swhm/fbEpzdUjgbAd3Jinj/n0qk/jFRXjr9JZKFjg==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.28.0.tgz",
+      "integrity": "sha512-+If9uubvpZpvaQQw4HLiKPhrSS9/KcoA/AcdQkNm+5CVwAoOmDPtyYfkPBgfo2hLZnZQqR1bwkz/PrNoOm+gqA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.27.0",
-        "@sentry/utils": "8.27.0"
+        "@sentry/types": "8.28.0",
+        "@sentry/utils": "8.28.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/types": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.27.0.tgz",
-      "integrity": "sha512-B6lrP46+m2x0lfqWc9F4VcUbN893mVGnPEd7KIMRk95mPzkFJ3sNxggTQF5/ZfNO7lDQYQb22uysB5sj/BqFiw==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.28.0.tgz",
+      "integrity": "sha512-hOfqfd92/AzBrEdMgmmV1VfOXJbIfleFTnerRl0mg/+CcNgP/6+Fdonp354TD56ouWNF2WkOM6sEKSXMWp6SEQ==",
       "license": "MIT",
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/utils": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.27.0.tgz",
-      "integrity": "sha512-gyJM3SyLQe0A3mkQVVNdKYvk3ZoikkYgyA/D+5StFNLKdyUgEbJgXOGXrQSSYPF7BSX6Sc5b0KHCglPII0KuKw==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.28.0.tgz",
+      "integrity": "sha512-smhk7PJpvDMQ2DB5p2qn9UeoUHdU41IgjMmS2xklZpa8tjzBTxDeWpGvrX2fuH67D9bAJuLC/XyZjJCHLoEW5g==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.27.0"
+        "@sentry/types": "8.28.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3576,15 +3576,15 @@
       }
     },
     "node_modules/@sentry/vue": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-8.27.0.tgz",
-      "integrity": "sha512-kCjrdKCQk9ZgE7HirVaT/hvyBhoryEHickiWQET7fzyEo6Zs7/KoFnNiXzGuZ+XJcZ8R76wlog+awBBmZBuBsQ==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-8.28.0.tgz",
+      "integrity": "sha512-2zKNlWUKvJe1DqjtEWIaSCYUqvVbARZiu+xxsfEd8ksYukH/dV+iZaAEx5ESypnQtDBk6C/bCwvFIMgztDL8MA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/browser": "8.27.0",
-        "@sentry/core": "8.27.0",
-        "@sentry/types": "8.27.0",
-        "@sentry/utils": "8.27.0"
+        "@sentry/browser": "8.28.0",
+        "@sentry/core": "8.28.0",
+        "@sentry/types": "8.28.0",
+        "@sentry/utils": "8.28.0"
       },
       "engines": {
         "node": ">=14.18"
diff --git a/frontend/package.json b/frontend/package.json
index 7a902dfd24..50094c2635 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -26,8 +26,8 @@
     "@react-pdf/pdfkit": "3.1.10",
     "@react-pdf/primitives": "3.1.1",
     "@react-pdf/render": "3.4.4",
-    "@sentry/browser": "8.27.0",
-    "@sentry/vue": "8.27.0",
+    "@sentry/browser": "8.28.0",
+    "@sentry/vue": "8.28.0",
     "@tiptap/extension-bold": "2.6.6",
     "@tiptap/extension-bubble-menu": "2.6.6",
     "@tiptap/extension-bullet-list": "2.6.6",
diff --git a/print/package-lock.json b/print/package-lock.json
index e2d9f32c3d..c03474628f 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -8,7 +8,7 @@
       "dependencies": {
         "@jamescoyle/vue-icon": "0.1.2",
         "@mdi/js": "7.4.47",
-        "@sentry/node": "8.27.0",
+        "@sentry/node": "8.28.0",
         "axios": "1.7.7",
         "colorjs.io": "0.5.2",
         "dayjs": "1.11.13",
@@ -4123,22 +4123,22 @@
       ]
     },
     "node_modules/@sentry/core": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.27.0.tgz",
-      "integrity": "sha512-4frlXluHT3Du+Omw91K04jpvbfMtydvg4Bxj2+gt/DT19Swhm/fbEpzdUjgbAd3Jinj/n0qk/jFRXjr9JZKFjg==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.28.0.tgz",
+      "integrity": "sha512-+If9uubvpZpvaQQw4HLiKPhrSS9/KcoA/AcdQkNm+5CVwAoOmDPtyYfkPBgfo2hLZnZQqR1bwkz/PrNoOm+gqA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.27.0",
-        "@sentry/utils": "8.27.0"
+        "@sentry/types": "8.28.0",
+        "@sentry/utils": "8.28.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/node": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.27.0.tgz",
-      "integrity": "sha512-nE2VPSHOW/tzH/lB6CoBtYkmXqXncUuWMC56RLRiPyHEXDktZx8oFp364/3m117iKOjO0XHP57Kl5cdb90IM7g==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.28.0.tgz",
+      "integrity": "sha512-444hx0S7EAYDdq3g2U37qHFC/WFErgf8ZvXqhWfoCI4RweHHntdFbz3azexYnO61iUsmSAnFAX6htJtAG2zNdA==",
       "license": "MIT",
       "dependencies": {
         "@opentelemetry/api": "^1.9.0",
@@ -4165,10 +4165,10 @@
         "@opentelemetry/sdk-trace-base": "^1.25.1",
         "@opentelemetry/semantic-conventions": "^1.25.1",
         "@prisma/instrumentation": "5.18.0",
-        "@sentry/core": "8.27.0",
-        "@sentry/opentelemetry": "8.27.0",
-        "@sentry/types": "8.27.0",
-        "@sentry/utils": "8.27.0",
+        "@sentry/core": "8.28.0",
+        "@sentry/opentelemetry": "8.28.0",
+        "@sentry/types": "8.28.0",
+        "@sentry/utils": "8.28.0",
         "import-in-the-middle": "^1.11.0"
       },
       "engines": {
@@ -4179,14 +4179,14 @@
       }
     },
     "node_modules/@sentry/opentelemetry": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.27.0.tgz",
-      "integrity": "sha512-FRz7ApnyZYDFmi2CWUhKBux2N/0WswRLHwHDZ31FYCajujw7vQKucgdsxDW2RIRPWDwcMxHY1kvt6EzM1hIsxQ==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.28.0.tgz",
+      "integrity": "sha512-xClK/fa2Y9AMoaV6f7sWfoHAz56actn2RN3UuYAfxlgmNEfZEa0tc78x4XygCT+2b83QbUb+qf1q4+1ft+HEsQ==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/core": "8.27.0",
-        "@sentry/types": "8.27.0",
-        "@sentry/utils": "8.27.0"
+        "@sentry/core": "8.28.0",
+        "@sentry/types": "8.28.0",
+        "@sentry/utils": "8.28.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -4200,21 +4200,21 @@
       }
     },
     "node_modules/@sentry/types": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.27.0.tgz",
-      "integrity": "sha512-B6lrP46+m2x0lfqWc9F4VcUbN893mVGnPEd7KIMRk95mPzkFJ3sNxggTQF5/ZfNO7lDQYQb22uysB5sj/BqFiw==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.28.0.tgz",
+      "integrity": "sha512-hOfqfd92/AzBrEdMgmmV1VfOXJbIfleFTnerRl0mg/+CcNgP/6+Fdonp354TD56ouWNF2WkOM6sEKSXMWp6SEQ==",
       "license": "MIT",
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/utils": {
-      "version": "8.27.0",
-      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.27.0.tgz",
-      "integrity": "sha512-gyJM3SyLQe0A3mkQVVNdKYvk3ZoikkYgyA/D+5StFNLKdyUgEbJgXOGXrQSSYPF7BSX6Sc5b0KHCglPII0KuKw==",
+      "version": "8.28.0",
+      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.28.0.tgz",
+      "integrity": "sha512-smhk7PJpvDMQ2DB5p2qn9UeoUHdU41IgjMmS2xklZpa8tjzBTxDeWpGvrX2fuH67D9bAJuLC/XyZjJCHLoEW5g==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.27.0"
+        "@sentry/types": "8.28.0"
       },
       "engines": {
         "node": ">=14.18"
diff --git a/print/package.json b/print/package.json
index 72f47147e3..fb6a03d3be 100644
--- a/print/package.json
+++ b/print/package.json
@@ -17,7 +17,7 @@
   "dependencies": {
     "@jamescoyle/vue-icon": "0.1.2",
     "@mdi/js": "7.4.47",
-    "@sentry/node": "8.27.0",
+    "@sentry/node": "8.28.0",
     "axios": "1.7.7",
     "colorjs.io": "0.5.2",
     "dayjs": "1.11.13",

From d7074f3449f19bfccdeb663a471dc471e8d5bfdd Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 3 Sep 2024 13:08:18 +0000
Subject: [PATCH 226/273] chore(deps): update dependency phpunit/phpunit to
 v10.5.31

---
 api/composer.json |  2 +-
 api/composer.lock | 16 ++++++++--------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index f8b6573628..a72969e626 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -58,7 +58,7 @@
         "php-coveralls/php-coveralls": "2.7.0",
         "phpspec/prophecy-phpunit": "2.2",
         "phpstan/phpstan": "1.12.0",
-        "phpunit/phpunit": "10.5.30",
+        "phpunit/phpunit": "10.5.31",
         "rector/rector": "1.2.4",
         "spatie/phpunit-snapshot-assertions": "5.1.6",
         "symfony/browser-kit": "7.1.1",
diff --git a/api/composer.lock b/api/composer.lock
index 1a7bfc731c..ba9d1b1e86 100644
--- a/api/composer.lock
+++ b/api/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": "f1aa4e168ce805ab1291e68a986746b9",
+    "content-hash": "534d398946ad915a1bfc5165cfac8563",
     "packages": [
         {
             "name": "api-platform/core",
@@ -12548,16 +12548,16 @@
         },
         {
             "name": "phpunit/phpunit",
-            "version": "10.5.30",
+            "version": "10.5.31",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/phpunit.git",
-                "reference": "b15524febac0153876b4ba9aab3326c2ee94c897"
+                "reference": "43e7c3e6a484e538453f89dfa6a6f308c32792da"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b15524febac0153876b4ba9aab3326c2ee94c897",
-                "reference": "b15524febac0153876b4ba9aab3326c2ee94c897",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/43e7c3e6a484e538453f89dfa6a6f308c32792da",
+                "reference": "43e7c3e6a484e538453f89dfa6a6f308c32792da",
                 "shasum": ""
             },
             "require": {
@@ -12571,7 +12571,7 @@
                 "phar-io/manifest": "^2.0.4",
                 "phar-io/version": "^3.2.1",
                 "php": ">=8.1",
-                "phpunit/php-code-coverage": "^10.1.15",
+                "phpunit/php-code-coverage": "^10.1.16",
                 "phpunit/php-file-iterator": "^4.1.0",
                 "phpunit/php-invoker": "^4.0.0",
                 "phpunit/php-text-template": "^3.0.1",
@@ -12629,7 +12629,7 @@
             "support": {
                 "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                 "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
-                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.30"
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.31"
             },
             "funding": [
                 {
@@ -12645,7 +12645,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-08-13T06:09:37+00:00"
+            "time": "2024-09-03T11:57:55+00:00"
         },
         {
             "name": "react/cache",

From c6777c0d0b9a1f80f8437914784d1441c020ef13 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 3 Sep 2024 18:47:21 +0000
Subject: [PATCH 227/273] chore(deps): update dependency vite to v5.4.3

---
 frontend/package-lock.json | 16 ++++++++--------
 frontend/package.json      |  2 +-
 pdf/package-lock.json      | 16 ++++++++--------
 pdf/package.json           |  2 +-
 4 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 24ec2a240b..fe4266b0da 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -102,7 +102,7 @@
         "prettier": "3.3.3",
         "sass": "1.32.13",
         "unplugin-vue-components": "0.27.4",
-        "vite": "5.4.2",
+        "vite": "5.4.3",
         "vite-plugin-comlink": "5.0.1",
         "vite-plugin-vue2-svg": "0.4.0",
         "vitest": "2.0.5",
@@ -9915,9 +9915,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.41",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
-      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+      "version": "8.4.44",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.44.tgz",
+      "integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==",
       "funding": [
         {
           "type": "opencollective",
@@ -11951,14 +11951,14 @@
       }
     },
     "node_modules/vite": {
-      "version": "5.4.2",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz",
-      "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==",
+      "version": "5.4.3",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.3.tgz",
+      "integrity": "sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
-        "postcss": "^8.4.41",
+        "postcss": "^8.4.43",
         "rollup": "^4.20.0"
       },
       "bin": {
diff --git a/frontend/package.json b/frontend/package.json
index 7a902dfd24..00146f7e63 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -114,7 +114,7 @@
     "prettier": "3.3.3",
     "sass": "1.32.13",
     "unplugin-vue-components": "0.27.4",
-    "vite": "5.4.2",
+    "vite": "5.4.3",
     "vite-plugin-comlink": "5.0.1",
     "vite-plugin-vue2-svg": "0.4.0",
     "vitest": "2.0.5",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index ce44f0fc0c..c66a6ec57f 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -36,7 +36,7 @@
         "jsdom": "25.0.0",
         "prettier": "3.3.3",
         "url-template": "3.1.1",
-        "vite": "5.4.2",
+        "vite": "5.4.3",
         "vitest": "2.0.5"
       },
       "peerDependencies": {
@@ -6682,9 +6682,9 @@
       "license": "ISC"
     },
     "node_modules/postcss": {
-      "version": "8.4.41",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
-      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+      "version": "8.4.44",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.44.tgz",
+      "integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==",
       "dev": true,
       "funding": [
         {
@@ -7773,14 +7773,14 @@
       "license": "MIT"
     },
     "node_modules/vite": {
-      "version": "5.4.2",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz",
-      "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==",
+      "version": "5.4.3",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.3.tgz",
+      "integrity": "sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
-        "postcss": "^8.4.41",
+        "postcss": "^8.4.43",
         "rollup": "^4.20.0"
       },
       "bin": {
diff --git a/pdf/package.json b/pdf/package.json
index dd8335b278..cc34af90ee 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -56,7 +56,7 @@
     "jsdom": "25.0.0",
     "prettier": "3.3.3",
     "url-template": "3.1.1",
-    "vite": "5.4.2",
+    "vite": "5.4.3",
     "vitest": "2.0.5"
   }
 }

From 37e485c8fe7cb7d258cf9c64ad5c4d5fabfea739 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 3 Sep 2024 18:57:01 +0000
Subject: [PATCH 228/273] chore(deps): update dependency node to v22.8.0

---
 .github/workflows/continuous-integration.yml | 14 +++++++-------
 .nvmrc                                       |  2 +-
 renovate.json                                |  2 +-
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml
index e1aa533808..c274c2fade 100644
--- a/.github/workflows/continuous-integration.yml
+++ b/.github/workflows/continuous-integration.yml
@@ -105,7 +105,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.7.0'
+          node-version: '22.8.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -134,7 +134,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.7.0'
+          node-version: '22.8.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -163,7 +163,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.7.0'
+          node-version: '22.8.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -195,7 +195,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.7.0'
+          node-version: '22.8.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -331,7 +331,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.7.0'
+          node-version: '22.8.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -374,7 +374,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.7.0'
+          node-version: '22.8.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
@@ -413,7 +413,7 @@ jobs:
 
       - uses: actions/setup-node@v4
         with:
-          node-version: '22.7.0'
+          node-version: '22.8.0'
 
       - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4
         with:
diff --git a/.nvmrc b/.nvmrc
index 2062ac7e5f..9d673278df 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-22.7.0
+22.8.0
diff --git a/renovate.json b/renovate.json
index 07fd4ddad8..1e78953e80 100644
--- a/renovate.json
+++ b/renovate.json
@@ -5,7 +5,7 @@
     ":prConcurrentLimitNone"
   ],
   "constraints": {
-    "node": "22.7.0",
+    "node": "22.8.0",
     "php": "8.3.11"
   },
   "automergeType": "branch",

From 300e10d0882e08ca75a5c2e03c434378ad0ca449 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 3 Sep 2024 19:01:45 +0000
Subject: [PATCH 229/273] chore(deps): update vue-minor-print-pdf to v3.5.0

---
 pdf/package-lock.json   | 132 ++++++++++++++++++++--------------------
 pdf/package.json        |  12 ++--
 print/package-lock.json | 132 ++++++++++++++++++++--------------------
 print/package.json      |  12 ++--
 4 files changed, 144 insertions(+), 144 deletions(-)

diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index ce44f0fc0c..3e37c6c1dc 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -6,7 +6,7 @@
     "": {
       "name": "@ecamp3/client-pdf",
       "dependencies": {
-        "@vue/runtime-core": "3.4.38",
+        "@vue/runtime-core": "3.5.0",
         "html-entities": "2.5.2",
         "html-parse-stringify": "3.0.1"
       },
@@ -20,12 +20,12 @@
         "@vitejs/plugin-vue": "5.1.3",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/babel-preset-app": "5.0.8",
-        "@vue/compiler-dom": "3.4.38",
-        "@vue/compiler-sfc": "3.4.38",
+        "@vue/compiler-dom": "3.5.0",
+        "@vue/compiler-sfc": "3.5.0",
         "@vue/eslint-config-prettier": "9.0.0",
-        "@vue/runtime-dom": "3.4.38",
-        "@vue/server-renderer": "3.4.38",
-        "@vue/shared": "3.4.38",
+        "@vue/runtime-dom": "3.5.0",
+        "@vue/server-renderer": "3.5.0",
+        "@vue/shared": "3.5.0",
         "@vue/test-utils": "2.4.6",
         "css": "3.0.0",
         "dayjs": "1.11.13",
@@ -3584,57 +3584,57 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.38.tgz",
-      "integrity": "sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.0.tgz",
+      "integrity": "sha512-ja7cpqAOfw4tyFAxgBz70Z42miNDeaqTxExTsnXDLomRpqfyCgyvZvFp482fmsElpfvsoMJUsvzULhvxUTW6Iw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/parser": "^7.24.7",
-        "@vue/shared": "3.4.38",
+        "@babel/parser": "^7.25.3",
+        "@vue/shared": "3.5.0",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.38.tgz",
-      "integrity": "sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.0.tgz",
+      "integrity": "sha512-xYjUybWZXl+1R/toDy815i4PbeehL2hThiSGkcpmIOCy2HoYyeeC/gAWK/Y/xsoK+GSw198/T5O31bYuQx5uvQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.4.38",
-        "@vue/shared": "3.4.38"
+        "@vue/compiler-core": "3.5.0",
+        "@vue/shared": "3.5.0"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.38.tgz",
-      "integrity": "sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.0.tgz",
+      "integrity": "sha512-B9DgLtrqok2GLuaFjLlSL15ZG3ZDBiitUH1ecex9guh/ZcA5MCdwuVE6nsfQxktuZY/QY0awJ35/ripIviCQTQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/parser": "^7.24.7",
-        "@vue/compiler-core": "3.4.38",
-        "@vue/compiler-dom": "3.4.38",
-        "@vue/compiler-ssr": "3.4.38",
-        "@vue/shared": "3.4.38",
+        "@babel/parser": "^7.25.3",
+        "@vue/compiler-core": "3.5.0",
+        "@vue/compiler-dom": "3.5.0",
+        "@vue/compiler-ssr": "3.5.0",
+        "@vue/shared": "3.5.0",
         "estree-walker": "^2.0.2",
-        "magic-string": "^0.30.10",
-        "postcss": "^8.4.40",
+        "magic-string": "^0.30.11",
+        "postcss": "^8.4.44",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.38.tgz",
-      "integrity": "sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.0.tgz",
+      "integrity": "sha512-E263QZmA1dqRd7c3u/sWTLRMpQOT0aZ8av/L9SoD/v/BVMZaWFHPUUBswS+bzrfvG2suJF8vSLKx6k6ba5SUdA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.4.38",
-        "@vue/shared": "3.4.38"
+        "@vue/compiler-dom": "3.5.0",
+        "@vue/shared": "3.5.0"
       }
     },
     "node_modules/@vue/eslint-config-prettier": {
@@ -3653,55 +3653,55 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.38.tgz",
-      "integrity": "sha512-4vl4wMMVniLsSYYeldAKzbk72+D3hUnkw9z8lDeJacTxAkXeDAP1uE9xr2+aKIN0ipOL8EG2GPouVTH6yF7Gnw==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.0.tgz",
+      "integrity": "sha512-Ew3F5riP3B3ZDGjD3ZKb9uZylTTPSqt8hAf4sGbvbjrjDjrFb3Jm15Tk1/w7WwTE5GbQ2Qhwxx1moc9hr8A/OQ==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.4.38"
+        "@vue/shared": "3.5.0"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.38.tgz",
-      "integrity": "sha512-21z3wA99EABtuf+O3IhdxP0iHgkBs1vuoCAsCKLVJPEjpVqvblwBnTj42vzHRlWDCyxu9ptDm7sI2ZMcWrQqlA==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.0.tgz",
+      "integrity": "sha512-mQyW0F9FaNRdt8ghkAs+BMG3iQ7LGgWKOpkzUzR5AI5swPNydHGL5hvVTqFaeMzwecF1g0c86H4yFQsSxJhH1w==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.4.38",
-        "@vue/shared": "3.4.38"
+        "@vue/reactivity": "3.5.0",
+        "@vue/shared": "3.5.0"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.38.tgz",
-      "integrity": "sha512-afZzmUreU7vKwKsV17H1NDThEEmdYI+GCAK/KY1U957Ig2NATPVjCROv61R19fjZNzMmiU03n79OMnXyJVN0UA==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.0.tgz",
+      "integrity": "sha512-NQQXjpdXgyYVJ2M56FJ+lSJgZiecgQ2HhxhnQBN95FymXegRNY/N2htI7vOTwpP75pfxhIeYOJ8mE8sW8KAW6A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.4.38",
-        "@vue/runtime-core": "3.4.38",
-        "@vue/shared": "3.4.38",
+        "@vue/reactivity": "3.5.0",
+        "@vue/runtime-core": "3.5.0",
+        "@vue/shared": "3.5.0",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.38.tgz",
-      "integrity": "sha512-NggOTr82FbPEkkUvBm4fTGcwUY8UuTsnWC/L2YZBmvaQ4C4Jl/Ao4HHTB+l7WnFCt5M/dN3l0XLuyjzswGYVCA==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.0.tgz",
+      "integrity": "sha512-HyDIFUg+l7L4PKrEnJlCYWHUOlm6NxZhmSxIefZ5MTYjkIPfDfkwhX7hqxAQHfgIAE1uLMLQZwuNR/ozI0NhZg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.4.38",
-        "@vue/shared": "3.4.38"
+        "@vue/compiler-ssr": "3.5.0",
+        "@vue/shared": "3.5.0"
       },
       "peerDependencies": {
-        "vue": "3.4.38"
+        "vue": "3.5.0"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.38.tgz",
-      "integrity": "sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.0.tgz",
+      "integrity": "sha512-m9IgiteBpCkFaMNwCOBkFksA7z8QiKc30ooRuoXWUFRDu0mGyNPlFHmbncF0/Kra1RlX8QrmBbRaIxVvikaR0Q==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -6682,9 +6682,9 @@
       "license": "ISC"
     },
     "node_modules/postcss": {
-      "version": "8.4.41",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
-      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+      "version": "8.4.44",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.44.tgz",
+      "integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==",
       "dev": true,
       "funding": [
         {
@@ -7945,18 +7945,18 @@
       }
     },
     "node_modules/vue": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.38.tgz",
-      "integrity": "sha512-f0ZgN+mZ5KFgVv9wz0f4OgVKukoXtS3nwET4c2vLBGQR50aI8G0cqbFtLlX9Yiyg3LFGBitruPHt2PxwTduJEw==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.0.tgz",
+      "integrity": "sha512-1t70favYoFijwfWJ7g81aTd32obGaAnKYE9FNyMgnEzn3F4YncRi/kqAHHKloG0VXTD8vBYMhbgLKCA+Sk6QDw==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
-        "@vue/compiler-dom": "3.4.38",
-        "@vue/compiler-sfc": "3.4.38",
-        "@vue/runtime-dom": "3.4.38",
-        "@vue/server-renderer": "3.4.38",
-        "@vue/shared": "3.4.38"
+        "@vue/compiler-dom": "3.5.0",
+        "@vue/compiler-sfc": "3.5.0",
+        "@vue/runtime-dom": "3.5.0",
+        "@vue/server-renderer": "3.5.0",
+        "@vue/shared": "3.5.0"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/pdf/package.json b/pdf/package.json
index dd8335b278..65e824671b 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -17,7 +17,7 @@
     "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json,mjs}"
   },
   "dependencies": {
-    "@vue/runtime-core": "3.4.38",
+    "@vue/runtime-core": "3.5.0",
     "html-entities": "2.5.2",
     "html-parse-stringify": "3.0.1"
   },
@@ -40,12 +40,12 @@
     "@vitejs/plugin-vue": "5.1.3",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/babel-preset-app": "5.0.8",
-    "@vue/compiler-dom": "3.4.38",
-    "@vue/compiler-sfc": "3.4.38",
+    "@vue/compiler-dom": "3.5.0",
+    "@vue/compiler-sfc": "3.5.0",
     "@vue/eslint-config-prettier": "9.0.0",
-    "@vue/runtime-dom": "3.4.38",
-    "@vue/server-renderer": "3.4.38",
-    "@vue/shared": "3.4.38",
+    "@vue/runtime-dom": "3.5.0",
+    "@vue/server-renderer": "3.5.0",
+    "@vue/shared": "3.5.0",
     "@vue/test-utils": "2.4.6",
     "css": "3.0.0",
     "dayjs": "1.11.13",
diff --git a/print/package-lock.json b/print/package-lock.json
index fe272724b2..9e9fc5657d 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -31,11 +31,11 @@
         "@tailwindcss/typography": "0.5.15",
         "@typescript-eslint/eslint-plugin": "8.4.0",
         "@vitest/coverage-v8": "2.0.5",
-        "@vue/compiler-dom": "3.4.38",
-        "@vue/compiler-sfc": "3.4.38",
-        "@vue/runtime-dom": "3.4.38",
-        "@vue/server-renderer": "3.4.38",
-        "@vue/shared": "3.4.38",
+        "@vue/compiler-dom": "3.5.0",
+        "@vue/compiler-sfc": "3.5.0",
+        "@vue/runtime-dom": "3.5.0",
+        "@vue/server-renderer": "3.5.0",
+        "@vue/shared": "3.5.0",
         "@vue/test-utils": "2.4.6",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
@@ -50,7 +50,7 @@
         "vite-plugin-eslint2": "4.4.0",
         "vite-svg-loader": "5.1.0",
         "vitest": "2.0.5",
-        "vue": "3.4.38"
+        "vue": "3.5.0"
       }
     },
     "node_modules/@alloc/quick-lru": {
@@ -5365,13 +5365,13 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.38.tgz",
-      "integrity": "sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.0.tgz",
+      "integrity": "sha512-ja7cpqAOfw4tyFAxgBz70Z42miNDeaqTxExTsnXDLomRpqfyCgyvZvFp482fmsElpfvsoMJUsvzULhvxUTW6Iw==",
       "license": "MIT",
       "dependencies": {
-        "@babel/parser": "^7.24.7",
-        "@vue/shared": "3.4.38",
+        "@babel/parser": "^7.25.3",
+        "@vue/shared": "3.5.0",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
@@ -5384,29 +5384,29 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.38.tgz",
-      "integrity": "sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.0.tgz",
+      "integrity": "sha512-xYjUybWZXl+1R/toDy815i4PbeehL2hThiSGkcpmIOCy2HoYyeeC/gAWK/Y/xsoK+GSw198/T5O31bYuQx5uvQ==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.4.38",
-        "@vue/shared": "3.4.38"
+        "@vue/compiler-core": "3.5.0",
+        "@vue/shared": "3.5.0"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.38.tgz",
-      "integrity": "sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.0.tgz",
+      "integrity": "sha512-B9DgLtrqok2GLuaFjLlSL15ZG3ZDBiitUH1ecex9guh/ZcA5MCdwuVE6nsfQxktuZY/QY0awJ35/ripIviCQTQ==",
       "license": "MIT",
       "dependencies": {
-        "@babel/parser": "^7.24.7",
-        "@vue/compiler-core": "3.4.38",
-        "@vue/compiler-dom": "3.4.38",
-        "@vue/compiler-ssr": "3.4.38",
-        "@vue/shared": "3.4.38",
+        "@babel/parser": "^7.25.3",
+        "@vue/compiler-core": "3.5.0",
+        "@vue/compiler-dom": "3.5.0",
+        "@vue/compiler-ssr": "3.5.0",
+        "@vue/shared": "3.5.0",
         "estree-walker": "^2.0.2",
-        "magic-string": "^0.30.10",
-        "postcss": "^8.4.40",
+        "magic-string": "^0.30.11",
+        "postcss": "^8.4.44",
         "source-map-js": "^1.2.0"
       }
     },
@@ -5417,13 +5417,13 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.38.tgz",
-      "integrity": "sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.0.tgz",
+      "integrity": "sha512-E263QZmA1dqRd7c3u/sWTLRMpQOT0aZ8av/L9SoD/v/BVMZaWFHPUUBswS+bzrfvG2suJF8vSLKx6k6ba5SUdA==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.4.38",
-        "@vue/shared": "3.4.38"
+        "@vue/compiler-dom": "3.5.0",
+        "@vue/shared": "3.5.0"
       }
     },
     "node_modules/@vue/devtools-api": {
@@ -5493,53 +5493,53 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.38.tgz",
-      "integrity": "sha512-4vl4wMMVniLsSYYeldAKzbk72+D3hUnkw9z8lDeJacTxAkXeDAP1uE9xr2+aKIN0ipOL8EG2GPouVTH6yF7Gnw==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.0.tgz",
+      "integrity": "sha512-Ew3F5riP3B3ZDGjD3ZKb9uZylTTPSqt8hAf4sGbvbjrjDjrFb3Jm15Tk1/w7WwTE5GbQ2Qhwxx1moc9hr8A/OQ==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.4.38"
+        "@vue/shared": "3.5.0"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.38.tgz",
-      "integrity": "sha512-21z3wA99EABtuf+O3IhdxP0iHgkBs1vuoCAsCKLVJPEjpVqvblwBnTj42vzHRlWDCyxu9ptDm7sI2ZMcWrQqlA==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.0.tgz",
+      "integrity": "sha512-mQyW0F9FaNRdt8ghkAs+BMG3iQ7LGgWKOpkzUzR5AI5swPNydHGL5hvVTqFaeMzwecF1g0c86H4yFQsSxJhH1w==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.4.38",
-        "@vue/shared": "3.4.38"
+        "@vue/reactivity": "3.5.0",
+        "@vue/shared": "3.5.0"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.38.tgz",
-      "integrity": "sha512-afZzmUreU7vKwKsV17H1NDThEEmdYI+GCAK/KY1U957Ig2NATPVjCROv61R19fjZNzMmiU03n79OMnXyJVN0UA==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.0.tgz",
+      "integrity": "sha512-NQQXjpdXgyYVJ2M56FJ+lSJgZiecgQ2HhxhnQBN95FymXegRNY/N2htI7vOTwpP75pfxhIeYOJ8mE8sW8KAW6A==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.4.38",
-        "@vue/runtime-core": "3.4.38",
-        "@vue/shared": "3.4.38",
+        "@vue/reactivity": "3.5.0",
+        "@vue/runtime-core": "3.5.0",
+        "@vue/shared": "3.5.0",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.38.tgz",
-      "integrity": "sha512-NggOTr82FbPEkkUvBm4fTGcwUY8UuTsnWC/L2YZBmvaQ4C4Jl/Ao4HHTB+l7WnFCt5M/dN3l0XLuyjzswGYVCA==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.0.tgz",
+      "integrity": "sha512-HyDIFUg+l7L4PKrEnJlCYWHUOlm6NxZhmSxIefZ5MTYjkIPfDfkwhX7hqxAQHfgIAE1uLMLQZwuNR/ozI0NhZg==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.4.38",
-        "@vue/shared": "3.4.38"
+        "@vue/compiler-ssr": "3.5.0",
+        "@vue/shared": "3.5.0"
       },
       "peerDependencies": {
-        "vue": "3.4.38"
+        "vue": "3.5.0"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.38.tgz",
-      "integrity": "sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.0.tgz",
+      "integrity": "sha512-m9IgiteBpCkFaMNwCOBkFksA7z8QiKc30ooRuoXWUFRDu0mGyNPlFHmbncF0/Kra1RlX8QrmBbRaIxVvikaR0Q==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -13379,9 +13379,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.41",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
-      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+      "version": "8.4.44",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.44.tgz",
+      "integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==",
       "funding": [
         {
           "type": "opencollective",
@@ -17704,16 +17704,16 @@
       "license": "MIT"
     },
     "node_modules/vue": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.38.tgz",
-      "integrity": "sha512-f0ZgN+mZ5KFgVv9wz0f4OgVKukoXtS3nwET4c2vLBGQR50aI8G0cqbFtLlX9Yiyg3LFGBitruPHt2PxwTduJEw==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.0.tgz",
+      "integrity": "sha512-1t70favYoFijwfWJ7g81aTd32obGaAnKYE9FNyMgnEzn3F4YncRi/kqAHHKloG0VXTD8vBYMhbgLKCA+Sk6QDw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.4.38",
-        "@vue/compiler-sfc": "3.4.38",
-        "@vue/runtime-dom": "3.4.38",
-        "@vue/server-renderer": "3.4.38",
-        "@vue/shared": "3.4.38"
+        "@vue/compiler-dom": "3.5.0",
+        "@vue/compiler-sfc": "3.5.0",
+        "@vue/runtime-dom": "3.5.0",
+        "@vue/server-renderer": "3.5.0",
+        "@vue/shared": "3.5.0"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/print/package.json b/print/package.json
index 194ddb989c..c702bf4fb9 100644
--- a/print/package.json
+++ b/print/package.json
@@ -40,11 +40,11 @@
     "@tailwindcss/typography": "0.5.15",
     "@typescript-eslint/eslint-plugin": "8.4.0",
     "@vitest/coverage-v8": "2.0.5",
-    "@vue/compiler-dom": "3.4.38",
-    "@vue/compiler-sfc": "3.4.38",
-    "@vue/runtime-dom": "3.4.38",
-    "@vue/server-renderer": "3.4.38",
-    "@vue/shared": "3.4.38",
+    "@vue/compiler-dom": "3.5.0",
+    "@vue/compiler-sfc": "3.5.0",
+    "@vue/runtime-dom": "3.5.0",
+    "@vue/server-renderer": "3.5.0",
+    "@vue/shared": "3.5.0",
     "@vue/test-utils": "2.4.6",
     "eslint": "8.57.0",
     "eslint-config-prettier": "9.1.0",
@@ -59,6 +59,6 @@
     "vite-plugin-eslint2": "4.4.0",
     "vite-svg-loader": "5.1.0",
     "vitest": "2.0.5",
-    "vue": "3.4.38"
+    "vue": "3.5.0"
   }
 }

From 876f3da3f17dc6c2ba38b2c97816555e2c69cf07 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 3 Sep 2024 19:04:58 +0000
Subject: [PATCH 230/273] chore(deps): lock file maintenance

---
 .ops/aws-setup/package-lock.json |  72 +--
 api/composer.lock                |  50 +-
 e2e/package-lock.json            |  66 +--
 frontend/package-lock.json       | 303 ++++++------
 pdf/package-lock.json            | 234 +++++-----
 print/package-lock.json          | 759 ++++++++++---------------------
 translation/package-lock.json    |  12 +-
 7 files changed, 607 insertions(+), 889 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index 4d70a18da8..e964de857e 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -777,14 +777,14 @@
             }
         },
         "node_modules/@babel/generator": {
-            "version": "7.25.5",
-            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz",
-            "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==",
+            "version": "7.25.6",
+            "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
+            "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
             "dev": true,
             "license": "MIT",
             "peer": true,
             "dependencies": {
-                "@babel/types": "^7.25.4",
+                "@babel/types": "^7.25.6",
                 "@jridgewell/gen-mapping": "^0.3.5",
                 "@jridgewell/trace-mapping": "^0.3.25",
                 "jsesc": "^2.5.1"
@@ -895,15 +895,15 @@
             }
         },
         "node_modules/@babel/helpers": {
-            "version": "7.25.0",
-            "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
-            "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
+            "version": "7.25.6",
+            "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz",
+            "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==",
             "dev": true,
             "license": "MIT",
             "peer": true,
             "dependencies": {
                 "@babel/template": "^7.25.0",
-                "@babel/types": "^7.25.0"
+                "@babel/types": "^7.25.6"
             },
             "engines": {
                 "node": ">=6.9.0"
@@ -927,14 +927,14 @@
             }
         },
         "node_modules/@babel/parser": {
-            "version": "7.25.4",
-            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz",
-            "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==",
+            "version": "7.25.6",
+            "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
+            "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
             "dev": true,
             "license": "MIT",
             "peer": true,
             "dependencies": {
-                "@babel/types": "^7.25.4"
+                "@babel/types": "^7.25.6"
             },
             "bin": {
                 "parser": "bin/babel-parser.js"
@@ -960,18 +960,18 @@
             }
         },
         "node_modules/@babel/traverse": {
-            "version": "7.25.4",
-            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz",
-            "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==",
+            "version": "7.25.6",
+            "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
+            "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
             "dev": true,
             "license": "MIT",
             "peer": true,
             "dependencies": {
                 "@babel/code-frame": "^7.24.7",
-                "@babel/generator": "^7.25.4",
-                "@babel/parser": "^7.25.4",
+                "@babel/generator": "^7.25.6",
+                "@babel/parser": "^7.25.6",
                 "@babel/template": "^7.25.0",
-                "@babel/types": "^7.25.4",
+                "@babel/types": "^7.25.6",
                 "debug": "^4.3.1",
                 "globals": "^11.1.0"
             },
@@ -991,9 +991,9 @@
             }
         },
         "node_modules/@babel/types": {
-            "version": "7.25.4",
-            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz",
-            "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==",
+            "version": "7.25.6",
+            "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
+            "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
             "dev": true,
             "license": "MIT",
             "peer": true,
@@ -3093,9 +3093,9 @@
             }
         },
         "node_modules/aws-sdk": {
-            "version": "2.1685.0",
-            "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1685.0.tgz",
-            "integrity": "sha512-axo1by16nZXqHAFu65+/pLnqqaU3ez5ko3jTGDt0byafT7XD948z3WqqrXWT9vJTUF93DdTZ9DEcazj4Ai91cQ==",
+            "version": "2.1688.0",
+            "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1688.0.tgz",
+            "integrity": "sha512-L7AWt2+09uDQQfNRUaxvKEM+qHJdwBOln7xiMZg1kE1iNSGSQlwDPGYSFXwdMJDKJkeitJvhFrDhxon3cQ3ppA==",
             "hasInstallScript": true,
             "license": "Apache-2.0",
             "dependencies": {
@@ -3342,9 +3342,9 @@
             }
         },
         "node_modules/caniuse-lite": {
-            "version": "1.0.30001653",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz",
-            "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==",
+            "version": "1.0.30001655",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz",
+            "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==",
             "dev": true,
             "funding": [
                 {
@@ -3796,9 +3796,9 @@
             }
         },
         "node_modules/escalade": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
-            "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+            "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
             "license": "MIT",
             "engines": {
                 "node": ">=6"
@@ -4659,9 +4659,9 @@
             }
         },
         "node_modules/get-tsconfig": {
-            "version": "4.7.6",
-            "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
-            "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==",
+            "version": "4.8.0",
+            "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.0.tgz",
+            "integrity": "sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -6198,9 +6198,9 @@
             "license": "ISC"
         },
         "node_modules/picocolors": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
-            "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+            "version": "1.1.0",
+            "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz",
+            "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==",
             "dev": true,
             "license": "ISC",
             "peer": true
diff --git a/api/composer.lock b/api/composer.lock
index ba9d1b1e86..e367ab30d9 100644
--- a/api/composer.lock
+++ b/api/composer.lock
@@ -762,16 +762,16 @@
         },
         {
             "name": "doctrine/dbal",
-            "version": "3.9.0",
+            "version": "3.9.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/doctrine/dbal.git",
-                "reference": "d8f68ea6cc00912e5313237130b8c8decf4d28c6"
+                "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/doctrine/dbal/zipball/d8f68ea6cc00912e5313237130b8c8decf4d28c6",
-                "reference": "d8f68ea6cc00912e5313237130b8c8decf4d28c6",
+                "url": "https://api.github.com/repos/doctrine/dbal/zipball/d7dc08f98cba352b2bab5d32c5e58f7e745c11a7",
+                "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7",
                 "shasum": ""
             },
             "require": {
@@ -787,7 +787,7 @@
                 "doctrine/coding-standard": "12.0.0",
                 "fig/log-test": "^1",
                 "jetbrains/phpstorm-stubs": "2023.1",
-                "phpstan/phpstan": "1.11.7",
+                "phpstan/phpstan": "1.12.0",
                 "phpstan/phpstan-strict-rules": "^1.6",
                 "phpunit/phpunit": "9.6.20",
                 "psalm/plugin-phpunit": "0.18.4",
@@ -855,7 +855,7 @@
             ],
             "support": {
                 "issues": "https://github.com/doctrine/dbal/issues",
-                "source": "https://github.com/doctrine/dbal/tree/3.9.0"
+                "source": "https://github.com/doctrine/dbal/tree/3.9.1"
             },
             "funding": [
                 {
@@ -871,7 +871,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-08-15T07:34:42+00:00"
+            "time": "2024-09-01T13:49:23+00:00"
         },
         {
             "name": "doctrine/deprecations",
@@ -3991,16 +3991,16 @@
         },
         {
             "name": "phpstan/phpdoc-parser",
-            "version": "1.29.1",
+            "version": "1.30.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpdoc-parser.git",
-                "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4"
+                "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fcaefacf2d5c417e928405b71b400d4ce10daaf4",
-                "reference": "fcaefacf2d5c417e928405b71b400d4ce10daaf4",
+                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/5ceb0e384997db59f38774bf79c2a6134252c08f",
+                "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f",
                 "shasum": ""
             },
             "require": {
@@ -4032,9 +4032,9 @@
             "description": "PHPDoc parser with support for nullable, intersection and generic types",
             "support": {
                 "issues": "https://github.com/phpstan/phpdoc-parser/issues",
-                "source": "https://github.com/phpstan/phpdoc-parser/tree/1.29.1"
+                "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.0"
             },
-            "time": "2024-05-31T08:52:43+00:00"
+            "time": "2024-08-29T09:54:52+00:00"
         },
         {
             "name": "psr/cache",
@@ -7902,16 +7902,16 @@
         },
         {
             "name": "symfony/psr-http-message-bridge",
-            "version": "v7.1.3",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/psr-http-message-bridge.git",
-                "reference": "1365d10f5476f74a27cf9c2d1eee70c069019db0"
+                "reference": "405a7bcd872f1563966f64be19f1362d94ce71ab"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/1365d10f5476f74a27cf9c2d1eee70c069019db0",
-                "reference": "1365d10f5476f74a27cf9c2d1eee70c069019db0",
+                "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/405a7bcd872f1563966f64be19f1362d94ce71ab",
+                "reference": "405a7bcd872f1563966f64be19f1362d94ce71ab",
                 "shasum": ""
             },
             "require": {
@@ -7965,7 +7965,7 @@
                 "psr-7"
             ],
             "support": {
-                "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.3"
+                "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -7981,7 +7981,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-07-17T06:10:24+00:00"
+            "time": "2024-08-15T22:48:53+00:00"
         },
         {
             "name": "symfony/routing",
@@ -8994,16 +8994,16 @@
         },
         {
             "name": "symfony/twig-bridge",
-            "version": "v7.1.1",
+            "version": "v7.1.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/twig-bridge.git",
-                "reference": "96e6e12a63db80bcedefc012042d2cb2d1a015f8"
+                "reference": "2db32cfe8fc57797908ef0bee232b90dbe42af66"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/96e6e12a63db80bcedefc012042d2cb2d1a015f8",
-                "reference": "96e6e12a63db80bcedefc012042d2cb2d1a015f8",
+                "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/2db32cfe8fc57797908ef0bee232b90dbe42af66",
+                "reference": "2db32cfe8fc57797908ef0bee232b90dbe42af66",
                 "shasum": ""
             },
             "require": {
@@ -9083,7 +9083,7 @@
             "description": "Provides integration for Twig with various Symfony components",
             "homepage": "https://symfony.com",
             "support": {
-                "source": "https://github.com/symfony/twig-bridge/tree/v7.1.1"
+                "source": "https://github.com/symfony/twig-bridge/tree/v7.1.4"
             },
             "funding": [
                 {
@@ -9099,7 +9099,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-05-31T14:57:53+00:00"
+            "time": "2024-08-29T08:16:25+00:00"
         },
         {
             "name": "symfony/twig-bundle",
diff --git a/e2e/package-lock.json b/e2e/package-lock.json
index 09d8a7e664..f6fdaf02f0 100644
--- a/e2e/package-lock.json
+++ b/e2e/package-lock.json
@@ -112,14 +112,14 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.25.5",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz",
-      "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
+      "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
-        "@babel/types": "^7.25.4",
+        "@babel/types": "^7.25.6",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
         "jsesc": "^2.5.1"
@@ -230,15 +230,15 @@
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
-      "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz",
+      "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
         "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/types": "^7.25.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -262,14 +262,14 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz",
-      "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
+      "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
-        "@babel/types": "^7.25.4"
+        "@babel/types": "^7.25.6"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -295,18 +295,18 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz",
-      "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
+      "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
         "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.4",
-        "@babel/parser": "^7.25.4",
+        "@babel/generator": "^7.25.6",
+        "@babel/parser": "^7.25.6",
         "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.4",
+        "@babel/types": "^7.25.6",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -326,9 +326,9 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz",
-      "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
+      "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
       "dev": true,
       "license": "MIT",
       "peer": true,
@@ -657,9 +657,9 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.5.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.1.tgz",
-      "integrity": "sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw==",
+      "version": "22.5.2",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.2.tgz",
+      "integrity": "sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==",
       "dev": true,
       "license": "MIT",
       "optional": true,
@@ -1075,9 +1075,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001653",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz",
-      "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==",
+      "version": "1.0.30001655",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz",
+      "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==",
       "dev": true,
       "funding": [
         {
@@ -1620,9 +1620,9 @@
       }
     },
     "node_modules/escalade": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
-      "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
       "dev": true,
       "license": "MIT",
       "peer": true,
@@ -3511,9 +3511,9 @@
       "license": "MIT"
     },
     "node_modules/picocolors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
-      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz",
+      "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==",
       "dev": true,
       "license": "ISC",
       "peer": true
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 2aeaf8e030..f12f4c0a46 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -216,13 +216,13 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.25.5",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz",
-      "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
+      "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.4",
+        "@babel/types": "^7.25.6",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
         "jsesc": "^2.5.1"
@@ -510,14 +510,14 @@
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
-      "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz",
+      "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/types": "^7.25.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -540,12 +540,12 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz",
-      "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
+      "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.4"
+        "@babel/types": "^7.25.6"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -772,13 +772,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-assertions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz",
-      "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz",
+      "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.24.8"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -788,13 +788,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-attributes": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz",
-      "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz",
+      "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.24.8"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1958,9 +1958,9 @@
       "license": "MIT"
     },
     "node_modules/@babel/runtime": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.4.tgz",
-      "integrity": "sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
+      "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
       "license": "MIT",
       "dependencies": {
         "regenerator-runtime": "^0.14.0"
@@ -1985,17 +1985,17 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz",
-      "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
+      "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.4",
-        "@babel/parser": "^7.25.4",
+        "@babel/generator": "^7.25.6",
+        "@babel/parser": "^7.25.6",
         "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.4",
+        "@babel/types": "^7.25.6",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -2014,9 +2014,9 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz",
-      "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
+      "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
       "license": "MIT",
       "dependencies": {
         "@babel/helper-string-parser": "^7.24.8",
@@ -3046,9 +3046,9 @@
       }
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.1.tgz",
-      "integrity": "sha512-2thheikVEuU7ZxFXubPDOtspKn1x0yqaYQwvALVtEcvFhMifPADBrgRPyHV0TF3b+9BgvgjgagVyvA/UqPZHmg==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz",
+      "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==",
       "cpu": [
         "arm"
       ],
@@ -3060,9 +3060,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.1.tgz",
-      "integrity": "sha512-t1lLYn4V9WgnIFHXy1d2Di/7gyzBWS8G5pQSXdZqfrdCGTwi1VasRMSS81DTYb+avDs/Zz4A6dzERki5oRYz1g==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz",
+      "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==",
       "cpu": [
         "arm64"
       ],
@@ -3074,9 +3074,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.1.tgz",
-      "integrity": "sha512-AH/wNWSEEHvs6t4iJ3RANxW5ZCK3fUnmf0gyMxWCesY1AlUj8jY7GC+rQE4wd3gwmZ9XDOpL0kcFnCjtN7FXlA==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz",
+      "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==",
       "cpu": [
         "arm64"
       ],
@@ -3088,9 +3088,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.1.tgz",
-      "integrity": "sha512-dO0BIz/+5ZdkLZrVgQrDdW7m2RkrLwYTh2YMFG9IpBtlC1x1NPNSXkfczhZieOlOLEqgXOFH3wYHB7PmBtf+Bg==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz",
+      "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==",
       "cpu": [
         "x64"
       ],
@@ -3102,9 +3102,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.1.tgz",
-      "integrity": "sha512-sWWgdQ1fq+XKrlda8PsMCfut8caFwZBmhYeoehJ05FdI0YZXk6ZyUjWLrIgbR/VgiGycrFKMMgp7eJ69HOF2pQ==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz",
+      "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==",
       "cpu": [
         "arm"
       ],
@@ -3116,9 +3116,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.1.tgz",
-      "integrity": "sha512-9OIiSuj5EsYQlmwhmFRA0LRO0dRRjdCVZA3hnmZe1rEwRk11Jy3ECGGq3a7RrVEZ0/pCsYWx8jG3IvcrJ6RCew==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz",
+      "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==",
       "cpu": [
         "arm"
       ],
@@ -3130,9 +3130,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.1.tgz",
-      "integrity": "sha512-0kuAkRK4MeIUbzQYu63NrJmfoUVicajoRAL1bpwdYIYRcs57iyIV9NLcuyDyDXE2GiZCL4uhKSYAnyWpjZkWow==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz",
+      "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==",
       "cpu": [
         "arm64"
       ],
@@ -3144,9 +3144,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.1.tgz",
-      "integrity": "sha512-/6dYC9fZtfEY0vozpc5bx1RP4VrtEOhNQGb0HwvYNwXD1BBbwQ5cKIbUVVU7G2d5WRE90NfB922elN8ASXAJEA==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz",
+      "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==",
       "cpu": [
         "arm64"
       ],
@@ -3158,9 +3158,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.1.tgz",
-      "integrity": "sha512-ltUWy+sHeAh3YZ91NUsV4Xg3uBXAlscQe8ZOXRCVAKLsivGuJsrkawYPUEyCV3DYa9urgJugMLn8Z3Z/6CeyRQ==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz",
+      "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==",
       "cpu": [
         "ppc64"
       ],
@@ -3172,9 +3172,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.1.tgz",
-      "integrity": "sha512-BggMndzI7Tlv4/abrgLwa/dxNEMn2gC61DCLrTzw8LkpSKel4o+O+gtjbnkevZ18SKkeN3ihRGPuBxjaetWzWg==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz",
+      "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==",
       "cpu": [
         "riscv64"
       ],
@@ -3186,9 +3186,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.1.tgz",
-      "integrity": "sha512-z/9rtlGd/OMv+gb1mNSjElasMf9yXusAxnRDrBaYB+eS1shFm6/4/xDH1SAISO5729fFKUkJ88TkGPRUh8WSAA==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz",
+      "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==",
       "cpu": [
         "s390x"
       ],
@@ -3200,9 +3200,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.1.tgz",
-      "integrity": "sha512-kXQVcWqDcDKw0S2E0TmhlTLlUgAmMVqPrJZR+KpH/1ZaZhLSl23GZpQVmawBQGVhyP5WXIsIQ/zqbDBBYmxm5w==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz",
+      "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==",
       "cpu": [
         "x64"
       ],
@@ -3214,9 +3214,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.1.tgz",
-      "integrity": "sha512-CbFv/WMQsSdl+bpX6rVbzR4kAjSSBuDgCqb1l4J68UYsQNalz5wOqLGYj4ZI0thGpyX5kc+LLZ9CL+kpqDovZA==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz",
+      "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==",
       "cpu": [
         "x64"
       ],
@@ -3228,9 +3228,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.1.tgz",
-      "integrity": "sha512-3Q3brDgA86gHXWHklrwdREKIrIbxC0ZgU8lwpj0eEKGBQH+31uPqr0P2v11pn0tSIxHvcdOWxa4j+YvLNx1i6g==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz",
+      "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==",
       "cpu": [
         "arm64"
       ],
@@ -3242,9 +3242,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.1.tgz",
-      "integrity": "sha512-tNg+jJcKR3Uwe4L0/wY3Ro0H+u3nrb04+tcq1GSYzBEmKLeOQF2emk1whxlzNqb6MMrQ2JOcQEpuuiPLyRcSIw==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz",
+      "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==",
       "cpu": [
         "ia32"
       ],
@@ -3256,9 +3256,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.1.tgz",
-      "integrity": "sha512-xGiIH95H1zU7naUyTKEyOA/I0aexNMUdO9qRv0bLKN3qu25bBdrxZHqA3PTJ24YNN/GdMzG4xkDcd/GvjuhfLg==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz",
+      "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==",
       "cpu": [
         "x64"
       ],
@@ -3594,9 +3594,9 @@
       }
     },
     "node_modules/@swc/helpers": {
-      "version": "0.5.12",
-      "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.12.tgz",
-      "integrity": "sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==",
+      "version": "0.5.13",
+      "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz",
+      "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==",
       "license": "Apache-2.0",
       "dependencies": {
         "tslib": "^2.4.0"
@@ -4722,45 +4722,45 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.38.tgz",
-      "integrity": "sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.0.tgz",
+      "integrity": "sha512-ja7cpqAOfw4tyFAxgBz70Z42miNDeaqTxExTsnXDLomRpqfyCgyvZvFp482fmsElpfvsoMJUsvzULhvxUTW6Iw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/parser": "^7.24.7",
-        "@vue/shared": "3.4.38",
+        "@babel/parser": "^7.25.3",
+        "@vue/shared": "3.5.0",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.38.tgz",
-      "integrity": "sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.0.tgz",
+      "integrity": "sha512-xYjUybWZXl+1R/toDy815i4PbeehL2hThiSGkcpmIOCy2HoYyeeC/gAWK/Y/xsoK+GSw198/T5O31bYuQx5uvQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.4.38",
-        "@vue/shared": "3.4.38"
+        "@vue/compiler-core": "3.5.0",
+        "@vue/shared": "3.5.0"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.38.tgz",
-      "integrity": "sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.0.tgz",
+      "integrity": "sha512-B9DgLtrqok2GLuaFjLlSL15ZG3ZDBiitUH1ecex9guh/ZcA5MCdwuVE6nsfQxktuZY/QY0awJ35/ripIviCQTQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/parser": "^7.24.7",
-        "@vue/compiler-core": "3.4.38",
-        "@vue/compiler-dom": "3.4.38",
-        "@vue/compiler-ssr": "3.4.38",
-        "@vue/shared": "3.4.38",
+        "@babel/parser": "^7.25.3",
+        "@vue/compiler-core": "3.5.0",
+        "@vue/compiler-dom": "3.5.0",
+        "@vue/compiler-ssr": "3.5.0",
+        "@vue/shared": "3.5.0",
         "estree-walker": "^2.0.2",
-        "magic-string": "^0.30.10",
-        "postcss": "^8.4.40",
+        "magic-string": "^0.30.11",
+        "postcss": "^8.4.44",
         "source-map-js": "^1.2.0"
       }
     },
@@ -4775,14 +4775,14 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.38.tgz",
-      "integrity": "sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.0.tgz",
+      "integrity": "sha512-E263QZmA1dqRd7c3u/sWTLRMpQOT0aZ8av/L9SoD/v/BVMZaWFHPUUBswS+bzrfvG2suJF8vSLKx6k6ba5SUdA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.4.38",
-        "@vue/shared": "3.4.38"
+        "@vue/compiler-dom": "3.5.0",
+        "@vue/shared": "3.5.0"
       }
     },
     "node_modules/@vue/component-compiler-utils": {
@@ -4891,9 +4891,9 @@
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.38.tgz",
-      "integrity": "sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.0.tgz",
+      "integrity": "sha512-m9IgiteBpCkFaMNwCOBkFksA7z8QiKc30ooRuoXWUFRDu0mGyNPlFHmbncF0/Kra1RlX8QrmBbRaIxVvikaR0Q==",
       "dev": true,
       "license": "MIT"
     },
@@ -5463,9 +5463,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001653",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz",
-      "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==",
+      "version": "1.0.30001655",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz",
+      "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==",
       "dev": true,
       "funding": [
         {
@@ -6486,9 +6486,9 @@
       }
     },
     "node_modules/escalade": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
-      "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -7544,9 +7544,9 @@
       }
     },
     "node_modules/get-tsconfig": {
-      "version": "4.7.6",
-      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
-      "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==",
+      "version": "4.8.0",
+      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.0.tgz",
+      "integrity": "sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -9862,9 +9862,9 @@
       }
     },
     "node_modules/picocolors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
-      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz",
+      "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==",
       "license": "ISC"
     },
     "node_modules/picomatch": {
@@ -9915,9 +9915,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.41",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
-      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+      "version": "8.4.44",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.44.tgz",
+      "integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==",
       "funding": [
         {
           "type": "opencollective",
@@ -10314,9 +10314,9 @@
       }
     },
     "node_modules/prosemirror-view": {
-      "version": "1.34.1",
-      "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.34.1.tgz",
-      "integrity": "sha512-KS2xmqrAM09h3SLu1S2pNO/ZoIP38qkTJ6KFd7+BeSfmX/ek0n5yOfGuiTZjFNTC8GOsEIUa1tHxt+2FMu3yWQ==",
+      "version": "1.34.2",
+      "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.34.2.tgz",
+      "integrity": "sha512-tPX/V2Xd70vrAGQ/V9CppJtPKnQyQMypJGlLylvdI94k6JaG+4P6fVmXPR1zc1eVTW0gq3c6zsfqwJKCRLaG9Q==",
       "license": "MIT",
       "dependencies": {
         "prosemirror-model": "^1.20.0",
@@ -10699,9 +10699,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.1.tgz",
-      "integrity": "sha512-ZnYyKvscThhgd3M5+Qt3pmhO4jIRR5RGzaSovB6Q7rGNrK5cUncrtLmcTTJVSdcKXyZjW8X8MB0JMSuH9bcAJg==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz",
+      "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -10715,22 +10715,22 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.21.1",
-        "@rollup/rollup-android-arm64": "4.21.1",
-        "@rollup/rollup-darwin-arm64": "4.21.1",
-        "@rollup/rollup-darwin-x64": "4.21.1",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.21.1",
-        "@rollup/rollup-linux-arm-musleabihf": "4.21.1",
-        "@rollup/rollup-linux-arm64-gnu": "4.21.1",
-        "@rollup/rollup-linux-arm64-musl": "4.21.1",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.21.1",
-        "@rollup/rollup-linux-riscv64-gnu": "4.21.1",
-        "@rollup/rollup-linux-s390x-gnu": "4.21.1",
-        "@rollup/rollup-linux-x64-gnu": "4.21.1",
-        "@rollup/rollup-linux-x64-musl": "4.21.1",
-        "@rollup/rollup-win32-arm64-msvc": "4.21.1",
-        "@rollup/rollup-win32-ia32-msvc": "4.21.1",
-        "@rollup/rollup-win32-x64-msvc": "4.21.1",
+        "@rollup/rollup-android-arm-eabi": "4.21.2",
+        "@rollup/rollup-android-arm64": "4.21.2",
+        "@rollup/rollup-darwin-arm64": "4.21.2",
+        "@rollup/rollup-darwin-x64": "4.21.2",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.21.2",
+        "@rollup/rollup-linux-arm-musleabihf": "4.21.2",
+        "@rollup/rollup-linux-arm64-gnu": "4.21.2",
+        "@rollup/rollup-linux-arm64-musl": "4.21.2",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2",
+        "@rollup/rollup-linux-riscv64-gnu": "4.21.2",
+        "@rollup/rollup-linux-s390x-gnu": "4.21.2",
+        "@rollup/rollup-linux-x64-gnu": "4.21.2",
+        "@rollup/rollup-linux-x64-musl": "4.21.2",
+        "@rollup/rollup-win32-arm64-msvc": "4.21.2",
+        "@rollup/rollup-win32-ia32-msvc": "4.21.2",
+        "@rollup/rollup-win32-x64-msvc": "4.21.2",
         "fsevents": "~2.3.2"
       }
     },
@@ -11781,14 +11781,13 @@
       }
     },
     "node_modules/unplugin-vue-components/node_modules/unplugin": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.2.tgz",
-      "integrity": "sha512-bEqQxeC7rxtxPZ3M5V4Djcc4lQqKPgGe3mAWZvxcSmX5jhGxll19NliaRzQSQPrk4xJZSGniK3puLWpRuZN7VQ==",
+      "version": "1.12.3",
+      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.3.tgz",
+      "integrity": "sha512-my8DH0/T/Kx33KO+6QXAqdeMYgyy0GktlOpdQjpagfHKw5DrD0ctPr7SHUyOT3g4ZVpzCQGt/qcpuoKJ/pniHA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "acorn": "^8.12.1",
-        "chokidar": "^3.6.0",
         "webpack-sources": "^3.2.3",
         "webpack-virtual-modules": "^0.6.2"
       },
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index ce44f0fc0c..70fb1e3d29 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -138,13 +138,13 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.25.5",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz",
-      "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
+      "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.4",
+        "@babel/types": "^7.25.6",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
         "jsesc": "^2.5.1"
@@ -434,14 +434,14 @@
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
-      "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz",
+      "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/types": "^7.25.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -464,13 +464,13 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz",
-      "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
+      "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.4"
+        "@babel/types": "^7.25.6"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -697,13 +697,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-assertions": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz",
-      "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz",
+      "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.24.8"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -713,13 +713,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-attributes": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz",
-      "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz",
+      "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.24.8"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1883,9 +1883,9 @@
       "license": "MIT"
     },
     "node_modules/@babel/runtime": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.4.tgz",
-      "integrity": "sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz",
+      "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==",
       "license": "MIT",
       "dependencies": {
         "regenerator-runtime": "^0.14.0"
@@ -1910,17 +1910,17 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz",
-      "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
+      "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.4",
-        "@babel/parser": "^7.25.4",
+        "@babel/generator": "^7.25.6",
+        "@babel/parser": "^7.25.6",
         "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.4",
+        "@babel/types": "^7.25.6",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -1939,9 +1939,9 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz",
-      "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
+      "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2886,9 +2886,9 @@
       "peer": true
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.1.tgz",
-      "integrity": "sha512-2thheikVEuU7ZxFXubPDOtspKn1x0yqaYQwvALVtEcvFhMifPADBrgRPyHV0TF3b+9BgvgjgagVyvA/UqPZHmg==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz",
+      "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==",
       "cpu": [
         "arm"
       ],
@@ -2900,9 +2900,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.1.tgz",
-      "integrity": "sha512-t1lLYn4V9WgnIFHXy1d2Di/7gyzBWS8G5pQSXdZqfrdCGTwi1VasRMSS81DTYb+avDs/Zz4A6dzERki5oRYz1g==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz",
+      "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==",
       "cpu": [
         "arm64"
       ],
@@ -2914,9 +2914,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.1.tgz",
-      "integrity": "sha512-AH/wNWSEEHvs6t4iJ3RANxW5ZCK3fUnmf0gyMxWCesY1AlUj8jY7GC+rQE4wd3gwmZ9XDOpL0kcFnCjtN7FXlA==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz",
+      "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==",
       "cpu": [
         "arm64"
       ],
@@ -2928,9 +2928,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.1.tgz",
-      "integrity": "sha512-dO0BIz/+5ZdkLZrVgQrDdW7m2RkrLwYTh2YMFG9IpBtlC1x1NPNSXkfczhZieOlOLEqgXOFH3wYHB7PmBtf+Bg==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz",
+      "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==",
       "cpu": [
         "x64"
       ],
@@ -2942,9 +2942,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.1.tgz",
-      "integrity": "sha512-sWWgdQ1fq+XKrlda8PsMCfut8caFwZBmhYeoehJ05FdI0YZXk6ZyUjWLrIgbR/VgiGycrFKMMgp7eJ69HOF2pQ==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz",
+      "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==",
       "cpu": [
         "arm"
       ],
@@ -2956,9 +2956,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.1.tgz",
-      "integrity": "sha512-9OIiSuj5EsYQlmwhmFRA0LRO0dRRjdCVZA3hnmZe1rEwRk11Jy3ECGGq3a7RrVEZ0/pCsYWx8jG3IvcrJ6RCew==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz",
+      "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==",
       "cpu": [
         "arm"
       ],
@@ -2970,9 +2970,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.1.tgz",
-      "integrity": "sha512-0kuAkRK4MeIUbzQYu63NrJmfoUVicajoRAL1bpwdYIYRcs57iyIV9NLcuyDyDXE2GiZCL4uhKSYAnyWpjZkWow==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz",
+      "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==",
       "cpu": [
         "arm64"
       ],
@@ -2984,9 +2984,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.1.tgz",
-      "integrity": "sha512-/6dYC9fZtfEY0vozpc5bx1RP4VrtEOhNQGb0HwvYNwXD1BBbwQ5cKIbUVVU7G2d5WRE90NfB922elN8ASXAJEA==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz",
+      "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==",
       "cpu": [
         "arm64"
       ],
@@ -2998,9 +2998,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.1.tgz",
-      "integrity": "sha512-ltUWy+sHeAh3YZ91NUsV4Xg3uBXAlscQe8ZOXRCVAKLsivGuJsrkawYPUEyCV3DYa9urgJugMLn8Z3Z/6CeyRQ==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz",
+      "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==",
       "cpu": [
         "ppc64"
       ],
@@ -3012,9 +3012,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.1.tgz",
-      "integrity": "sha512-BggMndzI7Tlv4/abrgLwa/dxNEMn2gC61DCLrTzw8LkpSKel4o+O+gtjbnkevZ18SKkeN3ihRGPuBxjaetWzWg==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz",
+      "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==",
       "cpu": [
         "riscv64"
       ],
@@ -3026,9 +3026,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.1.tgz",
-      "integrity": "sha512-z/9rtlGd/OMv+gb1mNSjElasMf9yXusAxnRDrBaYB+eS1shFm6/4/xDH1SAISO5729fFKUkJ88TkGPRUh8WSAA==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz",
+      "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==",
       "cpu": [
         "s390x"
       ],
@@ -3040,9 +3040,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.1.tgz",
-      "integrity": "sha512-kXQVcWqDcDKw0S2E0TmhlTLlUgAmMVqPrJZR+KpH/1ZaZhLSl23GZpQVmawBQGVhyP5WXIsIQ/zqbDBBYmxm5w==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz",
+      "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==",
       "cpu": [
         "x64"
       ],
@@ -3054,9 +3054,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.1.tgz",
-      "integrity": "sha512-CbFv/WMQsSdl+bpX6rVbzR4kAjSSBuDgCqb1l4J68UYsQNalz5wOqLGYj4ZI0thGpyX5kc+LLZ9CL+kpqDovZA==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz",
+      "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==",
       "cpu": [
         "x64"
       ],
@@ -3068,9 +3068,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.1.tgz",
-      "integrity": "sha512-3Q3brDgA86gHXWHklrwdREKIrIbxC0ZgU8lwpj0eEKGBQH+31uPqr0P2v11pn0tSIxHvcdOWxa4j+YvLNx1i6g==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz",
+      "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==",
       "cpu": [
         "arm64"
       ],
@@ -3082,9 +3082,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.1.tgz",
-      "integrity": "sha512-tNg+jJcKR3Uwe4L0/wY3Ro0H+u3nrb04+tcq1GSYzBEmKLeOQF2emk1whxlzNqb6MMrQ2JOcQEpuuiPLyRcSIw==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz",
+      "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==",
       "cpu": [
         "ia32"
       ],
@@ -3096,9 +3096,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.1.tgz",
-      "integrity": "sha512-xGiIH95H1zU7naUyTKEyOA/I0aexNMUdO9qRv0bLKN3qu25bBdrxZHqA3PTJ24YNN/GdMzG4xkDcd/GvjuhfLg==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz",
+      "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==",
       "cpu": [
         "x64"
       ],
@@ -3117,9 +3117,9 @@
       "license": "MIT"
     },
     "node_modules/@swc/helpers": {
-      "version": "0.5.12",
-      "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.12.tgz",
-      "integrity": "sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==",
+      "version": "0.5.13",
+      "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz",
+      "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==",
       "license": "Apache-2.0",
       "peer": true,
       "dependencies": {
@@ -4060,9 +4060,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001653",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz",
-      "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==",
+      "version": "1.0.30001655",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz",
+      "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==",
       "dev": true,
       "funding": [
         {
@@ -4618,9 +4618,9 @@
       }
     },
     "node_modules/escalade": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
-      "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -6675,16 +6675,16 @@
       }
     },
     "node_modules/picocolors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
-      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz",
+      "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==",
       "dev": true,
       "license": "ISC"
     },
     "node_modules/postcss": {
-      "version": "8.4.41",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
-      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+      "version": "8.4.44",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.44.tgz",
+      "integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==",
       "dev": true,
       "funding": [
         {
@@ -7011,9 +7011,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.1.tgz",
-      "integrity": "sha512-ZnYyKvscThhgd3M5+Qt3pmhO4jIRR5RGzaSovB6Q7rGNrK5cUncrtLmcTTJVSdcKXyZjW8X8MB0JMSuH9bcAJg==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz",
+      "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -7027,22 +7027,22 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.21.1",
-        "@rollup/rollup-android-arm64": "4.21.1",
-        "@rollup/rollup-darwin-arm64": "4.21.1",
-        "@rollup/rollup-darwin-x64": "4.21.1",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.21.1",
-        "@rollup/rollup-linux-arm-musleabihf": "4.21.1",
-        "@rollup/rollup-linux-arm64-gnu": "4.21.1",
-        "@rollup/rollup-linux-arm64-musl": "4.21.1",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.21.1",
-        "@rollup/rollup-linux-riscv64-gnu": "4.21.1",
-        "@rollup/rollup-linux-s390x-gnu": "4.21.1",
-        "@rollup/rollup-linux-x64-gnu": "4.21.1",
-        "@rollup/rollup-linux-x64-musl": "4.21.1",
-        "@rollup/rollup-win32-arm64-msvc": "4.21.1",
-        "@rollup/rollup-win32-ia32-msvc": "4.21.1",
-        "@rollup/rollup-win32-x64-msvc": "4.21.1",
+        "@rollup/rollup-android-arm-eabi": "4.21.2",
+        "@rollup/rollup-android-arm64": "4.21.2",
+        "@rollup/rollup-darwin-arm64": "4.21.2",
+        "@rollup/rollup-darwin-x64": "4.21.2",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.21.2",
+        "@rollup/rollup-linux-arm-musleabihf": "4.21.2",
+        "@rollup/rollup-linux-arm64-gnu": "4.21.2",
+        "@rollup/rollup-linux-arm64-musl": "4.21.2",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2",
+        "@rollup/rollup-linux-riscv64-gnu": "4.21.2",
+        "@rollup/rollup-linux-s390x-gnu": "4.21.2",
+        "@rollup/rollup-linux-x64-gnu": "4.21.2",
+        "@rollup/rollup-linux-x64-musl": "4.21.2",
+        "@rollup/rollup-win32-arm64-msvc": "4.21.2",
+        "@rollup/rollup-win32-ia32-msvc": "4.21.2",
+        "@rollup/rollup-win32-x64-msvc": "4.21.2",
         "fsevents": "~2.3.2"
       }
     },
@@ -7968,9 +7968,9 @@
       }
     },
     "node_modules/vue-component-type-helpers": {
-      "version": "2.0.29",
-      "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.29.tgz",
-      "integrity": "sha512-58i+ZhUAUpwQ+9h5Hck0D+jr1qbYl4voRt5KffBx8qzELViQ4XdT/Tuo+mzq8u63teAG8K0lLaOiL5ofqW38rg==",
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.1.4.tgz",
+      "integrity": "sha512-aVqB3KxwpM76cYRkpnezl1J62E/1omzHQfx1yuz7zcbxmzmP/PeSgI20NEmkdeGnjZPVzm0V9fB4ZyRu5BBj4A==",
       "dev": true,
       "license": "MIT"
     },
diff --git a/print/package-lock.json b/print/package-lock.json
index fe272724b2..6c9c6a9b42 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -174,13 +174,13 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.25.5",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.5.tgz",
-      "integrity": "sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz",
+      "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.4",
+        "@babel/types": "^7.25.6",
         "@jridgewell/gen-mapping": "^0.3.5",
         "@jridgewell/trace-mapping": "^0.3.25",
         "jsesc": "^2.5.1"
@@ -419,14 +419,14 @@
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.25.0",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz",
-      "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz",
+      "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.0"
+        "@babel/types": "^7.25.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -527,12 +527,12 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.4.tgz",
-      "integrity": "sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz",
+      "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==",
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.4"
+        "@babel/types": "^7.25.6"
       },
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -576,13 +576,13 @@
       }
     },
     "node_modules/@babel/plugin-syntax-import-attributes": {
-      "version": "7.24.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz",
-      "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz",
+      "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.24.7"
+        "@babel/helper-plugin-utils": "^7.24.8"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -657,9 +657,9 @@
       }
     },
     "node_modules/@babel/standalone": {
-      "version": "7.25.5",
-      "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.25.5.tgz",
-      "integrity": "sha512-46bI7GJHwgWfWszOWMvJIsJjXd+LBMIlaiw4R54+b7GvDfxTVE6ytsqR8uEiI/zYECoB33ChwfN0wq/MLHLFXg==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.25.6.tgz",
+      "integrity": "sha512-Kf2ZcZVqsKbtYhlA7sP0z5A3q5hmCVYMKMWRWNK/5OVwHIve3JY1djVRmIVAx8FMueLIfZGKQDIILK2w8zO4mg==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -682,17 +682,17 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.4.tgz",
-      "integrity": "sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz",
+      "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/code-frame": "^7.24.7",
-        "@babel/generator": "^7.25.4",
-        "@babel/parser": "^7.25.4",
+        "@babel/generator": "^7.25.6",
+        "@babel/parser": "^7.25.6",
         "@babel/template": "^7.25.0",
-        "@babel/types": "^7.25.4",
+        "@babel/types": "^7.25.6",
         "debug": "^4.3.1",
         "globals": "^11.1.0"
       },
@@ -711,9 +711,9 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.25.4",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.4.tgz",
-      "integrity": "sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==",
+      "version": "7.25.6",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz",
+      "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==",
       "license": "MIT",
       "dependencies": {
         "@babel/helper-string-parser": "^7.24.8",
@@ -1528,46 +1528,6 @@
         "url": "https://github.com/sponsors/kazupon"
       }
     },
-    "node_modules/@intlify/unplugin-vue-i18n": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-3.0.1.tgz",
-      "integrity": "sha512-q1zJhA/WpoLBzAAuKA5/AEp0e+bMOM10ll/HxT4g1VAw/9JhC4TTobP9KobKH90JMZ4U2daLFlYQfKNd29lpqw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@intlify/bundle-utils": "^7.4.0",
-        "@intlify/shared": "^9.4.0",
-        "@rollup/pluginutils": "^5.1.0",
-        "@vue/compiler-sfc": "^3.2.47",
-        "debug": "^4.3.3",
-        "fast-glob": "^3.2.12",
-        "js-yaml": "^4.1.0",
-        "json5": "^2.2.3",
-        "pathe": "^1.0.0",
-        "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.2",
-        "unplugin": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 14.16"
-      },
-      "peerDependencies": {
-        "petite-vue-i18n": "*",
-        "vue-i18n": "*",
-        "vue-i18n-bridge": "*"
-      },
-      "peerDependenciesMeta": {
-        "petite-vue-i18n": {
-          "optional": true
-        },
-        "vue-i18n": {
-          "optional": true
-        },
-        "vue-i18n-bridge": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/@intlify/utils": {
       "version": "0.12.0",
       "resolved": "https://registry.npmjs.org/@intlify/utils/-/utils-0.12.0.tgz",
@@ -2747,6 +2707,46 @@
         "node": "^14.16.0 || >=16.11.0"
       }
     },
+    "node_modules/@nuxtjs/i18n/node_modules/@intlify/unplugin-vue-i18n": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-3.0.1.tgz",
+      "integrity": "sha512-q1zJhA/WpoLBzAAuKA5/AEp0e+bMOM10ll/HxT4g1VAw/9JhC4TTobP9KobKH90JMZ4U2daLFlYQfKNd29lpqw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/bundle-utils": "^7.4.0",
+        "@intlify/shared": "^9.4.0",
+        "@rollup/pluginutils": "^5.1.0",
+        "@vue/compiler-sfc": "^3.2.47",
+        "debug": "^4.3.3",
+        "fast-glob": "^3.2.12",
+        "js-yaml": "^4.1.0",
+        "json5": "^2.2.3",
+        "pathe": "^1.0.0",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2",
+        "unplugin": "^1.1.0"
+      },
+      "engines": {
+        "node": ">= 14.16"
+      },
+      "peerDependencies": {
+        "petite-vue-i18n": "*",
+        "vue-i18n": "*",
+        "vue-i18n-bridge": "*"
+      },
+      "peerDependenciesMeta": {
+        "petite-vue-i18n": {
+          "optional": true
+        },
+        "vue-i18n": {
+          "optional": true
+        },
+        "vue-i18n-bridge": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@nuxtjs/tailwindcss": {
       "version": "6.12.1",
       "resolved": "https://registry.npmjs.org/@nuxtjs/tailwindcss/-/tailwindcss-6.12.1.tgz",
@@ -3899,9 +3899,9 @@
       "license": "MIT"
     },
     "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.1.tgz",
-      "integrity": "sha512-2thheikVEuU7ZxFXubPDOtspKn1x0yqaYQwvALVtEcvFhMifPADBrgRPyHV0TF3b+9BgvgjgagVyvA/UqPZHmg==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz",
+      "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==",
       "cpu": [
         "arm"
       ],
@@ -3913,9 +3913,9 @@
       ]
     },
     "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.1.tgz",
-      "integrity": "sha512-t1lLYn4V9WgnIFHXy1d2Di/7gyzBWS8G5pQSXdZqfrdCGTwi1VasRMSS81DTYb+avDs/Zz4A6dzERki5oRYz1g==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz",
+      "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==",
       "cpu": [
         "arm64"
       ],
@@ -3927,9 +3927,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.1.tgz",
-      "integrity": "sha512-AH/wNWSEEHvs6t4iJ3RANxW5ZCK3fUnmf0gyMxWCesY1AlUj8jY7GC+rQE4wd3gwmZ9XDOpL0kcFnCjtN7FXlA==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz",
+      "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==",
       "cpu": [
         "arm64"
       ],
@@ -3941,9 +3941,9 @@
       ]
     },
     "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.1.tgz",
-      "integrity": "sha512-dO0BIz/+5ZdkLZrVgQrDdW7m2RkrLwYTh2YMFG9IpBtlC1x1NPNSXkfczhZieOlOLEqgXOFH3wYHB7PmBtf+Bg==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz",
+      "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==",
       "cpu": [
         "x64"
       ],
@@ -3955,9 +3955,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.1.tgz",
-      "integrity": "sha512-sWWgdQ1fq+XKrlda8PsMCfut8caFwZBmhYeoehJ05FdI0YZXk6ZyUjWLrIgbR/VgiGycrFKMMgp7eJ69HOF2pQ==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz",
+      "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==",
       "cpu": [
         "arm"
       ],
@@ -3969,9 +3969,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.1.tgz",
-      "integrity": "sha512-9OIiSuj5EsYQlmwhmFRA0LRO0dRRjdCVZA3hnmZe1rEwRk11Jy3ECGGq3a7RrVEZ0/pCsYWx8jG3IvcrJ6RCew==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz",
+      "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==",
       "cpu": [
         "arm"
       ],
@@ -3983,9 +3983,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.1.tgz",
-      "integrity": "sha512-0kuAkRK4MeIUbzQYu63NrJmfoUVicajoRAL1bpwdYIYRcs57iyIV9NLcuyDyDXE2GiZCL4uhKSYAnyWpjZkWow==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz",
+      "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==",
       "cpu": [
         "arm64"
       ],
@@ -3997,9 +3997,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.1.tgz",
-      "integrity": "sha512-/6dYC9fZtfEY0vozpc5bx1RP4VrtEOhNQGb0HwvYNwXD1BBbwQ5cKIbUVVU7G2d5WRE90NfB922elN8ASXAJEA==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz",
+      "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==",
       "cpu": [
         "arm64"
       ],
@@ -4011,9 +4011,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.1.tgz",
-      "integrity": "sha512-ltUWy+sHeAh3YZ91NUsV4Xg3uBXAlscQe8ZOXRCVAKLsivGuJsrkawYPUEyCV3DYa9urgJugMLn8Z3Z/6CeyRQ==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz",
+      "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==",
       "cpu": [
         "ppc64"
       ],
@@ -4025,9 +4025,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.1.tgz",
-      "integrity": "sha512-BggMndzI7Tlv4/abrgLwa/dxNEMn2gC61DCLrTzw8LkpSKel4o+O+gtjbnkevZ18SKkeN3ihRGPuBxjaetWzWg==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz",
+      "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==",
       "cpu": [
         "riscv64"
       ],
@@ -4039,9 +4039,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.1.tgz",
-      "integrity": "sha512-z/9rtlGd/OMv+gb1mNSjElasMf9yXusAxnRDrBaYB+eS1shFm6/4/xDH1SAISO5729fFKUkJ88TkGPRUh8WSAA==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz",
+      "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==",
       "cpu": [
         "s390x"
       ],
@@ -4053,9 +4053,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.1.tgz",
-      "integrity": "sha512-kXQVcWqDcDKw0S2E0TmhlTLlUgAmMVqPrJZR+KpH/1ZaZhLSl23GZpQVmawBQGVhyP5WXIsIQ/zqbDBBYmxm5w==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz",
+      "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==",
       "cpu": [
         "x64"
       ],
@@ -4067,9 +4067,9 @@
       ]
     },
     "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.1.tgz",
-      "integrity": "sha512-CbFv/WMQsSdl+bpX6rVbzR4kAjSSBuDgCqb1l4J68UYsQNalz5wOqLGYj4ZI0thGpyX5kc+LLZ9CL+kpqDovZA==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz",
+      "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==",
       "cpu": [
         "x64"
       ],
@@ -4081,9 +4081,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.1.tgz",
-      "integrity": "sha512-3Q3brDgA86gHXWHklrwdREKIrIbxC0ZgU8lwpj0eEKGBQH+31uPqr0P2v11pn0tSIxHvcdOWxa4j+YvLNx1i6g==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz",
+      "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==",
       "cpu": [
         "arm64"
       ],
@@ -4095,9 +4095,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.1.tgz",
-      "integrity": "sha512-tNg+jJcKR3Uwe4L0/wY3Ro0H+u3nrb04+tcq1GSYzBEmKLeOQF2emk1whxlzNqb6MMrQ2JOcQEpuuiPLyRcSIw==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz",
+      "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==",
       "cpu": [
         "ia32"
       ],
@@ -4109,9 +4109,9 @@
       ]
     },
     "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.1.tgz",
-      "integrity": "sha512-xGiIH95H1zU7naUyTKEyOA/I0aexNMUdO9qRv0bLKN3qu25bBdrxZHqA3PTJ24YNN/GdMzG4xkDcd/GvjuhfLg==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz",
+      "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==",
       "cpu": [
         "x64"
       ],
@@ -4362,9 +4362,9 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.5.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.1.tgz",
-      "integrity": "sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw==",
+      "version": "22.5.2",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.2.tgz",
+      "integrity": "sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==",
       "license": "MIT",
       "dependencies": {
         "undici-types": "~6.19.2"
@@ -4460,80 +4460,17 @@
         }
       }
     },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.4.0.tgz",
-      "integrity": "sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.4.0",
-        "@typescript-eslint/visitor-keys": "8.4.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.4.0.tgz",
-      "integrity": "sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz",
-      "integrity": "sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.4.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
     "node_modules/@typescript-eslint/parser": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.3.0.tgz",
-      "integrity": "sha512-h53RhVyLu6AtpUzVCYLPhZGL5jzTD9fZL+SYf/+hYOx2bDkyQXztXSc4tbvKYHzfMXExMLiL9CWqJmVz6+78IQ==",
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.4.0.tgz",
+      "integrity": "sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "@typescript-eslint/scope-manager": "8.3.0",
-        "@typescript-eslint/types": "8.3.0",
-        "@typescript-eslint/typescript-estree": "8.3.0",
-        "@typescript-eslint/visitor-keys": "8.3.0",
+        "@typescript-eslint/scope-manager": "8.4.0",
+        "@typescript-eslint/types": "8.4.0",
+        "@typescript-eslint/typescript-estree": "8.4.0",
+        "@typescript-eslint/visitor-keys": "8.4.0",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -4553,14 +4490,14 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.3.0.tgz",
-      "integrity": "sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg==",
+      "version": "8.4.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.4.0.tgz",
+      "integrity": "sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.3.0",
-        "@typescript-eslint/visitor-keys": "8.3.0"
+        "@typescript-eslint/types": "8.4.0",
+        "@typescript-eslint/visitor-keys": "8.4.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4595,7 +4532,7 @@
         }
       }
     },
-    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
+    "node_modules/@typescript-eslint/types": {
       "version": "8.4.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.4.0.tgz",
       "integrity": "sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==",
@@ -4609,7 +4546,7 @@
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
+    "node_modules/@typescript-eslint/typescript-estree": {
       "version": "8.4.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.4.0.tgz",
       "integrity": "sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==",
@@ -4638,106 +4575,6 @@
         }
       }
     },
-    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz",
-      "integrity": "sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.4.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/@typescript-eslint/types": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.3.0.tgz",
-      "integrity": "sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.3.0.tgz",
-      "integrity": "sha512-Mq7FTHl0R36EmWlCJWojIC1qn/ZWo2YiWYc1XVtasJ7FIgjo0MVv9rZWXEE7IK2CGrtwe1dVOxWwqXUdNgfRCA==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "@typescript-eslint/types": "8.3.0",
-        "@typescript-eslint/visitor-keys": "8.3.0",
-        "debug": "^4.3.4",
-        "fast-glob": "^3.3.2",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^1.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@@ -4787,68 +4624,7 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.4.0.tgz",
-      "integrity": "sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.4.0",
-        "@typescript-eslint/visitor-keys": "8.4.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.4.0.tgz",
-      "integrity": "sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.4.0.tgz",
-      "integrity": "sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "@typescript-eslint/types": "8.4.0",
-        "@typescript-eslint/visitor-keys": "8.4.0",
-        "debug": "^4.3.4",
-        "fast-glob": "^3.3.2",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^1.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
+    "node_modules/@typescript-eslint/visitor-keys": {
       "version": "8.4.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz",
       "integrity": "sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==",
@@ -4866,63 +4642,6 @@
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/utils/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.3.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz",
-      "integrity": "sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.3.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
     "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
       "version": "3.4.3",
       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
@@ -4944,23 +4663,23 @@
       "license": "ISC"
     },
     "node_modules/@unhead/dom": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.10.0.tgz",
-      "integrity": "sha512-LdgtOlyMHOyuQNsUKM+1d8ViiiY4LxjCPJlgUU/5CwgqeRYf4LWFu8oRMQfSQVTusbPwwvr3MolM9iTUu2I4BQ==",
+      "version": "1.10.4",
+      "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.10.4.tgz",
+      "integrity": "sha512-ehMy9k6efo4GTLmiP27wCtywWYdiggrP3m7h6kD/d1uhfORH3yCgsd4yXQnmDoSbsMyX6GlY5DBzy5bnYPp/Xw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@unhead/schema": "1.10.0",
-        "@unhead/shared": "1.10.0"
+        "@unhead/schema": "1.10.4",
+        "@unhead/shared": "1.10.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
       }
     },
     "node_modules/@unhead/schema": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.10.0.tgz",
-      "integrity": "sha512-hmgkFdLzm/VPLAXBF89Iry4Wz/6FpHMfMKCnAdihAt1Ublsi04RrA0hQuAiuGG2CZiKL4VCxtmV++UXj/kyakA==",
+      "version": "1.10.4",
+      "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.10.4.tgz",
+      "integrity": "sha512-nX9sJgKPy2t4GHB9ky/vkMLbYqXl9Num5NZToTr0rKrIGkshzHhUrbn/EiHreIjcGI1eIpu+edniCDIwGTJgmw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4972,43 +4691,43 @@
       }
     },
     "node_modules/@unhead/shared": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.10.0.tgz",
-      "integrity": "sha512-Lv7pP0AoWJy+YaiWd4kGD+TK78ahPUwnIRx6YCC6FjPmE0KCqooeDS4HbInYaklLlEMQZislXyIwLczK2DTWiw==",
+      "version": "1.10.4",
+      "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.10.4.tgz",
+      "integrity": "sha512-C5wsps9i/XCBObMVQUrbXPvZG17a/e5yL0IsxpICaT4QSiZAj9v7JrNQ5WpM5JOZVMKRI5MYRdafNDw3iSmqZg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@unhead/schema": "1.10.0"
+        "@unhead/schema": "1.10.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
       }
     },
     "node_modules/@unhead/ssr": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.10.0.tgz",
-      "integrity": "sha512-L2XqGUQ05+a/zBAJk4mseLpsDoHMsuEsZNWp5f7E/Kx8P1oBAAs6J/963nvVFdec41HuClNHtJZ5swz77dmb1Q==",
+      "version": "1.10.4",
+      "resolved": "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.10.4.tgz",
+      "integrity": "sha512-2nDG08q9bTvMB24YGNJCXimAs1vuG9yVa01i/Et1B2y4P8qhweXOxnialGmt5j8xeXwPFUBCe36tC5kLCSuJoQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@unhead/schema": "1.10.0",
-        "@unhead/shared": "1.10.0"
+        "@unhead/schema": "1.10.4",
+        "@unhead/shared": "1.10.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
       }
     },
     "node_modules/@unhead/vue": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.10.0.tgz",
-      "integrity": "sha512-Cv9BViaOwCBdXy3bsTvJ10Rs808FSSq/ZfeBXzOjOxt08sbubf6Mr5opBdOlv/i1bzyFVIAqe5ABmrhC9mB80w==",
+      "version": "1.10.4",
+      "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.10.4.tgz",
+      "integrity": "sha512-Q45F/KOvDeitc8GkfkPY45V8Dmw1m1b9A/aHM5A2BwRV8GyoRV+HRWVw5h02e0AO1TsICvcW8tI90qeCM2oGSA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@unhead/schema": "1.10.0",
-        "@unhead/shared": "1.10.0",
+        "@unhead/schema": "1.10.4",
+        "@unhead/shared": "1.10.4",
         "hookable": "^5.5.3",
-        "unhead": "1.10.0"
+        "unhead": "1.10.4"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
@@ -5098,9 +4817,9 @@
       }
     },
     "node_modules/@vitejs/plugin-vue": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.2.tgz",
-      "integrity": "sha512-nY9IwH12qeiJqumTCLJLE7IiNx7HZ39cbHaysEUd+Myvbz9KAqd2yq+U01Kab1R/H1BmiyM2ShTYlNH32Fzo3A==",
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.3.tgz",
+      "integrity": "sha512-3xbWsKEKXYlmX82aOHufFQVnkbMC/v8fLpWwh6hWOUrK5fbbtBh9Q/WWse27BFgSy2/e2c0fz5Scgya9h2GLhw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -5483,9 +5202,9 @@
       }
     },
     "node_modules/@vue/devtools-shared": {
-      "version": "7.3.9",
-      "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.3.9.tgz",
-      "integrity": "sha512-CdfMRZKXyI8vw+hqOcQIiLihB6Hbbi7WNZGp7LsuH1Qe4aYAFmTaKjSciRZ301oTnwmU/knC/s5OGuV6UNiNoA==",
+      "version": "7.4.0",
+      "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.4.0.tgz",
+      "integrity": "sha512-LpHkjzUlbPHSH6qaCVSyfQDaF8fZwFbEDbHrtAGA9K1/yEZn99zYvXXqE4e5IQCk8GBXiVJo9/bn7vBXJQIIGA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6019,9 +5738,9 @@
       "optional": true
     },
     "node_modules/bare-fs": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz",
-      "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==",
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.3.tgz",
+      "integrity": "sha512-7RYKL+vZVCyAsMLi5SPu7QGauGGT8avnP/HO571ndEuV4MYdGXvLhtW67FuLPeEI8EiIY7zbbRR9x7x7HU0kgw==",
       "license": "Apache-2.0",
       "optional": true,
       "dependencies": {
@@ -6031,9 +5750,9 @@
       }
     },
     "node_modules/bare-os": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz",
-      "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==",
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.2.tgz",
+      "integrity": "sha512-HZoJwzC+rZ9lqEemTMiO0luOePoGYNBgsLLgegKR/cljiJvcDNhDZQkzC+NC5Oh0aHbdBNSOHpghwMuB5tqhjg==",
       "license": "Apache-2.0",
       "optional": true
     },
@@ -6048,12 +5767,13 @@
       }
     },
     "node_modules/bare-stream": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.2.0.tgz",
-      "integrity": "sha512-+o9MG5bPRRBlkVSpfFlMag3n7wMaIZb4YZasU2+/96f+3HTQ4F9DKQeu3K/Sjz1W0umu6xvVq1ON0ipWdMlr3A==",
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.2.1.tgz",
+      "integrity": "sha512-YTB47kHwBW9zSG8LD77MIBAAQXjU2WjAkMHeeb7hUplVs6+IoM5I7uEVQNPMB7lj9r8I76UMdoMkGnCodHOLqg==",
       "license": "Apache-2.0",
       "optional": true,
       "dependencies": {
+        "b4a": "^1.6.6",
         "streamx": "^2.18.0"
       }
     },
@@ -6271,9 +5991,9 @@
       }
     },
     "node_modules/c12": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/c12/-/c12-1.11.1.tgz",
-      "integrity": "sha512-KDU0TvSvVdaYcQKQ6iPHATGz/7p/KiVjPg4vQrB6Jg/wX9R0yl5RZxWm9IoZqaIHD2+6PZd81+KMGwRr/lRIUg==",
+      "version": "1.11.2",
+      "resolved": "https://registry.npmjs.org/c12/-/c12-1.11.2.tgz",
+      "integrity": "sha512-oBs8a4uvSDO9dm8b7OCFW7+dgtVrwmwnrVXYzLm43ta7ep2jCn/0MhoUFygIWtxhyy6+/MG7/agvpY0U1Iemew==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6287,7 +6007,7 @@
         "ohash": "^1.1.3",
         "pathe": "^1.1.2",
         "perfect-debounce": "^1.0.0",
-        "pkg-types": "^1.1.1",
+        "pkg-types": "^1.2.0",
         "rc9": "^2.1.2"
       },
       "peerDependencies": {
@@ -6370,9 +6090,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001653",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz",
-      "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==",
+      "version": "1.0.30001655",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz",
+      "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==",
       "dev": true,
       "funding": [
         {
@@ -7843,9 +7563,9 @@
       }
     },
     "node_modules/escalade": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
-      "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+      "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
       "license": "MIT",
       "engines": {
         "node": ">=6"
@@ -9224,9 +8944,9 @@
       }
     },
     "node_modules/get-tsconfig": {
-      "version": "4.7.6",
-      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz",
-      "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==",
+      "version": "4.8.0",
+      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.0.tgz",
+      "integrity": "sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -10768,9 +10488,9 @@
       "license": "MIT"
     },
     "node_modules/launch-editor": {
-      "version": "2.8.1",
-      "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz",
-      "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==",
+      "version": "2.8.2",
+      "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.2.tgz",
+      "integrity": "sha512-eF5slEUZXmi6WvFzI3dYcv+hA24/iKnROf24HztcURJpSz9RBmBgz5cNCVOeguouf1llrwy6Yctl4C4HM+xI8g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -13283,9 +13003,9 @@
       }
     },
     "node_modules/picocolors": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
-      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz",
+      "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==",
       "license": "ISC"
     },
     "node_modules/picomatch": {
@@ -13379,9 +13099,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.41",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
-      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+      "version": "8.4.44",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.44.tgz",
+      "integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==",
       "funding": [
         {
           "type": "opencollective",
@@ -15014,9 +14734,9 @@
       }
     },
     "node_modules/rollup": {
-      "version": "4.21.1",
-      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.1.tgz",
-      "integrity": "sha512-ZnYyKvscThhgd3M5+Qt3pmhO4jIRR5RGzaSovB6Q7rGNrK5cUncrtLmcTTJVSdcKXyZjW8X8MB0JMSuH9bcAJg==",
+      "version": "4.21.2",
+      "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz",
+      "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -15030,22 +14750,22 @@
         "npm": ">=8.0.0"
       },
       "optionalDependencies": {
-        "@rollup/rollup-android-arm-eabi": "4.21.1",
-        "@rollup/rollup-android-arm64": "4.21.1",
-        "@rollup/rollup-darwin-arm64": "4.21.1",
-        "@rollup/rollup-darwin-x64": "4.21.1",
-        "@rollup/rollup-linux-arm-gnueabihf": "4.21.1",
-        "@rollup/rollup-linux-arm-musleabihf": "4.21.1",
-        "@rollup/rollup-linux-arm64-gnu": "4.21.1",
-        "@rollup/rollup-linux-arm64-musl": "4.21.1",
-        "@rollup/rollup-linux-powerpc64le-gnu": "4.21.1",
-        "@rollup/rollup-linux-riscv64-gnu": "4.21.1",
-        "@rollup/rollup-linux-s390x-gnu": "4.21.1",
-        "@rollup/rollup-linux-x64-gnu": "4.21.1",
-        "@rollup/rollup-linux-x64-musl": "4.21.1",
-        "@rollup/rollup-win32-arm64-msvc": "4.21.1",
-        "@rollup/rollup-win32-ia32-msvc": "4.21.1",
-        "@rollup/rollup-win32-x64-msvc": "4.21.1",
+        "@rollup/rollup-android-arm-eabi": "4.21.2",
+        "@rollup/rollup-android-arm64": "4.21.2",
+        "@rollup/rollup-darwin-arm64": "4.21.2",
+        "@rollup/rollup-darwin-x64": "4.21.2",
+        "@rollup/rollup-linux-arm-gnueabihf": "4.21.2",
+        "@rollup/rollup-linux-arm-musleabihf": "4.21.2",
+        "@rollup/rollup-linux-arm64-gnu": "4.21.2",
+        "@rollup/rollup-linux-arm64-musl": "4.21.2",
+        "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2",
+        "@rollup/rollup-linux-riscv64-gnu": "4.21.2",
+        "@rollup/rollup-linux-s390x-gnu": "4.21.2",
+        "@rollup/rollup-linux-x64-gnu": "4.21.2",
+        "@rollup/rollup-linux-x64-musl": "4.21.2",
+        "@rollup/rollup-win32-arm64-msvc": "4.21.2",
+        "@rollup/rollup-win32-ia32-msvc": "4.21.2",
+        "@rollup/rollup-win32-x64-msvc": "4.21.2",
         "fsevents": "~2.3.2"
       }
     },
@@ -15459,9 +15179,9 @@
       "license": "ISC"
     },
     "node_modules/simple-git": {
-      "version": "3.25.0",
-      "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.25.0.tgz",
-      "integrity": "sha512-KIY5sBnzc4yEcJXW7Tdv4viEz8KyG+nU0hay+DWZasvdFOYKeUZ6Xc25LUHHjw0tinPT7O1eY6pzX7pRT1K8rw==",
+      "version": "3.26.0",
+      "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.26.0.tgz",
+      "integrity": "sha512-5tbkCSzuskR6uA7uA23yjasmA0RzugVo8QM2bpsnxkrgP13eisFT7TMS4a+xKEJvbmr4qf+l0WT3eKa9IxxUyw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -15705,9 +15425,9 @@
       "license": "MIT"
     },
     "node_modules/streamx": {
-      "version": "2.19.0",
-      "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.19.0.tgz",
-      "integrity": "sha512-5z6CNR4gtkPbwlxyEqoDGDmWIzoNJqCBt4Eac1ICP9YaIT08ct712cFj0u1rx4F8luAuL+3Qc+RFIdI4OX00kg==",
+      "version": "2.20.0",
+      "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.0.tgz",
+      "integrity": "sha512-ZGd1LhDeGFucr1CUCTBOS58ZhEendd0ttpGT3usTvosS4ntIwKN9LJFp+OeCSprsCPL14BXVRZlHGRY1V9PVzQ==",
       "license": "MIT",
       "dependencies": {
         "fast-fifo": "^1.3.2",
@@ -16870,15 +16590,15 @@
       }
     },
     "node_modules/unhead": {
-      "version": "1.10.0",
-      "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.10.0.tgz",
-      "integrity": "sha512-nv75Hvhu0asuD/rbP6b3tSRJUltxmThq/iZU5rLCGEkCqTkFk7ruQGNk+TRtx/RCYqL0R/IzIY9aqvhNOGe3mg==",
+      "version": "1.10.4",
+      "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.10.4.tgz",
+      "integrity": "sha512-qKiYhgZ4IuDbylP409cdwK/8WEIi5cOSIBei/OXzxFs4uxiTZHSSa8NC1qPu2kooxHqxyoXGBw8ARms9zOsbxw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@unhead/dom": "1.10.0",
-        "@unhead/schema": "1.10.0",
-        "@unhead/shared": "1.10.0",
+        "@unhead/dom": "1.10.4",
+        "@unhead/schema": "1.10.4",
+        "@unhead/shared": "1.10.4",
         "hookable": "^5.5.3"
       },
       "funding": {
@@ -16943,14 +16663,13 @@
       }
     },
     "node_modules/unplugin": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.2.tgz",
-      "integrity": "sha512-bEqQxeC7rxtxPZ3M5V4Djcc4lQqKPgGe3mAWZvxcSmX5jhGxll19NliaRzQSQPrk4xJZSGniK3puLWpRuZN7VQ==",
+      "version": "1.12.3",
+      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.3.tgz",
+      "integrity": "sha512-my8DH0/T/Kx33KO+6QXAqdeMYgyy0GktlOpdQjpagfHKw5DrD0ctPr7SHUyOT3g4ZVpzCQGt/qcpuoKJ/pniHA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "acorn": "^8.12.1",
-        "chokidar": "^3.6.0",
         "webpack-sources": "^3.2.3",
         "webpack-virtual-modules": "^0.6.2"
       },
@@ -17231,14 +16950,14 @@
       }
     },
     "node_modules/vite": {
-      "version": "5.4.2",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz",
-      "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==",
+      "version": "5.4.3",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.3.tgz",
+      "integrity": "sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "esbuild": "^0.21.3",
-        "postcss": "^8.4.41",
+        "postcss": "^8.4.43",
         "rollup": "^4.20.0"
       },
       "bin": {
@@ -17475,9 +17194,9 @@
       }
     },
     "node_modules/vite-plugin-vue-inspector": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.1.3.tgz",
-      "integrity": "sha512-pMrseXIDP1Gb38mOevY+BvtNGNqiqmqa2pKB99lnLsADQww9w9xMbAfT4GB6RUoaOkSPrtlXqpq2Fq+Dj2AgFg==",
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.2.0.tgz",
+      "integrity": "sha512-wWxyb9XAtaIvV/Lr7cqB1HIzmHZFVUJsTNm3yAxkS87dgh/Ky4qr2wDEWNxF23fdhVa3jQ8MZREpr4XyiuaRqA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -17735,9 +17454,9 @@
       }
     },
     "node_modules/vue-component-type-helpers": {
-      "version": "2.0.29",
-      "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.29.tgz",
-      "integrity": "sha512-58i+ZhUAUpwQ+9h5Hck0D+jr1qbYl4voRt5KffBx8qzELViQ4XdT/Tuo+mzq8u63teAG8K0lLaOiL5ofqW38rg==",
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.1.4.tgz",
+      "integrity": "sha512-aVqB3KxwpM76cYRkpnezl1J62E/1omzHQfx1yuz7zcbxmzmP/PeSgI20NEmkdeGnjZPVzm0V9fB4ZyRu5BBj4A==",
       "dev": true,
       "license": "MIT"
     },
diff --git a/translation/package-lock.json b/translation/package-lock.json
index 6d2882f026..aed11faf5b 100644
--- a/translation/package-lock.json
+++ b/translation/package-lock.json
@@ -10,9 +10,9 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.5.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.1.tgz",
-      "integrity": "sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw==",
+      "version": "22.5.2",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.2.tgz",
+      "integrity": "sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==",
       "license": "MIT",
       "dependencies": {
         "undici-types": "~6.19.2"
@@ -25,9 +25,9 @@
       "license": "MIT"
     },
     "node_modules/axios": {
-      "version": "1.7.5",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz",
-      "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==",
+      "version": "1.7.7",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz",
+      "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==",
       "license": "MIT",
       "dependencies": {
         "follow-redirects": "^1.15.6",

From 8c77fa7edb2dc6642116bd6ff28201dede0c5745 Mon Sep 17 00:00:00 2001
From: BacLuc <lucius.bachmann@gmx.ch>
Date: Wed, 28 Aug 2024 22:13:26 +0200
Subject: [PATCH 231/273] frontend: remove references jest

From time to time we get the error "jest is not defined".
We are anyway using vitest, and vitest also
injected a "jest" object, which implemented its functions
with vitest.

Also set globals to false, that we see what we import
and from where.
---
 .../__tests__/matchingTranslationKeys.spec.js  |  1 -
 .../__tests__/packageDirectory.spec.js         |  1 +
 .../__tests__/activityResponsibles.spec.js     |  1 +
 .../campCollaborationDisplayName.spec.js       |  1 +
 .../campCollaborationInitials.spec.js          |  1 +
 .../campCollaborationLegalName.spec.js         |  1 +
 .../helpers/__tests__/campShortTitle.spec.js   |  1 +
 common/helpers/__tests__/colors.spec.js        |  1 +
 .../__tests__/dateHelperUTCFormatted.spec.js   |  1 +
 .../helpers/__tests__/dayResponsibles.spec.js  |  1 +
 common/helpers/__tests__/initials.spec.js      |  1 +
 common/helpers/__tests__/interpolation.spec.js |  1 +
 .../__tests__/materialListsSorted.spec.js      |  1 +
 common/helpers/__tests__/picasso.spec.js       |  1 +
 .../helpers/__tests__/userDisplayName.spec.js  |  1 +
 common/helpers/__tests__/userInitials.spec.js  |  1 +
 common/helpers/__tests__/userLegalName.spec.js |  1 +
 .../dayjs/__tests__/formatDatePeriod.spec.js   |  1 +
 .../helpers/dayjs/__tests__/parseTime.spec.js  |  1 +
 frontend/eslint.config.mjs                     |  1 -
 .../__tests__/calculateNextSlotName.spec.js    |  1 +
 .../form/api/__tests__/ApiCheckbox.spec.js     |  3 ++-
 .../form/api/__tests__/ApiColorField.spec.js   |  3 ++-
 .../form/api/__tests__/ApiColorPicker.spec.js  |  3 ++-
 .../form/api/__tests__/ApiDatePicker.spec.js   |  3 ++-
 .../form/api/__tests__/ApiNumberField.spec.js  |  3 ++-
 .../form/api/__tests__/ApiSelect.spec.js       |  3 ++-
 .../form/api/__tests__/ApiSwitch.spec.js       |  3 ++-
 .../form/api/__tests__/ApiTextField.spec.js    |  3 ++-
 .../form/api/__tests__/ApiTextarea.spec.js     |  3 ++-
 .../form/api/__tests__/ApiTimePicker.spec.js   |  3 ++-
 .../form/api/__tests__/ApiWrapper.spec.js      |  2 +-
 .../form/base/__tests__/ECheckbox.spec.js      |  3 ++-
 .../form/base/__tests__/EColorField.spec.js    |  1 +
 .../form/base/__tests__/EColorPicker.spec.js   |  1 +
 .../form/base/__tests__/EDatePicker.spec.js    |  1 +
 .../form/base/__tests__/ENumberField.spec.js   |  1 +
 .../form/base/__tests__/EParseField.spec.js    |  1 +
 .../form/base/__tests__/ESelect.spec.js        |  1 +
 .../form/base/__tests__/ESwitch.spec.js        |  5 +++--
 .../form/base/__tests__/ETextArea.spec.js      |  1 +
 .../form/base/__tests__/ETextField.spec.js     |  1 +
 .../form/base/__tests__/ETimePicker.spec.js    |  1 +
 .../shortScheduleEntryDescription.spec.js      |  1 +
 .../print/__tests__/repairPrintConfig.spec.js  |  1 +
 .../helpers/__tests__/querySyncHelper.spec.js  |  1 +
 .../src/helpers/__tests__/serverError.spec.js  |  5 +++--
 .../__tests__/vCalendarDragAndDrop.spec.js     |  1 +
 frontend/src/plugins/__tests__/auth.spec.js    | 18 +++++++++---------
 .../src/plugins/__tests__/preferences.spec.js  |  1 +
 .../__tests__/apiFallbackLocalesFor.spec.js    |  1 +
 .../veeValidate/__tests__/greaterThan.spec.js  |  1 +
 .../__tests__/greaterThanOrEqual_date.spec.js  |  1 +
 .../__tests__/greaterThan_time.spec.js         |  1 +
 .../__tests__/lessThanOrEqual_date.spec.js     |  1 +
 .../__tests__/oneEmojiOrTwoCharacters.spec.js  |  1 +
 frontend/src/test/mockEventClass.js            |  1 +
 .../src/views/admin/__tests__/Admin.spec.js    |  1 +
 .../tests/infrastructure/package-lock.spec.js  |  1 +
 frontend/vite.config.js                        |  1 -
 60 files changed, 80 insertions(+), 28 deletions(-)

diff --git a/common/eslint-local-rules/__tests__/matchingTranslationKeys.spec.js b/common/eslint-local-rules/__tests__/matchingTranslationKeys.spec.js
index 65bea804c4..ad1029aa77 100644
--- a/common/eslint-local-rules/__tests__/matchingTranslationKeys.spec.js
+++ b/common/eslint-local-rules/__tests__/matchingTranslationKeys.spec.js
@@ -13,7 +13,6 @@ const ruleTester = new RuleTester({
   root: true,
   env: {
     node: true,
-    jest: true,
   },
   extends: [
     'plugin:vue/recommended',
diff --git a/common/eslint-local-rules/__tests__/packageDirectory.spec.js b/common/eslint-local-rules/__tests__/packageDirectory.spec.js
index ef8efbcbdd..0a3643c70e 100644
--- a/common/eslint-local-rules/__tests__/packageDirectory.spec.js
+++ b/common/eslint-local-rules/__tests__/packageDirectory.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from 'vitest'
 import factory from '../packageDirectory.js'
 import path from 'path'
 import fs from 'fs'
diff --git a/common/helpers/__tests__/activityResponsibles.spec.js b/common/helpers/__tests__/activityResponsibles.spec.js
index e834618d56..0010dde01f 100644
--- a/common/helpers/__tests__/activityResponsibles.spec.js
+++ b/common/helpers/__tests__/activityResponsibles.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from "vitest";
 import { activityResponsiblesCommaSeparated } from '../activityResponsibles.js'
 
 describe('activityResponsibles', () => {
diff --git a/common/helpers/__tests__/campCollaborationDisplayName.spec.js b/common/helpers/__tests__/campCollaborationDisplayName.spec.js
index 36360e08d0..fc762ff8ea 100644
--- a/common/helpers/__tests__/campCollaborationDisplayName.spec.js
+++ b/common/helpers/__tests__/campCollaborationDisplayName.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from "vitest";
 import campCollaborationDisplayName from '../campCollaborationDisplayName.js'
 
 describe('campCollaborationDisplayName', () => {
diff --git a/common/helpers/__tests__/campCollaborationInitials.spec.js b/common/helpers/__tests__/campCollaborationInitials.spec.js
index 5693d6c486..66cecb956e 100644
--- a/common/helpers/__tests__/campCollaborationInitials.spec.js
+++ b/common/helpers/__tests__/campCollaborationInitials.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from "vitest";
 import campCollaborationInitials from '../campCollaborationInitials.js'
 
 describe('campCollaborationInitials', () => {
diff --git a/common/helpers/__tests__/campCollaborationLegalName.spec.js b/common/helpers/__tests__/campCollaborationLegalName.spec.js
index 1d215bde1b..93cd7dda77 100644
--- a/common/helpers/__tests__/campCollaborationLegalName.spec.js
+++ b/common/helpers/__tests__/campCollaborationLegalName.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from "vitest";
 import campCollaborationLegalName from '../campCollaborationLegalName.js'
 
 describe('campCollaborationLegalName', () => {
diff --git a/common/helpers/__tests__/campShortTitle.spec.js b/common/helpers/__tests__/campShortTitle.spec.js
index 5fb78dbf65..f992d457eb 100644
--- a/common/helpers/__tests__/campShortTitle.spec.js
+++ b/common/helpers/__tests__/campShortTitle.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from 'vitest'
 import { campShortTitle } from '../campShortTitle.js'
 
 describe('campShortTitle', () => {
diff --git a/common/helpers/__tests__/colors.spec.js b/common/helpers/__tests__/colors.spec.js
index 0af33c5db4..9eadb357f0 100644
--- a/common/helpers/__tests__/colors.spec.js
+++ b/common/helpers/__tests__/colors.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from "vitest";
 import { campCollaborationColor, idToColor, userColor } from '../colors.js'
 
 describe('idToColor', () => {
diff --git a/common/helpers/__tests__/dateHelperUTCFormatted.spec.js b/common/helpers/__tests__/dateHelperUTCFormatted.spec.js
index 3d02bf3e32..6508c7c908 100644
--- a/common/helpers/__tests__/dateHelperUTCFormatted.spec.js
+++ b/common/helpers/__tests__/dateHelperUTCFormatted.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from "vitest";
 import {
   dateRange,
   rangeLongEnd,
diff --git a/common/helpers/__tests__/dayResponsibles.spec.js b/common/helpers/__tests__/dayResponsibles.spec.js
index b4e7774c0a..e3623c8698 100644
--- a/common/helpers/__tests__/dayResponsibles.spec.js
+++ b/common/helpers/__tests__/dayResponsibles.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from "vitest";
 import {
   dayResponsiblesCommaSeparated,
   filterDayResponsiblesByDay,
diff --git a/common/helpers/__tests__/initials.spec.js b/common/helpers/__tests__/initials.spec.js
index 842c11c5de..895b46db75 100644
--- a/common/helpers/__tests__/initials.spec.js
+++ b/common/helpers/__tests__/initials.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from "vitest";
 import initials from '../initials.js'
 
 describe('initials', () => {
diff --git a/common/helpers/__tests__/interpolation.spec.js b/common/helpers/__tests__/interpolation.spec.js
index 71a20bc76c..c0ee4cb51b 100644
--- a/common/helpers/__tests__/interpolation.spec.js
+++ b/common/helpers/__tests__/interpolation.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from "vitest";
 import { lerp, clamp, invlerp, range } from '../interpolation.js'
 
 describe('lerp', () => {
diff --git a/common/helpers/__tests__/materialListsSorted.spec.js b/common/helpers/__tests__/materialListsSorted.spec.js
index fe4e2afd6d..ca4327cb45 100644
--- a/common/helpers/__tests__/materialListsSorted.spec.js
+++ b/common/helpers/__tests__/materialListsSorted.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from "vitest";
 import materialListsSorted from '../materialListsSorted.js'
 
 describe('materialListsSorted', () => {
diff --git a/common/helpers/__tests__/picasso.spec.js b/common/helpers/__tests__/picasso.spec.js
index abbce4c181..ed3c1883cd 100644
--- a/common/helpers/__tests__/picasso.spec.js
+++ b/common/helpers/__tests__/picasso.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from "vitest";
 import { splitDaysIntoPages, calculateBedtime } from '../picasso.js'
 import dayjs from '@/common/helpers/dayjs.js'
 
diff --git a/common/helpers/__tests__/userDisplayName.spec.js b/common/helpers/__tests__/userDisplayName.spec.js
index 5b3e95aec4..72a7a429c4 100644
--- a/common/helpers/__tests__/userDisplayName.spec.js
+++ b/common/helpers/__tests__/userDisplayName.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from "vitest";
 import userDisplayName from '../userDisplayName.js'
 
 describe('userDisplayName', () => {
diff --git a/common/helpers/__tests__/userInitials.spec.js b/common/helpers/__tests__/userInitials.spec.js
index eff283e9f8..9dbb8c9e1d 100644
--- a/common/helpers/__tests__/userInitials.spec.js
+++ b/common/helpers/__tests__/userInitials.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from "vitest";
 import userInitials from '../userInitials.js'
 
 describe('userInitials', () => {
diff --git a/common/helpers/__tests__/userLegalName.spec.js b/common/helpers/__tests__/userLegalName.spec.js
index a89b179c7c..236bade2fd 100644
--- a/common/helpers/__tests__/userLegalName.spec.js
+++ b/common/helpers/__tests__/userLegalName.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from 'vitest'
 import userLegalName from '../userLegalName.js'
 
 describe('userLegalName', () => {
diff --git a/common/helpers/dayjs/__tests__/formatDatePeriod.spec.js b/common/helpers/dayjs/__tests__/formatDatePeriod.spec.js
index 4f2e891b21..41942d7057 100644
--- a/common/helpers/dayjs/__tests__/formatDatePeriod.spec.js
+++ b/common/helpers/dayjs/__tests__/formatDatePeriod.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, expect, it } from 'vitest'
 import dayjs from '@/common/helpers/dayjs.js'
 
 describe('formatDatePeriod dayjs plugin', () => {
diff --git a/common/helpers/dayjs/__tests__/parseTime.spec.js b/common/helpers/dayjs/__tests__/parseTime.spec.js
index a80dd2c66b..6357d233f0 100644
--- a/common/helpers/dayjs/__tests__/parseTime.spec.js
+++ b/common/helpers/dayjs/__tests__/parseTime.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, expect, it } from 'vitest'
 import { default as dayjs, dayjsLocaleMap } from '../../dayjs'
 import parseTime from '../parseTime'
 import { padStart, range } from 'lodash'
diff --git a/frontend/eslint.config.mjs b/frontend/eslint.config.mjs
index cd3bfc8a0f..f9f3546495 100644
--- a/frontend/eslint.config.mjs
+++ b/frontend/eslint.config.mjs
@@ -37,7 +37,6 @@ export default [
     languageOptions: {
       globals: {
         ...globals.node,
-        ...globals.jest,
       },
 
       parserOptions: {
diff --git a/frontend/src/components/activity/content/columnLayout/__tests__/calculateNextSlotName.spec.js b/frontend/src/components/activity/content/columnLayout/__tests__/calculateNextSlotName.spec.js
index 76242642c9..a2a2324432 100644
--- a/frontend/src/components/activity/content/columnLayout/__tests__/calculateNextSlotName.spec.js
+++ b/frontend/src/components/activity/content/columnLayout/__tests__/calculateNextSlotName.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from 'vitest'
 import { calculateNextSlotName, adjustColumnWidths } from '../calculateNextSlotName.js'
 
 describe('generating a next slot name', () => {
diff --git a/frontend/src/components/form/api/__tests__/ApiCheckbox.spec.js b/frontend/src/components/form/api/__tests__/ApiCheckbox.spec.js
index 55cba75ea4..e828bd76b0 100644
--- a/frontend/src/components/form/api/__tests__/ApiCheckbox.spec.js
+++ b/frontend/src/components/form/api/__tests__/ApiCheckbox.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, afterEach, vi, test, expect } from 'vitest'
 import ApiCheckbox from '../ApiCheckbox.vue'
 import ApiWrapper from '@/components/form/api/ApiWrapper.vue'
 import Vue from 'vue'
@@ -26,7 +27,7 @@ describe('An ApiCheckbox', () => {
   })
 
   afterEach(() => {
-    jest.restoreAllMocks()
+    vi.restoreAllMocks()
     wrapper.destroy()
   })
 
diff --git a/frontend/src/components/form/api/__tests__/ApiColorField.spec.js b/frontend/src/components/form/api/__tests__/ApiColorField.spec.js
index e95f15325b..134e705bac 100644
--- a/frontend/src/components/form/api/__tests__/ApiColorField.spec.js
+++ b/frontend/src/components/form/api/__tests__/ApiColorField.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, afterEach, vi, test, expect } from 'vitest'
 import ApiColorField from '../ApiColorField.vue'
 import { fireEvent, screen, waitFor } from '@testing-library/vue'
 import { render } from '@/test/renderWithVuetify.js'
@@ -23,7 +24,7 @@ describe('An ApiColorField', () => {
   })
 
   afterEach(() => {
-    jest.restoreAllMocks()
+    vi.restoreAllMocks()
   })
 
   test('triggers api.patch and status update if input changes', async () => {
diff --git a/frontend/src/components/form/api/__tests__/ApiColorPicker.spec.js b/frontend/src/components/form/api/__tests__/ApiColorPicker.spec.js
index 52d430a272..c8e67f30a6 100644
--- a/frontend/src/components/form/api/__tests__/ApiColorPicker.spec.js
+++ b/frontend/src/components/form/api/__tests__/ApiColorPicker.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, afterEach, vi, test, expect } from 'vitest'
 import ApiColorPicker from '../ApiColorPicker.vue'
 import { screen, waitFor } from '@testing-library/vue'
 import { render } from '@/test/renderWithVuetify.js'
@@ -24,7 +25,7 @@ describe('An ApiColorPicker', () => {
   })
 
   afterEach(() => {
-    jest.restoreAllMocks()
+    vi.restoreAllMocks()
   })
 
   test('triggers api.patch and status update if input changes', async () => {
diff --git a/frontend/src/components/form/api/__tests__/ApiDatePicker.spec.js b/frontend/src/components/form/api/__tests__/ApiDatePicker.spec.js
index 8a2e751a52..c1a7afbaf5 100644
--- a/frontend/src/components/form/api/__tests__/ApiDatePicker.spec.js
+++ b/frontend/src/components/form/api/__tests__/ApiDatePicker.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, afterEach, vi, test, expect, it } from 'vitest'
 import ApiDatePicker from '../ApiDatePicker.vue'
 import { screen, waitFor } from '@testing-library/vue'
 import { render, setTestLocale } from '@/test/renderWithVuetify.js'
@@ -19,7 +20,7 @@ describe('An ApiDatePicker', () => {
   })
 
   afterEach(() => {
-    jest.restoreAllMocks()
+    vi.restoreAllMocks()
   })
 
   it('triggers api.patch and status update if input changes', async () => {
diff --git a/frontend/src/components/form/api/__tests__/ApiNumberField.spec.js b/frontend/src/components/form/api/__tests__/ApiNumberField.spec.js
index 8ed1a0a2e6..3bf52fa8f8 100644
--- a/frontend/src/components/form/api/__tests__/ApiNumberField.spec.js
+++ b/frontend/src/components/form/api/__tests__/ApiNumberField.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, afterEach, vi, test, expect } from 'vitest'
 import ApiNumberField from '../ApiNumberField.vue'
 import ApiWrapper from '@/components/form/api/ApiWrapper.vue'
 import Vue from 'vue'
@@ -28,7 +29,7 @@ describe('An ApiNumberField', () => {
   })
 
   afterEach(() => {
-    jest.restoreAllMocks()
+    vi.restoreAllMocks()
     wrapper.destroy()
   })
 
diff --git a/frontend/src/components/form/api/__tests__/ApiSelect.spec.js b/frontend/src/components/form/api/__tests__/ApiSelect.spec.js
index c162056586..7aaccbfff5 100644
--- a/frontend/src/components/form/api/__tests__/ApiSelect.spec.js
+++ b/frontend/src/components/form/api/__tests__/ApiSelect.spec.js
@@ -1,4 +1,5 @@
 // Libraries
+import { describe, beforeEach, afterEach, vi, test, expect } from 'vitest'
 import Vue from 'vue'
 import Vuetify from 'vuetify'
 
@@ -40,7 +41,7 @@ describe('An ApiSelect', () => {
   })
 
   afterEach(() => {
-    jest.restoreAllMocks()
+    vi.restoreAllMocks()
     wrapper.destroy()
   })
 
diff --git a/frontend/src/components/form/api/__tests__/ApiSwitch.spec.js b/frontend/src/components/form/api/__tests__/ApiSwitch.spec.js
index 14d02c63d1..083560b25d 100644
--- a/frontend/src/components/form/api/__tests__/ApiSwitch.spec.js
+++ b/frontend/src/components/form/api/__tests__/ApiSwitch.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, afterEach, vi, test, expect } from 'vitest'
 import ApiSwitch from '../ApiSwitch.vue'
 import ApiWrapper from '@/components/form/api/ApiWrapper.vue'
 import Vue from 'vue'
@@ -26,7 +27,7 @@ describe('An ApiSwitch', () => {
   })
 
   afterEach(() => {
-    jest.restoreAllMocks()
+    vi.restoreAllMocks()
     wrapper.destroy()
   })
 
diff --git a/frontend/src/components/form/api/__tests__/ApiTextField.spec.js b/frontend/src/components/form/api/__tests__/ApiTextField.spec.js
index 35e5c452e2..2987fd9265 100644
--- a/frontend/src/components/form/api/__tests__/ApiTextField.spec.js
+++ b/frontend/src/components/form/api/__tests__/ApiTextField.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, afterEach, vi, test, expect } from 'vitest'
 import ApiTextField from '../ApiTextField.vue'
 import ApiWrapper from '@/components/form/api/ApiWrapper.vue'
 import Vue from 'vue'
@@ -28,7 +29,7 @@ describe('An ApiTextField', () => {
   })
 
   afterEach(() => {
-    jest.restoreAllMocks()
+    vi.restoreAllMocks()
     wrapper.destroy()
   })
 
diff --git a/frontend/src/components/form/api/__tests__/ApiTextarea.spec.js b/frontend/src/components/form/api/__tests__/ApiTextarea.spec.js
index f084318156..d0155a6811 100644
--- a/frontend/src/components/form/api/__tests__/ApiTextarea.spec.js
+++ b/frontend/src/components/form/api/__tests__/ApiTextarea.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, afterEach, vi, test, expect } from 'vitest'
 import ApiTextarea from '@/components/form/api/ApiTextarea.vue'
 import ApiWrapper from '@/components/form/api/ApiWrapper.vue'
 import Vue from 'vue'
@@ -32,7 +33,7 @@ describe('An ApiTextarea', () => {
   })
 
   afterEach(() => {
-    jest.restoreAllMocks()
+    vi.restoreAllMocks()
     wrapper.destroy()
   })
 
diff --git a/frontend/src/components/form/api/__tests__/ApiTimePicker.spec.js b/frontend/src/components/form/api/__tests__/ApiTimePicker.spec.js
index 457ecce7d7..463ba9b04f 100644
--- a/frontend/src/components/form/api/__tests__/ApiTimePicker.spec.js
+++ b/frontend/src/components/form/api/__tests__/ApiTimePicker.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, afterEach, vi, expect, it } from 'vitest'
 import ApiTimePicker from '../ApiTimePicker.vue'
 import { screen, waitFor } from '@testing-library/vue'
 import { render, setTestLocale } from '@/test/renderWithVuetify.js'
@@ -19,7 +20,7 @@ describe('An ApiTimePicker', () => {
   })
 
   afterEach(() => {
-    jest.restoreAllMocks()
+    vi.restoreAllMocks()
   })
 
   it('triggers api.patch and status update if input changes', async () => {
diff --git a/frontend/src/components/form/api/__tests__/ApiWrapper.spec.js b/frontend/src/components/form/api/__tests__/ApiWrapper.spec.js
index 02173f1b50..c6efc88d8a 100644
--- a/frontend/src/components/form/api/__tests__/ApiWrapper.spec.js
+++ b/frontend/src/components/form/api/__tests__/ApiWrapper.spec.js
@@ -99,7 +99,7 @@ describe('Testing ApiWrapper [autoSave=true;  manual external value]', () => {
     wrapper = shallowMount(ApiWrapper, config)
     vm = wrapper.vm
 
-    apiPatch = jest.spyOn(config.mocks.api, 'patch')
+    apiPatch = vi.spyOn(config.mocks.api, 'patch')
 
     validateCalled = new Promise((resolve) => (validateResolveFunction = resolve))
 
diff --git a/frontend/src/components/form/base/__tests__/ECheckbox.spec.js b/frontend/src/components/form/base/__tests__/ECheckbox.spec.js
index babda9d4cd..da599827dd 100644
--- a/frontend/src/components/form/base/__tests__/ECheckbox.spec.js
+++ b/frontend/src/components/form/base/__tests__/ECheckbox.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, vi, test, expect } from 'vitest'
 import Vue from 'vue'
 import Vuetify from 'vuetify'
 
@@ -81,7 +82,7 @@ describe('An ECheckbox', () => {
     await input.trigger('click')
     expect(wrapper.vm.data).toBe(true)
 
-    jest.resetAllMocks()
+    vi.resetAllMocks()
     await input.trigger('click')
     expect(wrapper.vm.data).toBe(false)
   })
diff --git a/frontend/src/components/form/base/__tests__/EColorField.spec.js b/frontend/src/components/form/base/__tests__/EColorField.spec.js
index f3708f7545..0161d8591b 100644
--- a/frontend/src/components/form/base/__tests__/EColorField.spec.js
+++ b/frontend/src/components/form/base/__tests__/EColorField.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, test, expect } from 'vitest'
 import Vue from 'vue'
 import Vuetify from 'vuetify'
 
diff --git a/frontend/src/components/form/base/__tests__/EColorPicker.spec.js b/frontend/src/components/form/base/__tests__/EColorPicker.spec.js
index 3c2d512384..d3a4694341 100644
--- a/frontend/src/components/form/base/__tests__/EColorPicker.spec.js
+++ b/frontend/src/components/form/base/__tests__/EColorPicker.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, expect, it } from 'vitest'
 import { fireEvent, screen, waitFor } from '@testing-library/vue'
 import { render, setTestLocale, snapshotOf } from '@/test/renderWithVuetify.js'
 import user from '@testing-library/user-event'
diff --git a/frontend/src/components/form/base/__tests__/EDatePicker.spec.js b/frontend/src/components/form/base/__tests__/EDatePicker.spec.js
index bad0347e34..ce842fc677 100644
--- a/frontend/src/components/form/base/__tests__/EDatePicker.spec.js
+++ b/frontend/src/components/form/base/__tests__/EDatePicker.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, expect, it } from 'vitest'
 import { screen, waitFor } from '@testing-library/vue'
 import { render, setTestLocale, snapshotOf } from '@/test/renderWithVuetify.js'
 import user from '@testing-library/user-event'
diff --git a/frontend/src/components/form/base/__tests__/ENumberField.spec.js b/frontend/src/components/form/base/__tests__/ENumberField.spec.js
index 2db14480a8..6f2b3c720e 100644
--- a/frontend/src/components/form/base/__tests__/ENumberField.spec.js
+++ b/frontend/src/components/form/base/__tests__/ENumberField.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, test, expect } from 'vitest'
 import Vue from 'vue'
 import Vuetify from 'vuetify'
 
diff --git a/frontend/src/components/form/base/__tests__/EParseField.spec.js b/frontend/src/components/form/base/__tests__/EParseField.spec.js
index 5e41c85229..34f09ba6c6 100644
--- a/frontend/src/components/form/base/__tests__/EParseField.spec.js
+++ b/frontend/src/components/form/base/__tests__/EParseField.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, test, expect } from 'vitest'
 import Vue from 'vue'
 import Vuetify from 'vuetify'
 
diff --git a/frontend/src/components/form/base/__tests__/ESelect.spec.js b/frontend/src/components/form/base/__tests__/ESelect.spec.js
index 77bb783ae4..d44dd7375b 100644
--- a/frontend/src/components/form/base/__tests__/ESelect.spec.js
+++ b/frontend/src/components/form/base/__tests__/ESelect.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, test, expect } from 'vitest'
 import Vue from 'vue'
 import Vuetify from 'vuetify'
 
diff --git a/frontend/src/components/form/base/__tests__/ESwitch.spec.js b/frontend/src/components/form/base/__tests__/ESwitch.spec.js
index 02fc0c7ac4..7ce1b90d9d 100644
--- a/frontend/src/components/form/base/__tests__/ESwitch.spec.js
+++ b/frontend/src/components/form/base/__tests__/ESwitch.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, vi, test, expect } from 'vitest'
 import Vue from 'vue'
 import Vuetify from 'vuetify'
 
@@ -91,7 +92,7 @@ describe('An ESwitch', () => {
     touch(wrapper.find('.v-input--selection-controls__ripple')).start(0, 0).end(20, 0)
     expect(wrapper.vm.data).toBe(true)
 
-    jest.resetAllMocks()
+    vi.resetAllMocks()
     touch(wrapper.find('.v-input--selection-controls__ripple')).start(0, 0).end(-20, 0)
     expect(wrapper.vm.data).toBe(false)
   })
@@ -106,7 +107,7 @@ describe('An ESwitch', () => {
     input.trigger('keydown.right')
     expect(wrapper.vm.data).toBe(true)
 
-    jest.resetAllMocks()
+    vi.resetAllMocks()
     input.trigger('keydown.left')
     expect(wrapper.vm.data).toBe(false)
   })
diff --git a/frontend/src/components/form/base/__tests__/ETextArea.spec.js b/frontend/src/components/form/base/__tests__/ETextArea.spec.js
index ed430d82af..2f1944903a 100644
--- a/frontend/src/components/form/base/__tests__/ETextArea.spec.js
+++ b/frontend/src/components/form/base/__tests__/ETextArea.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, test, expect } from 'vitest'
 import Vue from 'vue'
 import Vuetify from 'vuetify'
 
diff --git a/frontend/src/components/form/base/__tests__/ETextField.spec.js b/frontend/src/components/form/base/__tests__/ETextField.spec.js
index 0e3c1e17bd..f0efa36c8d 100644
--- a/frontend/src/components/form/base/__tests__/ETextField.spec.js
+++ b/frontend/src/components/form/base/__tests__/ETextField.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, test, expect } from 'vitest'
 import Vue from 'vue'
 import Vuetify from 'vuetify'
 
diff --git a/frontend/src/components/form/base/__tests__/ETimePicker.spec.js b/frontend/src/components/form/base/__tests__/ETimePicker.spec.js
index 4c0eee8378..120a6de719 100644
--- a/frontend/src/components/form/base/__tests__/ETimePicker.spec.js
+++ b/frontend/src/components/form/base/__tests__/ETimePicker.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, expect, it } from 'vitest'
 import { screen, waitFor } from '@testing-library/vue'
 import { render, setTestLocale, snapshotOf } from '@/test/renderWithVuetify.js'
 import user from '@testing-library/user-event'
diff --git a/frontend/src/components/material/__tests__/shortScheduleEntryDescription.spec.js b/frontend/src/components/material/__tests__/shortScheduleEntryDescription.spec.js
index f9c9812519..fa9c67a8ba 100644
--- a/frontend/src/components/material/__tests__/shortScheduleEntryDescription.spec.js
+++ b/frontend/src/components/material/__tests__/shortScheduleEntryDescription.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from 'vitest'
 import shortScheduleEntryDescription from '../shortScheduleEntryDescription.js'
 import createI18n from '@/components/print/print-client/i18n.js'
 import { i18n } from '@/plugins/i18n'
diff --git a/frontend/src/components/print/__tests__/repairPrintConfig.spec.js b/frontend/src/components/print/__tests__/repairPrintConfig.spec.js
index 9b8ecd272e..da1f9379ad 100644
--- a/frontend/src/components/print/__tests__/repairPrintConfig.spec.js
+++ b/frontend/src/components/print/__tests__/repairPrintConfig.spec.js
@@ -1,3 +1,4 @@
+import { describe, test, expect } from 'vitest'
 import repairConfig from '../repairPrintConfig.js'
 import PicassoConfig from '../config/PicassoConfig.vue'
 import ActivityConfig from '../config/ActivityConfig.vue'
diff --git a/frontend/src/helpers/__tests__/querySyncHelper.spec.js b/frontend/src/helpers/__tests__/querySyncHelper.spec.js
index 1b0bf897ee..8157cb23be 100644
--- a/frontend/src/helpers/__tests__/querySyncHelper.spec.js
+++ b/frontend/src/helpers/__tests__/querySyncHelper.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from 'vitest'
 import {
   halUriToId,
   idToHalUri,
diff --git a/frontend/src/helpers/__tests__/serverError.spec.js b/frontend/src/helpers/__tests__/serverError.spec.js
index f4ea52b600..eaf48fb419 100644
--- a/frontend/src/helpers/__tests__/serverError.spec.js
+++ b/frontend/src/helpers/__tests__/serverError.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, vi, expect, it } from 'vitest'
 import { transformViolations } from '@/helpers/serverError'
 import cloneDeep from 'lodash/cloneDeep'
 import { fallbackLocales } from '@/plugins/i18n'
@@ -33,8 +34,8 @@ describe('transformViolations', () => {
   })
 
   describe('with i18n', () => {
-    const te = jest.fn()
-    const tc = jest.fn()
+    const te = vi.fn()
+    const tc = vi.fn()
     const i18n = { te, tc }
 
     beforeEach(() => {
diff --git a/frontend/src/helpers/__tests__/vCalendarDragAndDrop.spec.js b/frontend/src/helpers/__tests__/vCalendarDragAndDrop.spec.js
index 169b38da26..9c9ed9a248 100644
--- a/frontend/src/helpers/__tests__/vCalendarDragAndDrop.spec.js
+++ b/frontend/src/helpers/__tests__/vCalendarDragAndDrop.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from 'vitest'
 import {
   toTime,
   roundTimeToNearestQuarterHour,
diff --git a/frontend/src/plugins/__tests__/auth.spec.js b/frontend/src/plugins/__tests__/auth.spec.js
index d45381843b..202b568f3b 100644
--- a/frontend/src/plugins/__tests__/auth.spec.js
+++ b/frontend/src/plugins/__tests__/auth.spec.js
@@ -1,4 +1,4 @@
-import { vi } from 'vitest'
+import { describe, beforeEach, afterEach, vi, expect, it } from 'vitest'
 import Vue from 'vue'
 import { auth } from '@/plugins/auth'
 import Cookies from 'js-cookie'
@@ -63,7 +63,7 @@ vi.mock('@/router', async () => {
 
 describe('authentication logic', () => {
   afterEach(() => {
-    jest.restoreAllMocks()
+    vi.restoreAllMocks()
     Cookies.remove('localhost_jwt_hp')
     window.environment = cloneDeep(envBackup)
   })
@@ -110,7 +110,7 @@ describe('authentication logic', () => {
     it('sends a POST request to the API', async () => {
       // given
       store.replaceState(createState())
-      jest.spyOn(apiStore, 'post').mockImplementation(async () => {})
+      vi.spyOn(apiStore, 'post').mockImplementation(async () => {})
 
       // when
       await auth.register({ email: 'bar', password: 'baz' })
@@ -128,7 +128,7 @@ describe('authentication logic', () => {
     it('resolves to true if the user successfully logs in', async () => {
       // given
       store.replaceState(createState())
-      jest.spyOn(apiStore, 'post').mockImplementation(async () => {
+      vi.spyOn(apiStore, 'post').mockImplementation(async () => {
         Cookies.set('localhost_jwt_hp', validJWTPayload)
       })
 
@@ -146,7 +146,7 @@ describe('authentication logic', () => {
 
     it('resolves to false if the login fails', async () => {
       // given
-      jest.spyOn(apiStore, 'post').mockImplementation(async () => {
+      vi.spyOn(apiStore, 'post').mockImplementation(async () => {
         // login fails, no cookie added
       })
 
@@ -167,7 +167,7 @@ describe('authentication logic', () => {
     it('resolves to null if not logged in', async () => {
       // given
       store.replaceState(createState())
-      jest.spyOn(apiStore, 'get')
+      vi.spyOn(apiStore, 'get')
 
       // when
       const result = await auth.loadUser()
@@ -181,7 +181,7 @@ describe('authentication logic', () => {
       // given
       store.replaceState(createState())
       Cookies.set('localhost_jwt_hp', validJWTPayload)
-      jest.spyOn(apiStore, 'get')
+      vi.spyOn(apiStore, 'get')
 
       // when
       const result = await auth.loadUser()
@@ -208,8 +208,8 @@ describe('authentication logic', () => {
             }),
           },
         }
-        jest.spyOn(apiStore, 'get').mockImplementation(() => user)
-        jest.spyOn(auth, 'logout')
+        vi.spyOn(apiStore, 'get').mockImplementation(() => user)
+        vi.spyOn(auth, 'logout')
 
         // when
         const result = await auth.loadUser()
diff --git a/frontend/src/plugins/__tests__/preferences.spec.js b/frontend/src/plugins/__tests__/preferences.spec.js
index 98d21f85bf..607ef8253d 100644
--- a/frontend/src/plugins/__tests__/preferences.spec.js
+++ b/frontend/src/plugins/__tests__/preferences.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, afterEach, expect, it } from 'vitest'
 import { getters, loadFromLocalStorage, mutations } from '@/plugins/store/preferences'
 
 const CAMP_URI = '/camps/1a2b3c4d'
diff --git a/frontend/src/plugins/i18n/__tests__/apiFallbackLocalesFor.spec.js b/frontend/src/plugins/i18n/__tests__/apiFallbackLocalesFor.spec.js
index 294b106c96..0db9f116c0 100644
--- a/frontend/src/plugins/i18n/__tests__/apiFallbackLocalesFor.spec.js
+++ b/frontend/src/plugins/i18n/__tests__/apiFallbackLocalesFor.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from 'vitest'
 import { fallbackLocales } from '@/plugins/i18n'
 import fallbackLocalesFor from '@/plugins/i18n/apiFallbackLocalesFor'
 
diff --git a/frontend/src/plugins/veeValidate/__tests__/greaterThan.spec.js b/frontend/src/plugins/veeValidate/__tests__/greaterThan.spec.js
index 33294a3326..142fa136da 100644
--- a/frontend/src/plugins/veeValidate/__tests__/greaterThan.spec.js
+++ b/frontend/src/plugins/veeValidate/__tests__/greaterThan.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from 'vitest'
 import greaterThan from '@/plugins/veeValidate/greaterThan'
 
 const mockI18n = {
diff --git a/frontend/src/plugins/veeValidate/__tests__/greaterThanOrEqual_date.spec.js b/frontend/src/plugins/veeValidate/__tests__/greaterThanOrEqual_date.spec.js
index 9e27d975c1..0a8fdd9595 100644
--- a/frontend/src/plugins/veeValidate/__tests__/greaterThanOrEqual_date.spec.js
+++ b/frontend/src/plugins/veeValidate/__tests__/greaterThanOrEqual_date.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, expect, it } from 'vitest'
 import greaterThanOrEqual_date from '../greaterThanOrEqual_date.js'
 import dayjs from '@/common/helpers/dayjs.js'
 
diff --git a/frontend/src/plugins/veeValidate/__tests__/greaterThan_time.spec.js b/frontend/src/plugins/veeValidate/__tests__/greaterThan_time.spec.js
index 07485ddf64..2d71b887ee 100644
--- a/frontend/src/plugins/veeValidate/__tests__/greaterThan_time.spec.js
+++ b/frontend/src/plugins/veeValidate/__tests__/greaterThan_time.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, expect, it } from 'vitest'
 import greaterThan_time from '../greaterThan_time.js'
 import dayjs from '@/common/helpers/dayjs.js'
 
diff --git a/frontend/src/plugins/veeValidate/__tests__/lessThanOrEqual_date.spec.js b/frontend/src/plugins/veeValidate/__tests__/lessThanOrEqual_date.spec.js
index a51a5ebe86..86ab2dc90d 100644
--- a/frontend/src/plugins/veeValidate/__tests__/lessThanOrEqual_date.spec.js
+++ b/frontend/src/plugins/veeValidate/__tests__/lessThanOrEqual_date.spec.js
@@ -1,3 +1,4 @@
+import { describe, beforeEach, expect, it } from 'vitest'
 import lessThanOrEqual_date from '../lessThanOrEqual_date.js'
 import dayjs from '@/common/helpers/dayjs.js'
 
diff --git a/frontend/src/plugins/veeValidate/__tests__/oneEmojiOrTwoCharacters.spec.js b/frontend/src/plugins/veeValidate/__tests__/oneEmojiOrTwoCharacters.spec.js
index 44e2c65cb9..bfdb516776 100644
--- a/frontend/src/plugins/veeValidate/__tests__/oneEmojiOrTwoCharacters.spec.js
+++ b/frontend/src/plugins/veeValidate/__tests__/oneEmojiOrTwoCharacters.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from 'vitest'
 import oneEmojiOrTwoCharacters from '../oneEmojiOrTwoCharacters.js'
 
 const mockI18n = {
diff --git a/frontend/src/test/mockEventClass.js b/frontend/src/test/mockEventClass.js
index 33723592b6..aaa3f538d1 100644
--- a/frontend/src/test/mockEventClass.js
+++ b/frontend/src/test/mockEventClass.js
@@ -1,3 +1,4 @@
+import { beforeEach, afterEach } from 'vitest'
 /**
  * @param { "ClipboardEvent" | "DragEvent" } eventName
  */
diff --git a/frontend/src/views/admin/__tests__/Admin.spec.js b/frontend/src/views/admin/__tests__/Admin.spec.js
index 6aded65fc2..655e5acc97 100644
--- a/frontend/src/views/admin/__tests__/Admin.spec.js
+++ b/frontend/src/views/admin/__tests__/Admin.spec.js
@@ -1,3 +1,4 @@
+import { describe, expect, it } from 'vitest'
 import Vue from 'vue'
 import { fireEvent } from '@testing-library/vue'
 import { render } from '@/test/renderWithVuetify.js'
diff --git a/frontend/tests/infrastructure/package-lock.spec.js b/frontend/tests/infrastructure/package-lock.spec.js
index 67ef109ce4..e6463eaeb8 100644
--- a/frontend/tests/infrastructure/package-lock.spec.js
+++ b/frontend/tests/infrastructure/package-lock.spec.js
@@ -1,3 +1,4 @@
+import { describe, test, expect } from 'vitest'
 import { lockfileVersion } from '../../package-lock.json'
 
 describe('The package-lock.json', () => {
diff --git a/frontend/vite.config.js b/frontend/vite.config.js
index 2415af7521..ed08123c28 100644
--- a/frontend/vite.config.js
+++ b/frontend/vite.config.js
@@ -152,7 +152,6 @@ export default defineConfig(({ mode }) => ({
     },
   },
   test: {
-    globals: true,
     environment: 'jsdom',
     alias: [{ find: /^vue$/, replacement: 'vue/dist/vue.runtime.common.js' }],
     globalSetup: './tests/globalSetup.js',

From b95d179a10e73fa4c84a8ffad50aeb921b349391 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 3 Sep 2024 22:43:45 +0000
Subject: [PATCH 232/273] chore(deps): update dependency phpstan/phpstan to
 v1.12.1

---
 api/composer.json |  2 +-
 api/composer.lock | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index a72969e626..ba8d68ec0c 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -57,7 +57,7 @@
         "justinrainbow/json-schema": "6.0.0",
         "php-coveralls/php-coveralls": "2.7.0",
         "phpspec/prophecy-phpunit": "2.2",
-        "phpstan/phpstan": "1.12.0",
+        "phpstan/phpstan": "1.12.1",
         "phpunit/phpunit": "10.5.31",
         "rector/rector": "1.2.4",
         "spatie/phpunit-snapshot-assertions": "5.1.6",
diff --git a/api/composer.lock b/api/composer.lock
index e367ab30d9..1af35e755d 100644
--- a/api/composer.lock
+++ b/api/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": "534d398946ad915a1bfc5165cfac8563",
+    "content-hash": "f239a01d73c4f6db812aa8ddcea110d8",
     "packages": [
         {
             "name": "api-platform/core",
@@ -12169,16 +12169,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.12.0",
+            "version": "1.12.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "384af967d35b2162f69526c7276acadce534d0e1"
+                "reference": "d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/384af967d35b2162f69526c7276acadce534d0e1",
-                "reference": "384af967d35b2162f69526c7276acadce534d0e1",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2",
+                "reference": "d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2",
                 "shasum": ""
             },
             "require": {
@@ -12223,7 +12223,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-27T09:18:05+00:00"
+            "time": "2024-09-03T19:55:22+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",

From 9d55fd0aa346f9948fc415af7d08cca20bb9bb8a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 3 Sep 2024 22:46:34 +0000
Subject: [PATCH 233/273] chore(deps): lock file maintenance

---
 frontend/package-lock.json    |  6 +--
 print/package-lock.json       | 86 +++++++++++++++++------------------
 translation/package-lock.json |  6 +--
 3 files changed, 49 insertions(+), 49 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index a3c4437460..c2bce5b23f 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -7347,9 +7347,9 @@
       "license": "MIT"
     },
     "node_modules/follow-redirects": {
-      "version": "1.15.6",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
-      "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+      "version": "1.15.8",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.8.tgz",
+      "integrity": "sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==",
       "funding": [
         {
           "type": "individual",
diff --git a/print/package-lock.json b/print/package-lock.json
index 397cb98854..cb7b74b977 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -1528,6 +1528,46 @@
         "url": "https://github.com/sponsors/kazupon"
       }
     },
+    "node_modules/@intlify/unplugin-vue-i18n": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-3.0.1.tgz",
+      "integrity": "sha512-q1zJhA/WpoLBzAAuKA5/AEp0e+bMOM10ll/HxT4g1VAw/9JhC4TTobP9KobKH90JMZ4U2daLFlYQfKNd29lpqw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/bundle-utils": "^7.4.0",
+        "@intlify/shared": "^9.4.0",
+        "@rollup/pluginutils": "^5.1.0",
+        "@vue/compiler-sfc": "^3.2.47",
+        "debug": "^4.3.3",
+        "fast-glob": "^3.2.12",
+        "js-yaml": "^4.1.0",
+        "json5": "^2.2.3",
+        "pathe": "^1.0.0",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2",
+        "unplugin": "^1.1.0"
+      },
+      "engines": {
+        "node": ">= 14.16"
+      },
+      "peerDependencies": {
+        "petite-vue-i18n": "*",
+        "vue-i18n": "*",
+        "vue-i18n-bridge": "*"
+      },
+      "peerDependenciesMeta": {
+        "petite-vue-i18n": {
+          "optional": true
+        },
+        "vue-i18n": {
+          "optional": true
+        },
+        "vue-i18n-bridge": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@intlify/utils": {
       "version": "0.12.0",
       "resolved": "https://registry.npmjs.org/@intlify/utils/-/utils-0.12.0.tgz",
@@ -2707,46 +2747,6 @@
         "node": "^14.16.0 || >=16.11.0"
       }
     },
-    "node_modules/@nuxtjs/i18n/node_modules/@intlify/unplugin-vue-i18n": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-3.0.1.tgz",
-      "integrity": "sha512-q1zJhA/WpoLBzAAuKA5/AEp0e+bMOM10ll/HxT4g1VAw/9JhC4TTobP9KobKH90JMZ4U2daLFlYQfKNd29lpqw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@intlify/bundle-utils": "^7.4.0",
-        "@intlify/shared": "^9.4.0",
-        "@rollup/pluginutils": "^5.1.0",
-        "@vue/compiler-sfc": "^3.2.47",
-        "debug": "^4.3.3",
-        "fast-glob": "^3.2.12",
-        "js-yaml": "^4.1.0",
-        "json5": "^2.2.3",
-        "pathe": "^1.0.0",
-        "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.2",
-        "unplugin": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 14.16"
-      },
-      "peerDependencies": {
-        "petite-vue-i18n": "*",
-        "vue-i18n": "*",
-        "vue-i18n-bridge": "*"
-      },
-      "peerDependenciesMeta": {
-        "petite-vue-i18n": {
-          "optional": true
-        },
-        "vue-i18n": {
-          "optional": true
-        },
-        "vue-i18n-bridge": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/@nuxtjs/tailwindcss": {
       "version": "6.12.1",
       "resolved": "https://registry.npmjs.org/@nuxtjs/tailwindcss/-/tailwindcss-6.12.1.tgz",
@@ -8685,9 +8685,9 @@
       "license": "ISC"
     },
     "node_modules/follow-redirects": {
-      "version": "1.15.6",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
-      "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+      "version": "1.15.8",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.8.tgz",
+      "integrity": "sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==",
       "funding": [
         {
           "type": "individual",
diff --git a/translation/package-lock.json b/translation/package-lock.json
index aed11faf5b..3978560893 100644
--- a/translation/package-lock.json
+++ b/translation/package-lock.json
@@ -86,9 +86,9 @@
       }
     },
     "node_modules/follow-redirects": {
-      "version": "1.15.6",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
-      "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
+      "version": "1.15.8",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.8.tgz",
+      "integrity": "sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==",
       "funding": [
         {
           "type": "individual",

From 0a2630a06ce7aa032b78e863cc1d5a2b29c78186 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 4 Sep 2024 02:19:53 +0000
Subject: [PATCH 234/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.43

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 379879049a..525bcd0ca0 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.42
+    image: amazon/aws-cli:2.17.43
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From f95b898da932290bebb744f2aeeecb28319e2970 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 4 Sep 2024 02:20:10 +0000
Subject: [PATCH 235/273] chore(deps): update dependency @types/node to
 v20.16.4

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index e964de857e..e388fbb36b 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -15,7 +15,7 @@
                 "@eslint/compat": "1.1.1",
                 "@eslint/eslintrc": "3.1.0",
                 "@eslint/js": "9.9.1",
-                "@types/node": "20.16.3",
+                "@types/node": "20.16.4",
                 "eslint": "8.57.0",
                 "eslint-config-prettier": "9.1.0",
                 "eslint-plugin-n": "17.10.2",
@@ -2923,9 +2923,9 @@
             }
         },
         "node_modules/@types/node": {
-            "version": "20.16.3",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.3.tgz",
-            "integrity": "sha512-/wdGiWRkMOm53gAsSyFMXFZHbVg7C6CbkrzHNpaHoYfsUWPg7m6ZRKtvQjgvQ9i8WT540a3ydRlRQbxjY30XxQ==",
+            "version": "20.16.4",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.4.tgz",
+            "integrity": "sha512-ioyQ1zK9aGEomJ45zz8S8IdzElyxhvP1RVWnPrXDf6wFaUb+kk1tEcVVJkF7RPGM0VWI7cp5U57oCPIn5iN1qg==",
             "license": "MIT",
             "dependencies": {
                 "undici-types": "~6.19.2"
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index b2cb86f2d2..a266b98270 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -19,7 +19,7 @@
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.1",
-        "@types/node": "20.16.3",
+        "@types/node": "20.16.4",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
         "eslint-plugin-n": "17.10.2",

From 8acc7663f91d4cfe962bb9b1258cb1113ecebe78 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 4 Sep 2024 04:14:30 +0000
Subject: [PATCH 236/273] chore(deps): update node.js to v22.8.0

---
 .docker-hub/print/Dockerfile                              | 4 ++--
 .../elasticsearch/remove-old-indexes/docker-compose.yml   | 2 +-
 .ops/ecamp3-logging/values.yaml                           | 2 +-
 docker-compose.yml                                        | 8 ++++----
 4 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/.docker-hub/print/Dockerfile b/.docker-hub/print/Dockerfile
index f818f75d59..df39f52032 100644
--- a/.docker-hub/print/Dockerfile
+++ b/.docker-hub/print/Dockerfile
@@ -1,5 +1,5 @@
 # build stage
-FROM node:22.7.0 AS build-stage
+FROM node:22.8.0 AS build-stage
 ARG SENTRY_AUTH_TOKEN
 ARG SENTRY_ORG
 ARG SENTRY_PRINT_PROJECT
@@ -22,7 +22,7 @@ COPY print .
 RUN npm run build
 
 # production stage
-FROM node:22.7.0 AS production-stage
+FROM node:22.8.0 AS production-stage
 WORKDIR /app
 
 COPY --from=build-stage /app/.output ./.output
diff --git a/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml b/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml
index 3d1b576a88..fbefc899ab 100644
--- a/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml
+++ b/.ops/ecamp3-logging/files/elasticsearch/remove-old-indexes/docker-compose.yml
@@ -1,6 +1,6 @@
 services:
   remove-old-indexes:
-    image: node:22.7.0
+    image: node:22.8.0
     volumes:
       - ./src:/src
     command:
diff --git a/.ops/ecamp3-logging/values.yaml b/.ops/ecamp3-logging/values.yaml
index 4b6a03703f..46678d9320 100644
--- a/.ops/ecamp3-logging/values.yaml
+++ b/.ops/ecamp3-logging/values.yaml
@@ -48,7 +48,7 @@ elasticsearch:
         storage: 10Gi
   removeOldIndexes:
     maxIndexAge: 15
-    image: node:22.7.0
+    image: node:22.8.0
 
 kibana:
   name: kibana
diff --git a/docker-compose.yml b/docker-compose.yml
index cdc640fdd2..23b5395e47 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,6 +1,6 @@
 services:
   frontend:
-    image: node:22.7.0
+    image: node:22.8.0
     container_name: 'ecamp3-frontend'
     ports:
       - '9229:9229' # jest debug
@@ -68,7 +68,7 @@ services:
       - VARNISH_HTTP_PORT=8080
 
   pdf:
-    image: node:22.7.0
+    image: node:22.8.0
     container_name: 'ecamp3-pdf'
     stdin_open: true
     tty: true
@@ -87,7 +87,7 @@ services:
       - CI=${CI}
 
   print:
-    image: node:22.7.0
+    image: node:22.8.0
     container_name: 'ecamp3-print'
     user: ${USER_ID:-1000}
     volumes:
@@ -187,7 +187,7 @@ services:
         protocol: tcp
 
   translation:
-    image: node:22.7.0
+    image: node:22.8.0
     profiles: ['translation']
     container_name: 'ecamp3-translation'
     volumes:

From 66baf25061bd66ecb10b2823dcebb35a06d3abc3 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 4 Sep 2024 08:27:14 +0000
Subject: [PATCH 237/273] chore(deps): lock file maintenance

---
 e2e/package-lock.json         |  6 +++---
 frontend/package-lock.json    |  6 +++---
 print/package-lock.json       | 18 +++++++++---------
 translation/package-lock.json |  6 +++---
 4 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/e2e/package-lock.json b/e2e/package-lock.json
index f6fdaf02f0..842beaf468 100644
--- a/e2e/package-lock.json
+++ b/e2e/package-lock.json
@@ -657,9 +657,9 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.5.2",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.2.tgz",
-      "integrity": "sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==",
+      "version": "22.5.3",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.3.tgz",
+      "integrity": "sha512-njripolh85IA9SQGTAqbmnNZTdxv7X/4OYGPz8tgy5JDr8MP+uDBa921GpYEoDDnwm0Hmn5ZPeJgiiSTPoOzkQ==",
       "dev": true,
       "license": "MIT",
       "optional": true,
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index c2bce5b23f..29435abc1c 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -12805,9 +12805,9 @@
       "license": "ISC"
     },
     "node_modules/yaml": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz",
-      "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==",
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz",
+      "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==",
       "dev": true,
       "license": "ISC",
       "bin": {
diff --git a/print/package-lock.json b/print/package-lock.json
index cb7b74b977..8749c8cd33 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -4362,9 +4362,9 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.5.2",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.2.tgz",
-      "integrity": "sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==",
+      "version": "22.5.3",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.3.tgz",
+      "integrity": "sha512-njripolh85IA9SQGTAqbmnNZTdxv7X/4OYGPz8tgy5JDr8MP+uDBa921GpYEoDDnwm0Hmn5ZPeJgiiSTPoOzkQ==",
       "license": "MIT",
       "dependencies": {
         "undici-types": "~6.19.2"
@@ -5202,9 +5202,9 @@
       }
     },
     "node_modules/@vue/devtools-shared": {
-      "version": "7.4.0",
-      "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.4.0.tgz",
-      "integrity": "sha512-LpHkjzUlbPHSH6qaCVSyfQDaF8fZwFbEDbHrtAGA9K1/yEZn99zYvXXqE4e5IQCk8GBXiVJo9/bn7vBXJQIIGA==",
+      "version": "7.4.3",
+      "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.4.3.tgz",
+      "integrity": "sha512-gcrQtLteurIh3A9QC0x3Q5TvAp599Pcr9aBbbBd9jAICxUpX2qcXlDczQauWuRWmZwXeCI6i7OfrTVd/QMMgqA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -17898,9 +17898,9 @@
       "license": "ISC"
     },
     "node_modules/yaml": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz",
-      "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==",
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz",
+      "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==",
       "dev": true,
       "license": "ISC",
       "bin": {
diff --git a/translation/package-lock.json b/translation/package-lock.json
index 3978560893..11f4afd6c7 100644
--- a/translation/package-lock.json
+++ b/translation/package-lock.json
@@ -10,9 +10,9 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.5.2",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.2.tgz",
-      "integrity": "sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==",
+      "version": "22.5.3",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.3.tgz",
+      "integrity": "sha512-njripolh85IA9SQGTAqbmnNZTdxv7X/4OYGPz8tgy5JDr8MP+uDBa921GpYEoDDnwm0Hmn5ZPeJgiiSTPoOzkQ==",
       "license": "MIT",
       "dependencies": {
         "undici-types": "~6.19.2"

From 03a07cb42b3f028a01bca0279b48e4d3c4d46234 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 4 Sep 2024 12:09:56 +0000
Subject: [PATCH 238/273] chore(deps): update dependency nuxt to v3.13.1

---
 print/package-lock.json | 104 ++++++++++++++++++++++++----------------
 print/package.json      |   2 +-
 2 files changed, 65 insertions(+), 41 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index 8749c8cd33..46e5b51771 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -44,7 +44,7 @@
         "eslint-plugin-vue": "9.28.0",
         "eslint-plugin-vue-scoped-css": "2.8.1",
         "globals": "15.9.0",
-        "nuxt": "3.13.0",
+        "nuxt": "3.13.1",
         "prettier": "3.3.3",
         "sass": "1.69.4",
         "vite-plugin-eslint2": "4.4.0",
@@ -2137,14 +2137,14 @@
       }
     },
     "node_modules/@nuxt/kit": {
-      "version": "3.13.0",
-      "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.0.tgz",
-      "integrity": "sha512-gbhSbDvYfkGQ0R2ztqTLQLHRMv+7g50kAKKuN6mbF4tL9jg7NPnQ8bAarn2I4Qx8xtmwO+qY1ABkmYMn5S1CpA==",
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.1.tgz",
+      "integrity": "sha512-FkUL349lp/3nVfTIyws4UDJ3d2jyv5Pk1DC1HQUCOkSloYYMdbRcQAUcb4fe2TCLNWvHM+FhU8jnzGTzjALZYA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nuxt/schema": "3.13.0",
-        "c12": "^1.11.1",
+        "@nuxt/schema": "3.13.1",
+        "c12": "^1.11.2",
         "consola": "^3.2.3",
         "defu": "^6.1.4",
         "destr": "^2.0.3",
@@ -2156,12 +2156,12 @@
         "knitwork": "^1.1.0",
         "mlly": "^1.7.1",
         "pathe": "^1.1.2",
-        "pkg-types": "^1.1.3",
+        "pkg-types": "^1.2.0",
         "scule": "^1.3.0",
         "semver": "^7.6.3",
         "ufo": "^1.5.4",
         "unctx": "^2.3.1",
-        "unimport": "^3.11.0",
+        "unimport": "^3.11.1",
         "untyped": "^1.4.2"
       },
       "engines": {
@@ -2169,9 +2169,9 @@
       }
     },
     "node_modules/@nuxt/schema": {
-      "version": "3.13.0",
-      "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.0.tgz",
-      "integrity": "sha512-JBGSjF9Hd8guvTV2312eM1RulCMJc50yR3CeMZPLDsI02A8TXQnABS8EbgvGRvxD43q/ITjj21B2ffG1wEVrnQ==",
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.1.tgz",
+      "integrity": "sha512-ishbhzVGspjshG9AG0hYnKYY6LWXzCtua7OXV7C/DQ2yA7rRcy1xHpzKZUDbIRyxCHHCAcBd8jfHEUmEuhEPrA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2180,12 +2180,12 @@
         "defu": "^6.1.4",
         "hookable": "^5.5.3",
         "pathe": "^1.1.2",
-        "pkg-types": "^1.1.3",
+        "pkg-types": "^1.2.0",
         "scule": "^1.3.0",
         "std-env": "^3.7.0",
         "ufo": "^1.5.4",
         "uncrypto": "^0.1.3",
-        "unimport": "^3.11.0",
+        "unimport": "^3.11.1",
         "untyped": "^1.4.2"
       },
       "engines": {
@@ -2222,15 +2222,15 @@
       }
     },
     "node_modules/@nuxt/vite-builder": {
-      "version": "3.13.0",
-      "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.13.0.tgz",
-      "integrity": "sha512-FVIpT5wTxGcU3JDFxIyvT6isSZUujVKavQyPo3kgOQKWURDcBcvVY4HdJIVMsSIcaXafH13RZc5RKLlxfIGFdQ==",
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/@nuxt/vite-builder/-/vite-builder-3.13.1.tgz",
+      "integrity": "sha512-qH5p5K7lMfFc5L9um3Q7sLb5mvrLHfPTqljZKkEVVEhenz08a33aUPgaKhvd6rJOgW8Z0uh8BS2EoStBK2sSog==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nuxt/kit": "3.13.0",
+        "@nuxt/kit": "3.13.1",
         "@rollup/plugin-replace": "^5.0.7",
-        "@vitejs/plugin-vue": "^5.1.2",
+        "@vitejs/plugin-vue": "^5.1.3",
         "@vitejs/plugin-vue-jsx": "^4.0.1",
         "autoprefixer": "^10.4.20",
         "clear": "^0.1.0",
@@ -2249,15 +2249,15 @@
         "ohash": "^1.1.3",
         "pathe": "^1.1.2",
         "perfect-debounce": "^1.0.0",
-        "pkg-types": "^1.1.3",
-        "postcss": "^8.4.41",
+        "pkg-types": "^1.2.0",
+        "postcss": "^8.4.44",
         "rollup-plugin-visualizer": "^5.12.0",
         "std-env": "^3.7.0",
         "strip-literal": "^2.1.0",
         "ufo": "^1.5.4",
         "unenv": "^1.10.0",
-        "unplugin": "^1.12.2",
-        "vite": "^5.4.2",
+        "unplugin": "^1.12.3",
+        "vite": "^5.4.3",
         "vite-node": "^2.0.5",
         "vite-plugin-checker": "^0.7.2",
         "vue-bundle-renderer": "^2.1.0"
@@ -9533,6 +9533,20 @@
         "module-details-from-path": "^1.0.3"
       }
     },
+    "node_modules/impound": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/impound/-/impound-0.1.0.tgz",
+      "integrity": "sha512-F9nJgOsDc3tysjN74edE0vGPEQrU7DAje6g5nNAL5Jc9Tv4JW3mH7XMGne+EaadTniDXLeUrVR21opkNfWO1zQ==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@rollup/pluginutils": "^5.1.0",
+        "mlly": "^1.7.1",
+        "pathe": "^1.1.2",
+        "unenv": "^1.10.0",
+        "unplugin": "^1.12.2"
+      }
+    },
     "node_modules/imurmurhash": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -11064,6 +11078,13 @@
         "node": "^18 || >=20"
       }
     },
+    "node_modules/nanotar": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/nanotar/-/nanotar-0.1.1.tgz",
+      "integrity": "sha512-AiJsGsSF3O0havL1BydvI4+wR76sKT+okKRwWIaK96cZUnXqH0uNBOsHlbwZq3+m2BR1VKqHDVudl3gO4mYjpQ==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/natural-compare": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
@@ -11860,24 +11881,24 @@
       }
     },
     "node_modules/nuxt": {
-      "version": "3.13.0",
-      "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-3.13.0.tgz",
-      "integrity": "sha512-NZlPGlMav18KXWiOmTguQtH5lcrwooPniWXM3Ca4c9spsMRu3wyWLlN8wiI/cK+lEu3rQyKCGSA75nFVK4Ew3w==",
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/nuxt/-/nuxt-3.13.1.tgz",
+      "integrity": "sha512-En0vVrCJWu54ptShUlrqOGzXTcjhX+RnHShwdcpNqL9kmE9FWqeDYnPTgt2gJWrYSvVbmjJcVfEugNo9XpNmHA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@nuxt/devalue": "^2.0.2",
-        "@nuxt/devtools": "^1.3.14",
-        "@nuxt/kit": "3.13.0",
-        "@nuxt/schema": "3.13.0",
+        "@nuxt/devtools": "^1.4.1",
+        "@nuxt/kit": "3.13.1",
+        "@nuxt/schema": "3.13.1",
         "@nuxt/telemetry": "^2.5.4",
-        "@nuxt/vite-builder": "3.13.0",
-        "@unhead/dom": "^1.10.0",
-        "@unhead/ssr": "^1.10.0",
-        "@unhead/vue": "^1.10.0",
-        "@vue/shared": "^3.4.38",
+        "@nuxt/vite-builder": "3.13.1",
+        "@unhead/dom": "^1.10.4",
+        "@unhead/ssr": "^1.10.4",
+        "@unhead/vue": "^1.10.4",
+        "@vue/shared": "^3.5.0",
         "acorn": "8.12.1",
-        "c12": "^1.11.1",
+        "c12": "^1.11.2",
         "chokidar": "^3.6.0",
         "compatx": "^0.1.8",
         "consola": "^3.2.3",
@@ -11893,35 +11914,38 @@
         "h3": "^1.12.0",
         "hookable": "^5.5.3",
         "ignore": "^5.3.2",
+        "impound": "^0.1.0",
         "jiti": "^1.21.6",
         "klona": "^2.0.6",
         "knitwork": "^1.1.0",
         "magic-string": "^0.30.11",
         "mlly": "^1.7.1",
+        "nanotar": "^0.1.1",
         "nitropack": "^2.9.7",
-        "nuxi": "^3.12.0",
-        "nypm": "^0.3.9",
+        "nuxi": "^3.13.1",
+        "nypm": "^0.3.11",
         "ofetch": "^1.3.4",
         "ohash": "^1.1.3",
         "pathe": "^1.1.2",
         "perfect-debounce": "^1.0.0",
-        "pkg-types": "^1.1.3",
+        "pkg-types": "^1.2.0",
         "radix3": "^1.1.2",
         "scule": "^1.3.0",
         "semver": "^7.6.3",
         "std-env": "^3.7.0",
         "strip-literal": "^2.1.0",
+        "tinyglobby": "0.2.5",
         "ufo": "^1.5.4",
         "ultrahtml": "^1.5.3",
         "uncrypto": "^0.1.3",
         "unctx": "^2.3.1",
         "unenv": "^1.10.0",
-        "unimport": "^3.11.0",
-        "unplugin": "^1.12.2",
+        "unimport": "^3.11.1",
+        "unplugin": "^1.12.3",
         "unplugin-vue-router": "^0.10.7",
         "unstorage": "^1.10.2",
         "untyped": "^1.4.2",
-        "vue": "^3.4.38",
+        "vue": "^3.5.0",
         "vue-bundle-renderer": "^2.1.0",
         "vue-devtools-stub": "^0.1.0",
         "vue-router": "^4.4.3"
diff --git a/print/package.json b/print/package.json
index c702bf4fb9..5df461f2f5 100644
--- a/print/package.json
+++ b/print/package.json
@@ -53,7 +53,7 @@
     "eslint-plugin-vue": "9.28.0",
     "eslint-plugin-vue-scoped-css": "2.8.1",
     "globals": "15.9.0",
-    "nuxt": "3.13.0",
+    "nuxt": "3.13.1",
     "prettier": "3.3.3",
     "sass": "1.69.4",
     "vite-plugin-eslint2": "4.4.0",

From 692125c123aa6dcb3b20a304d29971898794092b Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 4 Sep 2024 12:10:40 +0000
Subject: [PATCH 239/273] fix(deps): update dependency puppeteer-core to
 v23.3.0

---
 print/package-lock.json | 16 ++++++++--------
 print/package.json      |  2 +-
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index 8749c8cd33..d898e3f18c 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -16,7 +16,7 @@
         "hal-json-vuex": "3.0.0-alpha.1",
         "isomorphic-dompurify": "2.15.0",
         "lodash": "4.17.21",
-        "puppeteer-core": "23.2.2",
+        "puppeteer-core": "23.3.0",
         "runes": "0.4.3",
         "vuex": "4.1.0"
       },
@@ -3591,9 +3591,9 @@
       }
     },
     "node_modules/@puppeteer/browsers": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.3.1.tgz",
-      "integrity": "sha512-uK7o3hHkK+naEobMSJ+2ySYyXtQkBxIH8Gn4MK9ciePjNV+Pf+PgY/W7iPzn2MTjl3stcYB5AlcTmPYw7AXDwA==",
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.4.0.tgz",
+      "integrity": "sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g==",
       "license": "Apache-2.0",
       "dependencies": {
         "debug": "^4.3.6",
@@ -14144,12 +14144,12 @@
       }
     },
     "node_modules/puppeteer-core": {
-      "version": "23.2.2",
-      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.2.2.tgz",
-      "integrity": "sha512-MK2Kbdmro+nX9/pfGKm8TiU5G3CuS6BbcNfkcz42GWnHp7KYsJHrP6lPDepiyvwjti5Bt/4a8U3w+DoFpIcBHQ==",
+      "version": "23.3.0",
+      "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.3.0.tgz",
+      "integrity": "sha512-sB2SsVMFs4gKad5OCdv6w5vocvtEUrRl0zQqSyRPbo/cj1Ktbarmhxy02Zyb9R9HrssBcJDZbkrvBnbaesPyYg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@puppeteer/browsers": "2.3.1",
+        "@puppeteer/browsers": "2.4.0",
         "chromium-bidi": "0.6.5",
         "debug": "^4.3.6",
         "devtools-protocol": "0.0.1330662",
diff --git a/print/package.json b/print/package.json
index c702bf4fb9..25598c6259 100644
--- a/print/package.json
+++ b/print/package.json
@@ -25,7 +25,7 @@
     "hal-json-vuex": "3.0.0-alpha.1",
     "isomorphic-dompurify": "2.15.0",
     "lodash": "4.17.21",
-    "puppeteer-core": "23.2.2",
+    "puppeteer-core": "23.3.0",
     "runes": "0.4.3",
     "vuex": "4.1.0"
   },

From 446f8edf1dfaff9242d6131fb11792462b7354b4 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 4 Sep 2024 15:42:12 +0000
Subject: [PATCH 240/273] chore(deps): update dependency @sentry/vite-plugin to
 v2.22.4

---
 frontend/package-lock.json | 24 ++++++++++++------------
 frontend/package.json      |  2 +-
 2 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 29435abc1c..09e7950453 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -75,7 +75,7 @@
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.1",
-        "@sentry/vite-plugin": "2.22.3",
+        "@sentry/vite-plugin": "2.22.4",
         "@testing-library/jest-dom": "6.5.0",
         "@testing-library/user-event": "14.5.2",
         "@testing-library/vue": "5.9.0",
@@ -3328,9 +3328,9 @@
       }
     },
     "node_modules/@sentry/babel-plugin-component-annotate": {
-      "version": "2.22.3",
-      "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.22.3.tgz",
-      "integrity": "sha512-OlHA+i+vnQHRIdry4glpiS/xTOtgjmpXOt6IBOUqynx5Jd/iK1+fj+t8CckqOx9wRacO/hru2wfW/jFq0iViLg==",
+      "version": "2.22.4",
+      "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-2.22.4.tgz",
+      "integrity": "sha512-hbSq067KwmeKIEkmyzkTNJbmbtx2KRqvpiy9Q/DynI5Z46Nko/ppvgIfyFXK9DelwvEPOqZic4WXTIhO4iv3DA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -3356,14 +3356,14 @@
       }
     },
     "node_modules/@sentry/bundler-plugin-core": {
-      "version": "2.22.3",
-      "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.22.3.tgz",
-      "integrity": "sha512-DeoUl0WffcqZZRl5Wy9aHvX4WfZbbWt0QbJ7NJrcEViq+dRAI2FQTYECFLwdZi5Gtb3oyqZICO+P7k8wDnzsjQ==",
+      "version": "2.22.4",
+      "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-2.22.4.tgz",
+      "integrity": "sha512-25NiyV3v6mdqOXlpzbbJnq0FHdAu1uTEDr+DU8CzNLjIXlq2Sr2CFZ/mhRcR6daM8OAretJdQ34lu0yHUVeE4Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/core": "^7.18.5",
-        "@sentry/babel-plugin-component-annotate": "2.22.3",
+        "@sentry/babel-plugin-component-annotate": "2.22.4",
         "@sentry/cli": "^2.33.1",
         "dotenv": "^16.3.1",
         "find-up": "^5.0.0",
@@ -3562,13 +3562,13 @@
       }
     },
     "node_modules/@sentry/vite-plugin": {
-      "version": "2.22.3",
-      "resolved": "https://registry.npmjs.org/@sentry/vite-plugin/-/vite-plugin-2.22.3.tgz",
-      "integrity": "sha512-+5bsLFRKOZzBp68XigoNE1pJ3tJ4gt2jXluApu54ui0N/yjfqGQ7LQTD7nL4tmJvB5Agwi0e7M7+fcxe9gSgBA==",
+      "version": "2.22.4",
+      "resolved": "https://registry.npmjs.org/@sentry/vite-plugin/-/vite-plugin-2.22.4.tgz",
+      "integrity": "sha512-C51PUlTv0BXN3+e9SjPHptNX3b9E0clrsaR5c//l/sFkQjuteDHKChA1gNzZSvfoa3gm9NzZAgpk3hVF2O3nBA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@sentry/bundler-plugin-core": "2.22.3",
+        "@sentry/bundler-plugin-core": "2.22.4",
         "unplugin": "1.0.1"
       },
       "engines": {
diff --git a/frontend/package.json b/frontend/package.json
index 8765ac78e1..0bfad041b5 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -87,7 +87,7 @@
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
     "@eslint/js": "9.9.1",
-    "@sentry/vite-plugin": "2.22.3",
+    "@sentry/vite-plugin": "2.22.4",
     "@testing-library/jest-dom": "6.5.0",
     "@testing-library/user-event": "14.5.2",
     "@testing-library/vue": "5.9.0",

From 0587c7544ed550e73ca345d483f1adbf90346acc Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 4 Sep 2024 19:11:20 +0000
Subject: [PATCH 241/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.44

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 525bcd0ca0..624734a8c8 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.43
+    image: amazon/aws-cli:2.17.44
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From c69b822d8068b4c0a46a03802f0f7fc506def885 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 4 Sep 2024 19:12:11 +0000
Subject: [PATCH 242/273] chore(deps): update helm release oauth2-proxy to
 v7.7.15

---
 .ops/ops-dashboard/Chart.lock | 10 +++++-----
 .ops/ops-dashboard/Chart.yaml |  6 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/.ops/ops-dashboard/Chart.lock b/.ops/ops-dashboard/Chart.lock
index d9d052bc89..2eb3d88322 100644
--- a/.ops/ops-dashboard/Chart.lock
+++ b/.ops/ops-dashboard/Chart.lock
@@ -1,15 +1,15 @@
 dependencies:
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.14
+  version: 7.7.15
 - name: kubernetes-dashboard
   repository: https://kubernetes.github.io/dashboard/
   version: 7.5.0
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.14
+  version: 7.7.15
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.14
-digest: sha256:dc9775fbb9abf5af555187a62be23a4f4ef6fbdab0935f45441c9633b0069db5
-generated: "2024-08-29T14:23:26.274211321Z"
+  version: 7.7.15
+digest: sha256:e7a74219951fcc05ae8bd90bdfa254f693bd5f305b69ff3d141b469120994d96
+generated: "2024-09-04T19:11:59.729709051Z"
diff --git a/.ops/ops-dashboard/Chart.yaml b/.ops/ops-dashboard/Chart.yaml
index 786d20510a..3bb99c6917 100644
--- a/.ops/ops-dashboard/Chart.yaml
+++ b/.ops/ops-dashboard/Chart.yaml
@@ -26,16 +26,16 @@ appVersion: 0.1.0
 dependencies:
   - name: oauth2-proxy
     alias: grafana-proxy
-    version: 7.7.14
+    version: 7.7.15
     repository: https://oauth2-proxy.github.io/manifests
   - name: kubernetes-dashboard
     version: 7.5.0
     repository: https://kubernetes.github.io/dashboard/
   - name: oauth2-proxy
     alias: kubernetes-dashboard-proxy
-    version: 7.7.14
+    version: 7.7.15
     repository: https://oauth2-proxy.github.io/manifests
   - name: oauth2-proxy
     alias: logging-proxy
-    version: 7.7.14
+    version: 7.7.15
     repository: https://oauth2-proxy.github.io/manifests

From f631096fd22af9ac373cb052a21318839449065a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 4 Sep 2024 19:29:15 +0000
Subject: [PATCH 243/273] chore(deps): update vue-minor-print-pdf to v3.5.1

---
 pdf/package-lock.json   | 118 ++++++++++++++++++++--------------------
 pdf/package.json        |  12 ++--
 print/package-lock.json | 118 ++++++++++++++++++++--------------------
 print/package.json      |  12 ++--
 4 files changed, 130 insertions(+), 130 deletions(-)

diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index caf6289a61..980fcb867d 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -6,7 +6,7 @@
     "": {
       "name": "@ecamp3/client-pdf",
       "dependencies": {
-        "@vue/runtime-core": "3.5.0",
+        "@vue/runtime-core": "3.5.1",
         "html-entities": "2.5.2",
         "html-parse-stringify": "3.0.1"
       },
@@ -20,12 +20,12 @@
         "@vitejs/plugin-vue": "5.1.3",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/babel-preset-app": "5.0.8",
-        "@vue/compiler-dom": "3.5.0",
-        "@vue/compiler-sfc": "3.5.0",
+        "@vue/compiler-dom": "3.5.1",
+        "@vue/compiler-sfc": "3.5.1",
         "@vue/eslint-config-prettier": "9.0.0",
-        "@vue/runtime-dom": "3.5.0",
-        "@vue/server-renderer": "3.5.0",
-        "@vue/shared": "3.5.0",
+        "@vue/runtime-dom": "3.5.1",
+        "@vue/server-renderer": "3.5.1",
+        "@vue/shared": "3.5.1",
         "@vue/test-utils": "2.4.6",
         "css": "3.0.0",
         "dayjs": "1.11.13",
@@ -3584,42 +3584,42 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.0.tgz",
-      "integrity": "sha512-ja7cpqAOfw4tyFAxgBz70Z42miNDeaqTxExTsnXDLomRpqfyCgyvZvFp482fmsElpfvsoMJUsvzULhvxUTW6Iw==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.1.tgz",
+      "integrity": "sha512-WdjF+NSgFYdWttHevHw5uaJFtKPalhmxhlu2uREj8cLP0uyKKIR60/JvSZNTp0x+NSd63iTiORQTx3+tt55NWQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.0",
+        "@vue/shared": "3.5.1",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.0.tgz",
-      "integrity": "sha512-xYjUybWZXl+1R/toDy815i4PbeehL2hThiSGkcpmIOCy2HoYyeeC/gAWK/Y/xsoK+GSw198/T5O31bYuQx5uvQ==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.1.tgz",
+      "integrity": "sha512-Ao23fB1lINo18HLCbJVApvzd9OQe8MgmQSgyY5+umbWj2w92w9KykVmJ4Iv2US5nak3ixc2B+7Km7JTNhQ8kSQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.0",
-        "@vue/shared": "3.5.0"
+        "@vue/compiler-core": "3.5.1",
+        "@vue/shared": "3.5.1"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.0.tgz",
-      "integrity": "sha512-B9DgLtrqok2GLuaFjLlSL15ZG3ZDBiitUH1ecex9guh/ZcA5MCdwuVE6nsfQxktuZY/QY0awJ35/ripIviCQTQ==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.1.tgz",
+      "integrity": "sha512-DFizMNH8eDglLhlfwJ0+ciBsztaYe3fY/zcZjrqL1ljXvUw/UpC84M1d7HpBTCW68SNqZyIxrs1XWmf+73Y65w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.0",
-        "@vue/compiler-dom": "3.5.0",
-        "@vue/compiler-ssr": "3.5.0",
-        "@vue/shared": "3.5.0",
+        "@vue/compiler-core": "3.5.1",
+        "@vue/compiler-dom": "3.5.1",
+        "@vue/compiler-ssr": "3.5.1",
+        "@vue/shared": "3.5.1",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.44",
@@ -3627,14 +3627,14 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.0.tgz",
-      "integrity": "sha512-E263QZmA1dqRd7c3u/sWTLRMpQOT0aZ8av/L9SoD/v/BVMZaWFHPUUBswS+bzrfvG2suJF8vSLKx6k6ba5SUdA==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.1.tgz",
+      "integrity": "sha512-C1hpSHQgRM8bg+5XWWD7CkFaVpSn9wZHCLRd10AmxqrH17d4EMP6+XcZpwBOM7H1jeStU5naEapZZWX0kso1tQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.0",
-        "@vue/shared": "3.5.0"
+        "@vue/compiler-dom": "3.5.1",
+        "@vue/shared": "3.5.1"
       }
     },
     "node_modules/@vue/eslint-config-prettier": {
@@ -3653,55 +3653,55 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.0.tgz",
-      "integrity": "sha512-Ew3F5riP3B3ZDGjD3ZKb9uZylTTPSqt8hAf4sGbvbjrjDjrFb3Jm15Tk1/w7WwTE5GbQ2Qhwxx1moc9hr8A/OQ==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.1.tgz",
+      "integrity": "sha512-aFE1nMDfbG7V+U5vdOk/NXxH/WX78XuAfX59vWmCM7Ao4lieoc83RkzOAWun61sQXlzNZ4IgROovFBHg+Iz1+Q==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.5.0"
+        "@vue/shared": "3.5.1"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.0.tgz",
-      "integrity": "sha512-mQyW0F9FaNRdt8ghkAs+BMG3iQ7LGgWKOpkzUzR5AI5swPNydHGL5hvVTqFaeMzwecF1g0c86H4yFQsSxJhH1w==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.1.tgz",
+      "integrity": "sha512-Ce92CCholNRHR3ZtzpRp/7CDGIPFxQ7ElXt9iH91ilK5eOrUv3Z582NWJesuM3aYX71BujVG5/4ypUxigGNxjA==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.0",
-        "@vue/shared": "3.5.0"
+        "@vue/reactivity": "3.5.1",
+        "@vue/shared": "3.5.1"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.0.tgz",
-      "integrity": "sha512-NQQXjpdXgyYVJ2M56FJ+lSJgZiecgQ2HhxhnQBN95FymXegRNY/N2htI7vOTwpP75pfxhIeYOJ8mE8sW8KAW6A==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.1.tgz",
+      "integrity": "sha512-B/fUJfBLp5PwE0EWNfBYnA4JUea8Yufb3wN8fN0/HzaqBdkiRHh4sFHOjWqIY8GS75gj//8VqeEqhcU6yUjIkA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.0",
-        "@vue/runtime-core": "3.5.0",
-        "@vue/shared": "3.5.0",
+        "@vue/reactivity": "3.5.1",
+        "@vue/runtime-core": "3.5.1",
+        "@vue/shared": "3.5.1",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.0.tgz",
-      "integrity": "sha512-HyDIFUg+l7L4PKrEnJlCYWHUOlm6NxZhmSxIefZ5MTYjkIPfDfkwhX7hqxAQHfgIAE1uLMLQZwuNR/ozI0NhZg==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.1.tgz",
+      "integrity": "sha512-C5V/fjQTitgVaRNH5wCoHynaWysjZ+VH68drNsAvQYg4ArHsZUQNz0nHoEWRj41nzqkVn2RUlnWaEOTl2o1Ppg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.5.0",
-        "@vue/shared": "3.5.0"
+        "@vue/compiler-ssr": "3.5.1",
+        "@vue/shared": "3.5.1"
       },
       "peerDependencies": {
-        "vue": "3.5.0"
+        "vue": "3.5.1"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.0.tgz",
-      "integrity": "sha512-m9IgiteBpCkFaMNwCOBkFksA7z8QiKc30ooRuoXWUFRDu0mGyNPlFHmbncF0/Kra1RlX8QrmBbRaIxVvikaR0Q==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.1.tgz",
+      "integrity": "sha512-NdcTRoO4KuW2RSFgpE2c+E/R/ZHaRzWPxAGxhmxZaaqLh6nYCXx7lc9a88ioqOCxCaV2SFJmujkxbUScW7dNsQ==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -7945,18 +7945,18 @@
       }
     },
     "node_modules/vue": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.0.tgz",
-      "integrity": "sha512-1t70favYoFijwfWJ7g81aTd32obGaAnKYE9FNyMgnEzn3F4YncRi/kqAHHKloG0VXTD8vBYMhbgLKCA+Sk6QDw==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.1.tgz",
+      "integrity": "sha512-k4UNnbPOEskodSxMtv+B9GljdB0C9ubZDOmW6vnXVGIfMqmEsY2+ohasjGguhGkMkrcP/oOrbH0dSD41x5JQFw==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
-        "@vue/compiler-dom": "3.5.0",
-        "@vue/compiler-sfc": "3.5.0",
-        "@vue/runtime-dom": "3.5.0",
-        "@vue/server-renderer": "3.5.0",
-        "@vue/shared": "3.5.0"
+        "@vue/compiler-dom": "3.5.1",
+        "@vue/compiler-sfc": "3.5.1",
+        "@vue/runtime-dom": "3.5.1",
+        "@vue/server-renderer": "3.5.1",
+        "@vue/shared": "3.5.1"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/pdf/package.json b/pdf/package.json
index 678d9682a6..c515afd478 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -17,7 +17,7 @@
     "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json,mjs}"
   },
   "dependencies": {
-    "@vue/runtime-core": "3.5.0",
+    "@vue/runtime-core": "3.5.1",
     "html-entities": "2.5.2",
     "html-parse-stringify": "3.0.1"
   },
@@ -40,12 +40,12 @@
     "@vitejs/plugin-vue": "5.1.3",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/babel-preset-app": "5.0.8",
-    "@vue/compiler-dom": "3.5.0",
-    "@vue/compiler-sfc": "3.5.0",
+    "@vue/compiler-dom": "3.5.1",
+    "@vue/compiler-sfc": "3.5.1",
     "@vue/eslint-config-prettier": "9.0.0",
-    "@vue/runtime-dom": "3.5.0",
-    "@vue/server-renderer": "3.5.0",
-    "@vue/shared": "3.5.0",
+    "@vue/runtime-dom": "3.5.1",
+    "@vue/server-renderer": "3.5.1",
+    "@vue/shared": "3.5.1",
     "@vue/test-utils": "2.4.6",
     "css": "3.0.0",
     "dayjs": "1.11.13",
diff --git a/print/package-lock.json b/print/package-lock.json
index db05cdce1f..94ec4063e7 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -31,11 +31,11 @@
         "@tailwindcss/typography": "0.5.15",
         "@typescript-eslint/eslint-plugin": "8.4.0",
         "@vitest/coverage-v8": "2.0.5",
-        "@vue/compiler-dom": "3.5.0",
-        "@vue/compiler-sfc": "3.5.0",
-        "@vue/runtime-dom": "3.5.0",
-        "@vue/server-renderer": "3.5.0",
-        "@vue/shared": "3.5.0",
+        "@vue/compiler-dom": "3.5.1",
+        "@vue/compiler-sfc": "3.5.1",
+        "@vue/runtime-dom": "3.5.1",
+        "@vue/server-renderer": "3.5.1",
+        "@vue/shared": "3.5.1",
         "@vue/test-utils": "2.4.6",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
@@ -50,7 +50,7 @@
         "vite-plugin-eslint2": "4.4.0",
         "vite-svg-loader": "5.1.0",
         "vitest": "2.0.5",
-        "vue": "3.5.0"
+        "vue": "3.5.1"
       }
     },
     "node_modules/@alloc/quick-lru": {
@@ -5084,13 +5084,13 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.0.tgz",
-      "integrity": "sha512-ja7cpqAOfw4tyFAxgBz70Z42miNDeaqTxExTsnXDLomRpqfyCgyvZvFp482fmsElpfvsoMJUsvzULhvxUTW6Iw==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.1.tgz",
+      "integrity": "sha512-WdjF+NSgFYdWttHevHw5uaJFtKPalhmxhlu2uREj8cLP0uyKKIR60/JvSZNTp0x+NSd63iTiORQTx3+tt55NWQ==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.0",
+        "@vue/shared": "3.5.1",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
@@ -5103,26 +5103,26 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.0.tgz",
-      "integrity": "sha512-xYjUybWZXl+1R/toDy815i4PbeehL2hThiSGkcpmIOCy2HoYyeeC/gAWK/Y/xsoK+GSw198/T5O31bYuQx5uvQ==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.1.tgz",
+      "integrity": "sha512-Ao23fB1lINo18HLCbJVApvzd9OQe8MgmQSgyY5+umbWj2w92w9KykVmJ4Iv2US5nak3ixc2B+7Km7JTNhQ8kSQ==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.0",
-        "@vue/shared": "3.5.0"
+        "@vue/compiler-core": "3.5.1",
+        "@vue/shared": "3.5.1"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.0.tgz",
-      "integrity": "sha512-B9DgLtrqok2GLuaFjLlSL15ZG3ZDBiitUH1ecex9guh/ZcA5MCdwuVE6nsfQxktuZY/QY0awJ35/ripIviCQTQ==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.1.tgz",
+      "integrity": "sha512-DFizMNH8eDglLhlfwJ0+ciBsztaYe3fY/zcZjrqL1ljXvUw/UpC84M1d7HpBTCW68SNqZyIxrs1XWmf+73Y65w==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.0",
-        "@vue/compiler-dom": "3.5.0",
-        "@vue/compiler-ssr": "3.5.0",
-        "@vue/shared": "3.5.0",
+        "@vue/compiler-core": "3.5.1",
+        "@vue/compiler-dom": "3.5.1",
+        "@vue/compiler-ssr": "3.5.1",
+        "@vue/shared": "3.5.1",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.44",
@@ -5136,13 +5136,13 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.0.tgz",
-      "integrity": "sha512-E263QZmA1dqRd7c3u/sWTLRMpQOT0aZ8av/L9SoD/v/BVMZaWFHPUUBswS+bzrfvG2suJF8vSLKx6k6ba5SUdA==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.1.tgz",
+      "integrity": "sha512-C1hpSHQgRM8bg+5XWWD7CkFaVpSn9wZHCLRd10AmxqrH17d4EMP6+XcZpwBOM7H1jeStU5naEapZZWX0kso1tQ==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.0",
-        "@vue/shared": "3.5.0"
+        "@vue/compiler-dom": "3.5.1",
+        "@vue/shared": "3.5.1"
       }
     },
     "node_modules/@vue/devtools-api": {
@@ -5212,53 +5212,53 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.0.tgz",
-      "integrity": "sha512-Ew3F5riP3B3ZDGjD3ZKb9uZylTTPSqt8hAf4sGbvbjrjDjrFb3Jm15Tk1/w7WwTE5GbQ2Qhwxx1moc9hr8A/OQ==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.1.tgz",
+      "integrity": "sha512-aFE1nMDfbG7V+U5vdOk/NXxH/WX78XuAfX59vWmCM7Ao4lieoc83RkzOAWun61sQXlzNZ4IgROovFBHg+Iz1+Q==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.5.0"
+        "@vue/shared": "3.5.1"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.0.tgz",
-      "integrity": "sha512-mQyW0F9FaNRdt8ghkAs+BMG3iQ7LGgWKOpkzUzR5AI5swPNydHGL5hvVTqFaeMzwecF1g0c86H4yFQsSxJhH1w==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.1.tgz",
+      "integrity": "sha512-Ce92CCholNRHR3ZtzpRp/7CDGIPFxQ7ElXt9iH91ilK5eOrUv3Z582NWJesuM3aYX71BujVG5/4ypUxigGNxjA==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.0",
-        "@vue/shared": "3.5.0"
+        "@vue/reactivity": "3.5.1",
+        "@vue/shared": "3.5.1"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.0.tgz",
-      "integrity": "sha512-NQQXjpdXgyYVJ2M56FJ+lSJgZiecgQ2HhxhnQBN95FymXegRNY/N2htI7vOTwpP75pfxhIeYOJ8mE8sW8KAW6A==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.1.tgz",
+      "integrity": "sha512-B/fUJfBLp5PwE0EWNfBYnA4JUea8Yufb3wN8fN0/HzaqBdkiRHh4sFHOjWqIY8GS75gj//8VqeEqhcU6yUjIkA==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.0",
-        "@vue/runtime-core": "3.5.0",
-        "@vue/shared": "3.5.0",
+        "@vue/reactivity": "3.5.1",
+        "@vue/runtime-core": "3.5.1",
+        "@vue/shared": "3.5.1",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.0.tgz",
-      "integrity": "sha512-HyDIFUg+l7L4PKrEnJlCYWHUOlm6NxZhmSxIefZ5MTYjkIPfDfkwhX7hqxAQHfgIAE1uLMLQZwuNR/ozI0NhZg==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.1.tgz",
+      "integrity": "sha512-C5V/fjQTitgVaRNH5wCoHynaWysjZ+VH68drNsAvQYg4ArHsZUQNz0nHoEWRj41nzqkVn2RUlnWaEOTl2o1Ppg==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.5.0",
-        "@vue/shared": "3.5.0"
+        "@vue/compiler-ssr": "3.5.1",
+        "@vue/shared": "3.5.1"
       },
       "peerDependencies": {
-        "vue": "3.5.0"
+        "vue": "3.5.1"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.0.tgz",
-      "integrity": "sha512-m9IgiteBpCkFaMNwCOBkFksA7z8QiKc30ooRuoXWUFRDu0mGyNPlFHmbncF0/Kra1RlX8QrmBbRaIxVvikaR0Q==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.1.tgz",
+      "integrity": "sha512-NdcTRoO4KuW2RSFgpE2c+E/R/ZHaRzWPxAGxhmxZaaqLh6nYCXx7lc9a88ioqOCxCaV2SFJmujkxbUScW7dNsQ==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -17447,16 +17447,16 @@
       "license": "MIT"
     },
     "node_modules/vue": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.0.tgz",
-      "integrity": "sha512-1t70favYoFijwfWJ7g81aTd32obGaAnKYE9FNyMgnEzn3F4YncRi/kqAHHKloG0VXTD8vBYMhbgLKCA+Sk6QDw==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.1.tgz",
+      "integrity": "sha512-k4UNnbPOEskodSxMtv+B9GljdB0C9ubZDOmW6vnXVGIfMqmEsY2+ohasjGguhGkMkrcP/oOrbH0dSD41x5JQFw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.0",
-        "@vue/compiler-sfc": "3.5.0",
-        "@vue/runtime-dom": "3.5.0",
-        "@vue/server-renderer": "3.5.0",
-        "@vue/shared": "3.5.0"
+        "@vue/compiler-dom": "3.5.1",
+        "@vue/compiler-sfc": "3.5.1",
+        "@vue/runtime-dom": "3.5.1",
+        "@vue/server-renderer": "3.5.1",
+        "@vue/shared": "3.5.1"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/print/package.json b/print/package.json
index 9c7a65c4fc..eaf5362669 100644
--- a/print/package.json
+++ b/print/package.json
@@ -40,11 +40,11 @@
     "@tailwindcss/typography": "0.5.15",
     "@typescript-eslint/eslint-plugin": "8.4.0",
     "@vitest/coverage-v8": "2.0.5",
-    "@vue/compiler-dom": "3.5.0",
-    "@vue/compiler-sfc": "3.5.0",
-    "@vue/runtime-dom": "3.5.0",
-    "@vue/server-renderer": "3.5.0",
-    "@vue/shared": "3.5.0",
+    "@vue/compiler-dom": "3.5.1",
+    "@vue/compiler-sfc": "3.5.1",
+    "@vue/runtime-dom": "3.5.1",
+    "@vue/server-renderer": "3.5.1",
+    "@vue/shared": "3.5.1",
     "@vue/test-utils": "2.4.6",
     "eslint": "8.57.0",
     "eslint-config-prettier": "9.1.0",
@@ -59,6 +59,6 @@
     "vite-plugin-eslint2": "4.4.0",
     "vite-svg-loader": "5.1.0",
     "vitest": "2.0.5",
-    "vue": "3.5.0"
+    "vue": "3.5.1"
   }
 }

From bbf1cab79cc4a9e70b344c9ed5bad91504277879 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 4 Sep 2024 19:33:22 +0000
Subject: [PATCH 244/273] chore(deps): lock file maintenance

---
 .ops/aws-setup/package-lock.json | 102 ++++++-------
 frontend/package-lock.json       |  69 +++++----
 pdf/package-lock.json            |  12 +-
 print/package-lock.json          | 242 +++++++++++++++----------------
 4 files changed, 214 insertions(+), 211 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index e388fbb36b..30f5035b95 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -166,24 +166,24 @@
             }
         },
         "node_modules/@aws-sdk/client-ecs": {
-            "version": "3.637.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecs/-/client-ecs-3.637.0.tgz",
-            "integrity": "sha512-/PcQKx4kBoWBpSu+10HXfU4LtUjTq92mCcJXYhjtlI8sQwkA1zvPThW0bjLJ34mIXhxvHSnUXG1NrjNZQ9ps4g==",
+            "version": "3.645.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/client-ecs/-/client-ecs-3.645.0.tgz",
+            "integrity": "sha512-heVxMTtqw0kZOXQlrMJ2DvcDlBEdQrid4jojny5ZTYzUN5fj+bjKMkl2QBYZdf/f40vBTYTmaJwOXvZ1KFSrNw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
                 "@aws-crypto/sha256-js": "5.2.0",
-                "@aws-sdk/client-sso-oidc": "3.637.0",
-                "@aws-sdk/client-sts": "3.637.0",
+                "@aws-sdk/client-sso-oidc": "3.645.0",
+                "@aws-sdk/client-sts": "3.645.0",
                 "@aws-sdk/core": "3.635.0",
-                "@aws-sdk/credential-provider-node": "3.637.0",
+                "@aws-sdk/credential-provider-node": "3.645.0",
                 "@aws-sdk/middleware-host-header": "3.620.0",
                 "@aws-sdk/middleware-logger": "3.609.0",
                 "@aws-sdk/middleware-recursion-detection": "3.620.0",
-                "@aws-sdk/middleware-user-agent": "3.637.0",
+                "@aws-sdk/middleware-user-agent": "3.645.0",
                 "@aws-sdk/region-config-resolver": "3.614.0",
                 "@aws-sdk/types": "3.609.0",
-                "@aws-sdk/util-endpoints": "3.637.0",
+                "@aws-sdk/util-endpoints": "3.645.0",
                 "@aws-sdk/util-user-agent-browser": "3.609.0",
                 "@aws-sdk/util-user-agent-node": "3.614.0",
                 "@smithy/config-resolver": "^3.0.5",
@@ -220,9 +220,9 @@
             }
         },
         "node_modules/@aws-sdk/client-sso": {
-            "version": "3.637.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.637.0.tgz",
-            "integrity": "sha512-+KjLvgX5yJYROWo3TQuwBJlHCY0zz9PsLuEolmXQn0BVK1L/m9GteZHtd+rEdAoDGBpE0Xqjy1oz5+SmtsaRUw==",
+            "version": "3.645.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.645.0.tgz",
+            "integrity": "sha512-2rc8TjnsNddOeKQ/pfNN7deNvGLXAeKeYtHtGDAiM2qfTKxd2sNcAsZ+JCDLyshuD4xLM5fpUyR0X8As9EAouQ==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
@@ -231,10 +231,10 @@
                 "@aws-sdk/middleware-host-header": "3.620.0",
                 "@aws-sdk/middleware-logger": "3.609.0",
                 "@aws-sdk/middleware-recursion-detection": "3.620.0",
-                "@aws-sdk/middleware-user-agent": "3.637.0",
+                "@aws-sdk/middleware-user-agent": "3.645.0",
                 "@aws-sdk/region-config-resolver": "3.614.0",
                 "@aws-sdk/types": "3.609.0",
-                "@aws-sdk/util-endpoints": "3.637.0",
+                "@aws-sdk/util-endpoints": "3.645.0",
                 "@aws-sdk/util-user-agent-browser": "3.609.0",
                 "@aws-sdk/util-user-agent-node": "3.614.0",
                 "@smithy/config-resolver": "^3.0.5",
@@ -269,22 +269,22 @@
             }
         },
         "node_modules/@aws-sdk/client-sso-oidc": {
-            "version": "3.637.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.637.0.tgz",
-            "integrity": "sha512-27bHALN6Qb6m6KZmPvRieJ/QRlj1lyac/GT2Rn5kJpre8Mpp+yxrtvp3h9PjNBty4lCeFEENfY4dGNSozBuBcw==",
+            "version": "3.645.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.645.0.tgz",
+            "integrity": "sha512-X9ULtdk3cO+1ysurEkJ1MSnu6U00qodXx+IVual+1jXX4RYY1WmQmfo7uDKf6FFkz7wW1DAqU+GJIBNQr0YH8A==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
                 "@aws-crypto/sha256-js": "5.2.0",
                 "@aws-sdk/core": "3.635.0",
-                "@aws-sdk/credential-provider-node": "3.637.0",
+                "@aws-sdk/credential-provider-node": "3.645.0",
                 "@aws-sdk/middleware-host-header": "3.620.0",
                 "@aws-sdk/middleware-logger": "3.609.0",
                 "@aws-sdk/middleware-recursion-detection": "3.620.0",
-                "@aws-sdk/middleware-user-agent": "3.637.0",
+                "@aws-sdk/middleware-user-agent": "3.645.0",
                 "@aws-sdk/region-config-resolver": "3.614.0",
                 "@aws-sdk/types": "3.609.0",
-                "@aws-sdk/util-endpoints": "3.637.0",
+                "@aws-sdk/util-endpoints": "3.645.0",
                 "@aws-sdk/util-user-agent-browser": "3.609.0",
                 "@aws-sdk/util-user-agent-node": "3.614.0",
                 "@smithy/config-resolver": "^3.0.5",
@@ -318,27 +318,27 @@
                 "node": ">=16.0.0"
             },
             "peerDependencies": {
-                "@aws-sdk/client-sts": "^3.637.0"
+                "@aws-sdk/client-sts": "^3.645.0"
             }
         },
         "node_modules/@aws-sdk/client-sts": {
-            "version": "3.637.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.637.0.tgz",
-            "integrity": "sha512-xUi7x4qDubtA8QREtlblPuAcn91GS/09YVEY/RwU7xCY0aqGuFwgszAANlha4OUIqva8oVj2WO4gJuG+iaSnhw==",
+            "version": "3.645.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.645.0.tgz",
+            "integrity": "sha512-6azXYtvtnAsPf2ShN9vKynIYVcJOpo6IoVmoMAVgNaBJyllP+s/RORzranYZzckqfmrudSxtct4rVapjLWuAMg==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-crypto/sha256-browser": "5.2.0",
                 "@aws-crypto/sha256-js": "5.2.0",
-                "@aws-sdk/client-sso-oidc": "3.637.0",
+                "@aws-sdk/client-sso-oidc": "3.645.0",
                 "@aws-sdk/core": "3.635.0",
-                "@aws-sdk/credential-provider-node": "3.637.0",
+                "@aws-sdk/credential-provider-node": "3.645.0",
                 "@aws-sdk/middleware-host-header": "3.620.0",
                 "@aws-sdk/middleware-logger": "3.609.0",
                 "@aws-sdk/middleware-recursion-detection": "3.620.0",
-                "@aws-sdk/middleware-user-agent": "3.637.0",
+                "@aws-sdk/middleware-user-agent": "3.645.0",
                 "@aws-sdk/region-config-resolver": "3.614.0",
                 "@aws-sdk/types": "3.609.0",
-                "@aws-sdk/util-endpoints": "3.637.0",
+                "@aws-sdk/util-endpoints": "3.645.0",
                 "@aws-sdk/util-user-agent-browser": "3.609.0",
                 "@aws-sdk/util-user-agent-node": "3.614.0",
                 "@smithy/config-resolver": "^3.0.5",
@@ -429,15 +429,15 @@
             }
         },
         "node_modules/@aws-sdk/credential-provider-ini": {
-            "version": "3.637.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.637.0.tgz",
-            "integrity": "sha512-h+PFCWfZ0Q3Dx84SppET/TFpcQHmxFW8/oV9ArEvMilw4EBN+IlxgbL0CnHwjHW64szcmrM0mbebjEfHf4FXmw==",
+            "version": "3.645.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.645.0.tgz",
+            "integrity": "sha512-LlZW0qwUwNlTaAIDCNpLbPsyXvS42pRIwF92fgtCQedmdnpN3XRUC6hcwSYI7Xru3GGKp3RnceOvsdOaRJORsw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/credential-provider-env": "3.620.1",
                 "@aws-sdk/credential-provider-http": "3.635.0",
                 "@aws-sdk/credential-provider-process": "3.620.1",
-                "@aws-sdk/credential-provider-sso": "3.637.0",
+                "@aws-sdk/credential-provider-sso": "3.645.0",
                 "@aws-sdk/credential-provider-web-identity": "3.621.0",
                 "@aws-sdk/types": "3.609.0",
                 "@smithy/credential-provider-imds": "^3.2.0",
@@ -450,20 +450,20 @@
                 "node": ">=16.0.0"
             },
             "peerDependencies": {
-                "@aws-sdk/client-sts": "^3.637.0"
+                "@aws-sdk/client-sts": "^3.645.0"
             }
         },
         "node_modules/@aws-sdk/credential-provider-node": {
-            "version": "3.637.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.637.0.tgz",
-            "integrity": "sha512-yoEhoxJJfs7sPVQ6Is939BDQJZpZCoUgKr/ySse4YKOZ24t4VqgHA6+wV7rYh+7IW24Rd91UTvEzSuHYTlxlNA==",
+            "version": "3.645.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.645.0.tgz",
+            "integrity": "sha512-eGFFuNvLeXjCJf5OCIuSEflxUowmK+bCS+lK4M8ofsYOEGAivdx7C0UPxNjHpvM8wKd8vpMl5phTeS9BWX5jMQ==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/credential-provider-env": "3.620.1",
                 "@aws-sdk/credential-provider-http": "3.635.0",
-                "@aws-sdk/credential-provider-ini": "3.637.0",
+                "@aws-sdk/credential-provider-ini": "3.645.0",
                 "@aws-sdk/credential-provider-process": "3.620.1",
-                "@aws-sdk/credential-provider-sso": "3.637.0",
+                "@aws-sdk/credential-provider-sso": "3.645.0",
                 "@aws-sdk/credential-provider-web-identity": "3.621.0",
                 "@aws-sdk/types": "3.609.0",
                 "@smithy/credential-provider-imds": "^3.2.0",
@@ -493,12 +493,12 @@
             }
         },
         "node_modules/@aws-sdk/credential-provider-sso": {
-            "version": "3.637.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.637.0.tgz",
-            "integrity": "sha512-Mvz+h+e62/tl+dVikLafhv+qkZJ9RUb8l2YN/LeKMWkxQylPT83CPk9aimVhCV89zth1zpREArl97+3xsfgQvA==",
+            "version": "3.645.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.645.0.tgz",
+            "integrity": "sha512-d6XuChAl5NCsCrUexc6AFb4efPmb9+66iwPylKG+iMTMYgO1ackfy1Q2/f35jdn0jolkPkzKsVyfzsEVoID6ew==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@aws-sdk/client-sso": "3.637.0",
+                "@aws-sdk/client-sso": "3.645.0",
                 "@aws-sdk/token-providers": "3.614.0",
                 "@aws-sdk/types": "3.609.0",
                 "@smithy/property-provider": "^3.1.3",
@@ -573,13 +573,13 @@
             }
         },
         "node_modules/@aws-sdk/middleware-user-agent": {
-            "version": "3.637.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.637.0.tgz",
-            "integrity": "sha512-EYo0NE9/da/OY8STDsK2LvM4kNa79DBsf4YVtaG4P5pZ615IeFsD8xOHZeuJmUrSMlVQ8ywPRX7WMucUybsKug==",
+            "version": "3.645.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.645.0.tgz",
+            "integrity": "sha512-NpTAtqWK+49lRuxfz7st9for80r4NriCMK0RfdJSoPFVntjsSQiQ7+2nW2XL05uVY633e9DvCAw8YatX3zd1mw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/types": "3.609.0",
-                "@aws-sdk/util-endpoints": "3.637.0",
+                "@aws-sdk/util-endpoints": "3.645.0",
                 "@smithy/protocol-http": "^4.1.0",
                 "@smithy/types": "^3.3.0",
                 "tslib": "^2.6.2"
@@ -638,9 +638,9 @@
             }
         },
         "node_modules/@aws-sdk/util-endpoints": {
-            "version": "3.637.0",
-            "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.637.0.tgz",
-            "integrity": "sha512-pAqOKUHeVWHEXXDIp/qoMk/6jyxIb6GGjnK1/f8dKHtKIEs4tKsnnL563gceEvdad53OPXIt86uoevCcCzmBnw==",
+            "version": "3.645.0",
+            "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.645.0.tgz",
+            "integrity": "sha512-Oe+xaU4ic4PB1k3pb5VTC1/MWES13IlgpaQw01bVHGfwP6Yv6zZOxizRzca2Y3E+AyR+nKD7vXtHRY+w3bi4bg==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@aws-sdk/types": "3.609.0",
@@ -3093,9 +3093,9 @@
             }
         },
         "node_modules/aws-sdk": {
-            "version": "2.1688.0",
-            "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1688.0.tgz",
-            "integrity": "sha512-L7AWt2+09uDQQfNRUaxvKEM+qHJdwBOln7xiMZg1kE1iNSGSQlwDPGYSFXwdMJDKJkeitJvhFrDhxon3cQ3ppA==",
+            "version": "2.1689.0",
+            "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1689.0.tgz",
+            "integrity": "sha512-+HjbDRzkMrqgQ78BplI7enfO84gSX0wXWnpalzrG7vjH6jFUjuWmRuki6GQhNzrSPQZu1zUi3gPud+3xUxXp3Q==",
             "hasInstallScript": true,
             "license": "Apache-2.0",
             "dependencies": {
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index be7b40436f..31f0d21814 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -4722,42 +4722,42 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.0.tgz",
-      "integrity": "sha512-ja7cpqAOfw4tyFAxgBz70Z42miNDeaqTxExTsnXDLomRpqfyCgyvZvFp482fmsElpfvsoMJUsvzULhvxUTW6Iw==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.1.tgz",
+      "integrity": "sha512-WdjF+NSgFYdWttHevHw5uaJFtKPalhmxhlu2uREj8cLP0uyKKIR60/JvSZNTp0x+NSd63iTiORQTx3+tt55NWQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.0",
+        "@vue/shared": "3.5.1",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.0.tgz",
-      "integrity": "sha512-xYjUybWZXl+1R/toDy815i4PbeehL2hThiSGkcpmIOCy2HoYyeeC/gAWK/Y/xsoK+GSw198/T5O31bYuQx5uvQ==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.1.tgz",
+      "integrity": "sha512-Ao23fB1lINo18HLCbJVApvzd9OQe8MgmQSgyY5+umbWj2w92w9KykVmJ4Iv2US5nak3ixc2B+7Km7JTNhQ8kSQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.0",
-        "@vue/shared": "3.5.0"
+        "@vue/compiler-core": "3.5.1",
+        "@vue/shared": "3.5.1"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.0.tgz",
-      "integrity": "sha512-B9DgLtrqok2GLuaFjLlSL15ZG3ZDBiitUH1ecex9guh/ZcA5MCdwuVE6nsfQxktuZY/QY0awJ35/ripIviCQTQ==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.1.tgz",
+      "integrity": "sha512-DFizMNH8eDglLhlfwJ0+ciBsztaYe3fY/zcZjrqL1ljXvUw/UpC84M1d7HpBTCW68SNqZyIxrs1XWmf+73Y65w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.0",
-        "@vue/compiler-dom": "3.5.0",
-        "@vue/compiler-ssr": "3.5.0",
-        "@vue/shared": "3.5.0",
+        "@vue/compiler-core": "3.5.1",
+        "@vue/compiler-dom": "3.5.1",
+        "@vue/compiler-ssr": "3.5.1",
+        "@vue/shared": "3.5.1",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.44",
@@ -4775,14 +4775,14 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.0.tgz",
-      "integrity": "sha512-E263QZmA1dqRd7c3u/sWTLRMpQOT0aZ8av/L9SoD/v/BVMZaWFHPUUBswS+bzrfvG2suJF8vSLKx6k6ba5SUdA==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.1.tgz",
+      "integrity": "sha512-C1hpSHQgRM8bg+5XWWD7CkFaVpSn9wZHCLRd10AmxqrH17d4EMP6+XcZpwBOM7H1jeStU5naEapZZWX0kso1tQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.0",
-        "@vue/shared": "3.5.0"
+        "@vue/compiler-dom": "3.5.1",
+        "@vue/shared": "3.5.1"
       }
     },
     "node_modules/@vue/component-compiler-utils": {
@@ -4891,9 +4891,9 @@
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.0.tgz",
-      "integrity": "sha512-m9IgiteBpCkFaMNwCOBkFksA7z8QiKc30ooRuoXWUFRDu0mGyNPlFHmbncF0/Kra1RlX8QrmBbRaIxVvikaR0Q==",
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.1.tgz",
+      "integrity": "sha512-NdcTRoO4KuW2RSFgpE2c+E/R/ZHaRzWPxAGxhmxZaaqLh6nYCXx7lc9a88ioqOCxCaV2SFJmujkxbUScW7dNsQ==",
       "dev": true,
       "license": "MIT"
     },
@@ -9915,9 +9915,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.44",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.44.tgz",
-      "integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==",
+      "version": "8.4.45",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz",
+      "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==",
       "funding": [
         {
           "type": "opencollective",
@@ -11781,18 +11781,25 @@
       }
     },
     "node_modules/unplugin-vue-components/node_modules/unplugin": {
-      "version": "1.12.3",
-      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.3.tgz",
-      "integrity": "sha512-my8DH0/T/Kx33KO+6QXAqdeMYgyy0GktlOpdQjpagfHKw5DrD0ctPr7SHUyOT3g4ZVpzCQGt/qcpuoKJ/pniHA==",
+      "version": "1.13.1",
+      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.13.1.tgz",
+      "integrity": "sha512-6Kq1iSSwg7KyjcThRUks9LuqDAKvtnioxbL9iEtB9ctTyBA5OmrB8gZd/d225VJu1w3UpUsKV7eGrvf59J7+VA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "acorn": "^8.12.1",
-        "webpack-sources": "^3.2.3",
         "webpack-virtual-modules": "^0.6.2"
       },
       "engines": {
         "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "webpack-sources": "^3"
+      },
+      "peerDependenciesMeta": {
+        "webpack-sources": {
+          "optional": true
+        }
       }
     },
     "node_modules/unplugin-vue-components/node_modules/webpack-virtual-modules": {
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index caf6289a61..35613d1482 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -6682,9 +6682,9 @@
       "license": "ISC"
     },
     "node_modules/postcss": {
-      "version": "8.4.44",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.44.tgz",
-      "integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==",
+      "version": "8.4.45",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz",
+      "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==",
       "dev": true,
       "funding": [
         {
@@ -7968,9 +7968,9 @@
       }
     },
     "node_modules/vue-component-type-helpers": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.1.4.tgz",
-      "integrity": "sha512-aVqB3KxwpM76cYRkpnezl1J62E/1omzHQfx1yuz7zcbxmzmP/PeSgI20NEmkdeGnjZPVzm0V9fB4ZyRu5BBj4A==",
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.1.6.tgz",
+      "integrity": "sha512-ng11B8B/ZADUMMOsRbqv0arc442q7lifSubD0v8oDXIFoMg/mXwAPUunrroIDkY+mcD0dHKccdaznSVp8EoX3w==",
       "dev": true,
       "license": "MIT"
     },
diff --git a/print/package-lock.json b/print/package-lock.json
index db05cdce1f..196449e7e9 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -1528,46 +1528,6 @@
         "url": "https://github.com/sponsors/kazupon"
       }
     },
-    "node_modules/@intlify/unplugin-vue-i18n": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-3.0.1.tgz",
-      "integrity": "sha512-q1zJhA/WpoLBzAAuKA5/AEp0e+bMOM10ll/HxT4g1VAw/9JhC4TTobP9KobKH90JMZ4U2daLFlYQfKNd29lpqw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@intlify/bundle-utils": "^7.4.0",
-        "@intlify/shared": "^9.4.0",
-        "@rollup/pluginutils": "^5.1.0",
-        "@vue/compiler-sfc": "^3.2.47",
-        "debug": "^4.3.3",
-        "fast-glob": "^3.2.12",
-        "js-yaml": "^4.1.0",
-        "json5": "^2.2.3",
-        "pathe": "^1.0.0",
-        "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.2",
-        "unplugin": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 14.16"
-      },
-      "peerDependencies": {
-        "petite-vue-i18n": "*",
-        "vue-i18n": "*",
-        "vue-i18n-bridge": "*"
-      },
-      "peerDependenciesMeta": {
-        "petite-vue-i18n": {
-          "optional": true
-        },
-        "vue-i18n": {
-          "optional": true
-        },
-        "vue-i18n-bridge": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/@intlify/utils": {
       "version": "0.12.0",
       "resolved": "https://registry.npmjs.org/@intlify/utils/-/utils-0.12.0.tgz",
@@ -2747,6 +2707,46 @@
         "node": "^14.16.0 || >=16.11.0"
       }
     },
+    "node_modules/@nuxtjs/i18n/node_modules/@intlify/unplugin-vue-i18n": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-3.0.1.tgz",
+      "integrity": "sha512-q1zJhA/WpoLBzAAuKA5/AEp0e+bMOM10ll/HxT4g1VAw/9JhC4TTobP9KobKH90JMZ4U2daLFlYQfKNd29lpqw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/bundle-utils": "^7.4.0",
+        "@intlify/shared": "^9.4.0",
+        "@rollup/pluginutils": "^5.1.0",
+        "@vue/compiler-sfc": "^3.2.47",
+        "debug": "^4.3.3",
+        "fast-glob": "^3.2.12",
+        "js-yaml": "^4.1.0",
+        "json5": "^2.2.3",
+        "pathe": "^1.0.0",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2",
+        "unplugin": "^1.1.0"
+      },
+      "engines": {
+        "node": ">= 14.16"
+      },
+      "peerDependencies": {
+        "petite-vue-i18n": "*",
+        "vue-i18n": "*",
+        "vue-i18n-bridge": "*"
+      },
+      "peerDependenciesMeta": {
+        "petite-vue-i18n": {
+          "optional": true
+        },
+        "vue-i18n": {
+          "optional": true
+        },
+        "vue-i18n-bridge": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@nuxtjs/tailwindcss": {
       "version": "6.12.1",
       "resolved": "https://registry.npmjs.org/@nuxtjs/tailwindcss/-/tailwindcss-6.12.1.tgz",
@@ -5202,9 +5202,9 @@
       }
     },
     "node_modules/@vue/devtools-shared": {
-      "version": "7.4.3",
-      "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.4.3.tgz",
-      "integrity": "sha512-gcrQtLteurIh3A9QC0x3Q5TvAp599Pcr9aBbbBd9jAICxUpX2qcXlDczQauWuRWmZwXeCI6i7OfrTVd/QMMgqA==",
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.4.4.tgz",
+      "integrity": "sha512-yeJULXFHOKIm8yL2JFO050a9ztTVqOCKTqN9JHFxGTJN0b+gjtfn6zC+FfyHUgjwCwf6E3hfKrlohtthcqoYqw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6837,13 +6837,13 @@
       }
     },
     "node_modules/cssnano": {
-      "version": "7.0.5",
-      "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.5.tgz",
-      "integrity": "sha512-Aq0vqBLtpTT5Yxj+hLlLfNPFuRQCDIjx5JQAhhaedQKLNDvDGeVziF24PS+S1f0Z5KCxWvw0QVI3VNHNBITxVQ==",
+      "version": "7.0.6",
+      "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-7.0.6.tgz",
+      "integrity": "sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "cssnano-preset-default": "^7.0.5",
+        "cssnano-preset-default": "^7.0.6",
         "lilconfig": "^3.1.2"
       },
       "engines": {
@@ -6858,28 +6858,28 @@
       }
     },
     "node_modules/cssnano-preset-default": {
-      "version": "7.0.5",
-      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.5.tgz",
-      "integrity": "sha512-Jbzja0xaKwc5JzxPQoc+fotKpYtWEu4wQLMQe29CM0FjjdRjA4omvbGHl2DTGgARKxSTpPssBsok+ixv8uTBqw==",
+      "version": "7.0.6",
+      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-7.0.6.tgz",
+      "integrity": "sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "browserslist": "^4.23.3",
         "css-declaration-sorter": "^7.2.0",
         "cssnano-utils": "^5.0.0",
-        "postcss-calc": "^10.0.1",
+        "postcss-calc": "^10.0.2",
         "postcss-colormin": "^7.0.2",
-        "postcss-convert-values": "^7.0.3",
-        "postcss-discard-comments": "^7.0.2",
+        "postcss-convert-values": "^7.0.4",
+        "postcss-discard-comments": "^7.0.3",
         "postcss-discard-duplicates": "^7.0.1",
         "postcss-discard-empty": "^7.0.0",
         "postcss-discard-overridden": "^7.0.0",
-        "postcss-merge-longhand": "^7.0.3",
-        "postcss-merge-rules": "^7.0.3",
+        "postcss-merge-longhand": "^7.0.4",
+        "postcss-merge-rules": "^7.0.4",
         "postcss-minify-font-values": "^7.0.0",
         "postcss-minify-gradients": "^7.0.0",
         "postcss-minify-params": "^7.0.2",
-        "postcss-minify-selectors": "^7.0.3",
+        "postcss-minify-selectors": "^7.0.4",
         "postcss-normalize-charset": "^7.0.0",
         "postcss-normalize-display-values": "^7.0.0",
         "postcss-normalize-positions": "^7.0.0",
@@ -6893,7 +6893,7 @@
         "postcss-reduce-initial": "^7.0.2",
         "postcss-reduce-transforms": "^7.0.0",
         "postcss-svgo": "^7.0.1",
-        "postcss-unique-selectors": "^7.0.2"
+        "postcss-unique-selectors": "^7.0.3"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -7748,13 +7748,12 @@
       }
     },
     "node_modules/eslint-plugin-import-x": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.1.1.tgz",
-      "integrity": "sha512-dBEM8fACIFNt4H7GoOaRmnH6evJW6JSTJTYYgmRd3vI4geBTjgDM/JyUDKUwIw0HDSyI+u7Vs3vFRXUo/BOAtA==",
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.2.1.tgz",
+      "integrity": "sha512-WWi2GedccIJa0zXxx3WDnTgouGQTtdYK1nhXMwywbqqAgB0Ov+p1pYBsWh3VaB0bvBOwLse6OfVII7jZD9xo5Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "^8.1.0",
         "@typescript-eslint/utils": "^8.1.0",
         "debug": "^4.3.4",
         "doctrine": "^3.0.0",
@@ -13123,9 +13122,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.4.44",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.44.tgz",
-      "integrity": "sha512-Aweb9unOEpQ3ezu4Q00DPvvM2ZTUitJdNKeP/+uQgr1IBIqu574IaZoURId7BKtWMREwzKa9OgzPzezWGPWFQw==",
+      "version": "8.4.45",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz",
+      "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==",
       "funding": [
         {
           "type": "opencollective",
@@ -13201,9 +13200,9 @@
       }
     },
     "node_modules/postcss-convert-values": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.3.tgz",
-      "integrity": "sha512-yJhocjCs2SQer0uZ9lXTMOwDowbxvhwFVrZeS6NPEij/XXthl73ggUmfwVvJM+Vaj5gtCKJV1jiUu4IhAUkX/Q==",
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-7.0.4.tgz",
+      "integrity": "sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -13218,13 +13217,13 @@
       }
     },
     "node_modules/postcss-discard-comments": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.2.tgz",
-      "integrity": "sha512-/Hje9Ls1IYcB9duELO/AyDUJI6aQVY3h5Rj1ziXgaLYCTi1iVBLnjg/TS0D6NszR/kDG6I86OwLmAYe+bvJjiQ==",
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-7.0.3.tgz",
+      "integrity": "sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "postcss-selector-parser": "^6.1.1"
+        "postcss-selector-parser": "^6.1.2"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -13361,14 +13360,14 @@
       }
     },
     "node_modules/postcss-merge-longhand": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.3.tgz",
-      "integrity": "sha512-8waYomFxshdv6M9Em3QRM9MettRLDRcH2JQi2l0Z1KlYD/vhal3gbkeSES0NuACXOlZBB0V/B0AseHZaklzWOA==",
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-7.0.4.tgz",
+      "integrity": "sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "postcss-value-parser": "^4.2.0",
-        "stylehacks": "^7.0.3"
+        "stylehacks": "^7.0.4"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -13378,16 +13377,16 @@
       }
     },
     "node_modules/postcss-merge-rules": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.3.tgz",
-      "integrity": "sha512-2eSas2p3voPxNfdI5sQrvIkMaeUHpVc3EezgVs18hz/wRTQAC9U99tp9j3W5Jx9/L3qHkEDvizEx/LdnmumIvQ==",
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-7.0.4.tgz",
+      "integrity": "sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "browserslist": "^4.23.3",
         "caniuse-api": "^3.0.0",
         "cssnano-utils": "^5.0.0",
-        "postcss-selector-parser": "^6.1.1"
+        "postcss-selector-parser": "^6.1.2"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -13463,14 +13462,14 @@
       }
     },
     "node_modules/postcss-minify-selectors": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.3.tgz",
-      "integrity": "sha512-SxTgUQSgBk6wEqzQZKEv1xQYIp9UBju6no9q+npohzSdhuSICQdkqmD1UMKkZWItS3olJSJMDDEY9WOJ5oGJew==",
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-7.0.4.tgz",
+      "integrity": "sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "cssesc": "^3.0.0",
-        "postcss-selector-parser": "^6.1.1"
+        "postcss-selector-parser": "^6.1.2"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -13909,13 +13908,13 @@
       }
     },
     "node_modules/postcss-unique-selectors": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.2.tgz",
-      "integrity": "sha512-CjSam+7Vf8cflJQsHrMS0P2hmy9u0+n/P001kb5eAszLmhjMqrt/i5AqQuNFihhViwDvEAezqTmXqaYXL2ugMw==",
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-7.0.3.tgz",
+      "integrity": "sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "postcss-selector-parser": "^6.1.1"
+        "postcss-selector-parser": "^6.1.2"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -15628,14 +15627,14 @@
       "license": "MIT"
     },
     "node_modules/stylehacks": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.3.tgz",
-      "integrity": "sha512-4DqtecvI/Nd+2BCvW9YEF6lhBN5UM50IJ1R3rnEAhBwbCKf4VehRf+uqvnVArnBayjYD/WtT3g0G/HSRxWfTRg==",
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-7.0.4.tgz",
+      "integrity": "sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "browserslist": "^4.23.3",
-        "postcss-selector-parser": "^6.1.1"
+        "postcss-selector-parser": "^6.1.2"
       },
       "engines": {
         "node": "^18.12.0 || ^20.9.0 || >=22.0"
@@ -16687,18 +16686,25 @@
       }
     },
     "node_modules/unplugin": {
-      "version": "1.12.3",
-      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.12.3.tgz",
-      "integrity": "sha512-my8DH0/T/Kx33KO+6QXAqdeMYgyy0GktlOpdQjpagfHKw5DrD0ctPr7SHUyOT3g4ZVpzCQGt/qcpuoKJ/pniHA==",
+      "version": "1.13.1",
+      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.13.1.tgz",
+      "integrity": "sha512-6Kq1iSSwg7KyjcThRUks9LuqDAKvtnioxbL9iEtB9ctTyBA5OmrB8gZd/d225VJu1w3UpUsKV7eGrvf59J7+VA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "acorn": "^8.12.1",
-        "webpack-sources": "^3.2.3",
         "webpack-virtual-modules": "^0.6.2"
       },
       "engines": {
         "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "webpack-sources": "^3"
+      },
+      "peerDependenciesMeta": {
+        "webpack-sources": {
+          "optional": true
+        }
       }
     },
     "node_modules/unplugin-vue-router": {
@@ -16733,37 +16739,37 @@
       }
     },
     "node_modules/unstorage": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.10.2.tgz",
-      "integrity": "sha512-cULBcwDqrS8UhlIysUJs2Dk0Mmt8h7B0E6mtR+relW9nZvsf/u4SkAYyNliPiPW7XtFNb5u3IUMkxGxFTTRTgQ==",
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.11.1.tgz",
+      "integrity": "sha512-3NVszU4MGlO21WWnkSq0xnPVMHnMyB5DdJQyGRAg/DUZVeQjWRinLOia89iw5KGpllRtoA5+N+xnq75MAsPAOA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "anymatch": "^3.1.3",
         "chokidar": "^3.6.0",
         "destr": "^2.0.3",
-        "h3": "^1.11.1",
+        "h3": "^1.12.0",
         "listhen": "^1.7.2",
-        "lru-cache": "^10.2.0",
+        "lru-cache": "^10.4.3",
         "mri": "^1.2.0",
-        "node-fetch-native": "^1.6.2",
-        "ofetch": "^1.3.3",
-        "ufo": "^1.4.0"
+        "node-fetch-native": "^1.6.4",
+        "ofetch": "^1.3.4",
+        "ufo": "^1.5.4"
       },
       "peerDependencies": {
-        "@azure/app-configuration": "^1.5.0",
+        "@azure/app-configuration": "^1.6.0",
         "@azure/cosmos": "^4.0.0",
         "@azure/data-tables": "^13.2.2",
-        "@azure/identity": "^4.0.1",
+        "@azure/identity": "^4.2.0",
         "@azure/keyvault-secrets": "^4.8.0",
-        "@azure/storage-blob": "^12.17.0",
-        "@capacitor/preferences": "^5.0.7",
+        "@azure/storage-blob": "^12.18.0",
+        "@capacitor/preferences": "^6.0.0",
         "@netlify/blobs": "^6.5.0 || ^7.0.0",
-        "@planetscale/database": "^1.16.0",
-        "@upstash/redis": "^1.28.4",
+        "@planetscale/database": "^1.18.0",
+        "@upstash/redis": "^1.31.3",
         "@vercel/kv": "^1.0.1",
         "idb-keyval": "^6.2.1",
-        "ioredis": "^5.3.2"
+        "ioredis": "^5.4.1"
       },
       "peerDependenciesMeta": {
         "@azure/app-configuration": {
@@ -17478,9 +17484,9 @@
       }
     },
     "node_modules/vue-component-type-helpers": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.1.4.tgz",
-      "integrity": "sha512-aVqB3KxwpM76cYRkpnezl1J62E/1omzHQfx1yuz7zcbxmzmP/PeSgI20NEmkdeGnjZPVzm0V9fB4ZyRu5BBj4A==",
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.1.6.tgz",
+      "integrity": "sha512-ng11B8B/ZADUMMOsRbqv0arc442q7lifSubD0v8oDXIFoMg/mXwAPUunrroIDkY+mcD0dHKccdaznSVp8EoX3w==",
       "dev": true,
       "license": "MIT"
     },
@@ -17626,16 +17632,6 @@
         "node": ">=12"
       }
     },
-    "node_modules/webpack-sources": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
-      "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10.13.0"
-      }
-    },
     "node_modules/webpack-virtual-modules": {
       "version": "0.6.2",
       "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",

From 9ac1dac3bb6e11c099d491816f141851e2ec567d Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 4 Sep 2024 21:40:52 +0000
Subject: [PATCH 245/273] chore(deps): update dependency @types/node to
 v20.16.5

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index e388fbb36b..694e850178 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -15,7 +15,7 @@
                 "@eslint/compat": "1.1.1",
                 "@eslint/eslintrc": "3.1.0",
                 "@eslint/js": "9.9.1",
-                "@types/node": "20.16.4",
+                "@types/node": "20.16.5",
                 "eslint": "8.57.0",
                 "eslint-config-prettier": "9.1.0",
                 "eslint-plugin-n": "17.10.2",
@@ -2923,9 +2923,9 @@
             }
         },
         "node_modules/@types/node": {
-            "version": "20.16.4",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.4.tgz",
-            "integrity": "sha512-ioyQ1zK9aGEomJ45zz8S8IdzElyxhvP1RVWnPrXDf6wFaUb+kk1tEcVVJkF7RPGM0VWI7cp5U57oCPIn5iN1qg==",
+            "version": "20.16.5",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.5.tgz",
+            "integrity": "sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==",
             "license": "MIT",
             "dependencies": {
                 "undici-types": "~6.19.2"
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index a266b98270..410600e844 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -19,7 +19,7 @@
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.1",
-        "@types/node": "20.16.4",
+        "@types/node": "20.16.5",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
         "eslint-plugin-n": "17.10.2",

From 5a943e6c705fb4acdd39df72b21c521428f6c002 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 5 Sep 2024 01:51:45 +0000
Subject: [PATCH 246/273] chore(deps): update debian docker tag to v12.7

---
 .helm/ecamp3/files/db-backup-restore-image/Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.helm/ecamp3/files/db-backup-restore-image/Dockerfile b/.helm/ecamp3/files/db-backup-restore-image/Dockerfile
index 4fbb47fdbf..6a5cebc6c9 100644
--- a/.helm/ecamp3/files/db-backup-restore-image/Dockerfile
+++ b/.helm/ecamp3/files/db-backup-restore-image/Dockerfile
@@ -1,4 +1,4 @@
-FROM debian:12.6-slim
+FROM debian:12.7-slim
 
 ENV DEBIAN_FRONTEND="noninteractive"
 RUN apt-get update && \

From 554dc3cb5025c434a519b5a595c6e383a70ae1d4 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 5 Sep 2024 01:52:26 +0000
Subject: [PATCH 247/273] fix(deps): update dependency @pulumi/pulumi to
 v3.131.0

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index 694e850178..7c44ac47cc 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -8,7 +8,7 @@
             "dependencies": {
                 "@pulumi/aws": "6.50.1",
                 "@pulumi/awsx": "2.14.0",
-                "@pulumi/pulumi": "3.130.0"
+                "@pulumi/pulumi": "3.131.0"
             },
             "devDependencies": {
                 "@babel/eslint-parser": "7.25.1",
@@ -2074,9 +2074,9 @@
             }
         },
         "node_modules/@pulumi/pulumi": {
-            "version": "3.130.0",
-            "resolved": "https://registry.npmjs.org/@pulumi/pulumi/-/pulumi-3.130.0.tgz",
-            "integrity": "sha512-WsvXRfEdCz+AcuzP41ABgN5Ye3qLt4v/EVZXUT7sMHU6G8uazaLtS92tpvNp+pgeRZf9kbotCEoABXKg+d+1oQ==",
+            "version": "3.131.0",
+            "resolved": "https://registry.npmjs.org/@pulumi/pulumi/-/pulumi-3.131.0.tgz",
+            "integrity": "sha512-QNtQeav3dkU0mRdMe2TVvkBmIGkBevVvbD7/bt0fJlGoX/onzv5tysqi1GWCkXsq0FKtBtGYNpVD6wH0cqMN6g==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@grpc/grpc-js": "^1.10.1",
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 410600e844..4f5fa5d3b8 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -10,7 +10,7 @@
         "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{json,md,mjs,ts}"
     },
     "dependencies": {
-        "@pulumi/pulumi": "3.130.0",
+        "@pulumi/pulumi": "3.131.0",
         "@pulumi/aws": "6.50.1",
         "@pulumi/awsx": "2.14.0"
     },

From 25420b8a6afe24733b45fc0a5b02221976c12f3a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 5 Sep 2024 09:59:53 +0000
Subject: [PATCH 248/273] chore(deps): update dependency @nuxtjs/i18n to v8.5.2

---
 print/package-lock.json | 88 ++++++++++++++++++++---------------------
 print/package.json      |  2 +-
 2 files changed, 45 insertions(+), 45 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index a6aca03c51..7e01bcab0b 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -26,7 +26,7 @@
         "@eslint/js": "9.9.1",
         "@nuxt/eslint": "0.5.5",
         "@nuxt/eslint-config": "0.5.5",
-        "@nuxtjs/i18n": "8.5.1",
+        "@nuxtjs/i18n": "8.5.2",
         "@nuxtjs/tailwindcss": "6.12.1",
         "@tailwindcss/typography": "0.5.15",
         "@typescript-eslint/eslint-plugin": "8.4.0",
@@ -1528,6 +1528,46 @@
         "url": "https://github.com/sponsors/kazupon"
       }
     },
+    "node_modules/@intlify/unplugin-vue-i18n": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-3.0.1.tgz",
+      "integrity": "sha512-q1zJhA/WpoLBzAAuKA5/AEp0e+bMOM10ll/HxT4g1VAw/9JhC4TTobP9KobKH90JMZ4U2daLFlYQfKNd29lpqw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@intlify/bundle-utils": "^7.4.0",
+        "@intlify/shared": "^9.4.0",
+        "@rollup/pluginutils": "^5.1.0",
+        "@vue/compiler-sfc": "^3.2.47",
+        "debug": "^4.3.3",
+        "fast-glob": "^3.2.12",
+        "js-yaml": "^4.1.0",
+        "json5": "^2.2.3",
+        "pathe": "^1.0.0",
+        "picocolors": "^1.0.0",
+        "source-map-js": "^1.0.2",
+        "unplugin": "^1.1.0"
+      },
+      "engines": {
+        "node": ">= 14.16"
+      },
+      "peerDependencies": {
+        "petite-vue-i18n": "*",
+        "vue-i18n": "*",
+        "vue-i18n-bridge": "*"
+      },
+      "peerDependenciesMeta": {
+        "petite-vue-i18n": {
+          "optional": true
+        },
+        "vue-i18n": {
+          "optional": true
+        },
+        "vue-i18n-bridge": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@intlify/utils": {
       "version": "0.12.0",
       "resolved": "https://registry.npmjs.org/@intlify/utils/-/utils-0.12.0.tgz",
@@ -2674,9 +2714,9 @@
       }
     },
     "node_modules/@nuxtjs/i18n": {
-      "version": "8.5.1",
-      "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.5.1.tgz",
-      "integrity": "sha512-rU+cGwX1lr5Jyd8lS1ulyTf0adGk6Q+G308Ig0SCrOTV07rHClkoUMpqAAo1Lc85C3Bgea2bFmseLYSfnVMm1A==",
+      "version": "8.5.2",
+      "resolved": "https://registry.npmjs.org/@nuxtjs/i18n/-/i18n-8.5.2.tgz",
+      "integrity": "sha512-x5AZAd2sfvL3cYfpwCMQn7DyiwWCTPZSciiMWcfWQunin1V5toyzQRKjztvA6lh2iVOyeZF9bJpCkHG+UkOlkA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -2707,46 +2747,6 @@
         "node": "^14.16.0 || >=16.11.0"
       }
     },
-    "node_modules/@nuxtjs/i18n/node_modules/@intlify/unplugin-vue-i18n": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@intlify/unplugin-vue-i18n/-/unplugin-vue-i18n-3.0.1.tgz",
-      "integrity": "sha512-q1zJhA/WpoLBzAAuKA5/AEp0e+bMOM10ll/HxT4g1VAw/9JhC4TTobP9KobKH90JMZ4U2daLFlYQfKNd29lpqw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@intlify/bundle-utils": "^7.4.0",
-        "@intlify/shared": "^9.4.0",
-        "@rollup/pluginutils": "^5.1.0",
-        "@vue/compiler-sfc": "^3.2.47",
-        "debug": "^4.3.3",
-        "fast-glob": "^3.2.12",
-        "js-yaml": "^4.1.0",
-        "json5": "^2.2.3",
-        "pathe": "^1.0.0",
-        "picocolors": "^1.0.0",
-        "source-map-js": "^1.0.2",
-        "unplugin": "^1.1.0"
-      },
-      "engines": {
-        "node": ">= 14.16"
-      },
-      "peerDependencies": {
-        "petite-vue-i18n": "*",
-        "vue-i18n": "*",
-        "vue-i18n-bridge": "*"
-      },
-      "peerDependenciesMeta": {
-        "petite-vue-i18n": {
-          "optional": true
-        },
-        "vue-i18n": {
-          "optional": true
-        },
-        "vue-i18n-bridge": {
-          "optional": true
-        }
-      }
-    },
     "node_modules/@nuxtjs/tailwindcss": {
       "version": "6.12.1",
       "resolved": "https://registry.npmjs.org/@nuxtjs/tailwindcss/-/tailwindcss-6.12.1.tgz",
diff --git a/print/package.json b/print/package.json
index eaf5362669..a2e29947cb 100644
--- a/print/package.json
+++ b/print/package.json
@@ -35,7 +35,7 @@
     "@eslint/js": "9.9.1",
     "@nuxt/eslint": "0.5.5",
     "@nuxt/eslint-config": "0.5.5",
-    "@nuxtjs/i18n": "8.5.1",
+    "@nuxtjs/i18n": "8.5.2",
     "@nuxtjs/tailwindcss": "6.12.1",
     "@tailwindcss/typography": "0.5.15",
     "@typescript-eslint/eslint-plugin": "8.4.0",

From fffa0f23fa582c3845fc21981feefee52fe44aa9 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 5 Sep 2024 10:00:24 +0000
Subject: [PATCH 249/273] chore(deps): update pulumi/pulumi-nodejs docker tag
 to v3.131.0

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 624734a8c8..096edf81f3 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -1,6 +1,6 @@
 services:
   aws-setup:
-    image: pulumi/pulumi-nodejs:3.130.0
+    image: pulumi/pulumi-nodejs:3.131.0
     container_name: 'ecamp3-aws-setup'
     volumes:
       - ../../.prettierrc:/.prettierrc:delegated

From 03ed49ee8fa393cee379cb3750d0881ac0a8a771 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 5 Sep 2024 12:46:52 +0000
Subject: [PATCH 250/273] chore(deps): update helm release oauth2-proxy to
 v7.7.16

---
 .ops/ops-dashboard/Chart.lock | 10 +++++-----
 .ops/ops-dashboard/Chart.yaml |  6 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/.ops/ops-dashboard/Chart.lock b/.ops/ops-dashboard/Chart.lock
index 2eb3d88322..f534a2c826 100644
--- a/.ops/ops-dashboard/Chart.lock
+++ b/.ops/ops-dashboard/Chart.lock
@@ -1,15 +1,15 @@
 dependencies:
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.15
+  version: 7.7.16
 - name: kubernetes-dashboard
   repository: https://kubernetes.github.io/dashboard/
   version: 7.5.0
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.15
+  version: 7.7.16
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.15
-digest: sha256:e7a74219951fcc05ae8bd90bdfa254f693bd5f305b69ff3d141b469120994d96
-generated: "2024-09-04T19:11:59.729709051Z"
+  version: 7.7.16
+digest: sha256:3dba6168c5aac2abad258ca513a62932ec474f551357d0a03989dd32eea5f27c
+generated: "2024-09-05T12:46:38.906706795Z"
diff --git a/.ops/ops-dashboard/Chart.yaml b/.ops/ops-dashboard/Chart.yaml
index 3bb99c6917..ff6c2a56ac 100644
--- a/.ops/ops-dashboard/Chart.yaml
+++ b/.ops/ops-dashboard/Chart.yaml
@@ -26,16 +26,16 @@ appVersion: 0.1.0
 dependencies:
   - name: oauth2-proxy
     alias: grafana-proxy
-    version: 7.7.15
+    version: 7.7.16
     repository: https://oauth2-proxy.github.io/manifests
   - name: kubernetes-dashboard
     version: 7.5.0
     repository: https://kubernetes.github.io/dashboard/
   - name: oauth2-proxy
     alias: kubernetes-dashboard-proxy
-    version: 7.7.15
+    version: 7.7.16
     repository: https://oauth2-proxy.github.io/manifests
   - name: oauth2-proxy
     alias: logging-proxy
-    version: 7.7.15
+    version: 7.7.16
     repository: https://oauth2-proxy.github.io/manifests

From 4bffa4f86bdd42b27e3e3b7d175bcd09ecb3409a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 5 Sep 2024 14:18:50 +0000
Subject: [PATCH 251/273] chore(deps): update vue-minor-print-pdf to v3.5.2

---
 pdf/package-lock.json   | 118 ++++++++++++++++++++--------------------
 pdf/package.json        |  12 ++--
 print/package-lock.json | 118 ++++++++++++++++++++--------------------
 print/package.json      |  12 ++--
 4 files changed, 130 insertions(+), 130 deletions(-)

diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index c2673697cb..cce27e9ed7 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -6,7 +6,7 @@
     "": {
       "name": "@ecamp3/client-pdf",
       "dependencies": {
-        "@vue/runtime-core": "3.5.1",
+        "@vue/runtime-core": "3.5.2",
         "html-entities": "2.5.2",
         "html-parse-stringify": "3.0.1"
       },
@@ -20,12 +20,12 @@
         "@vitejs/plugin-vue": "5.1.3",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/babel-preset-app": "5.0.8",
-        "@vue/compiler-dom": "3.5.1",
-        "@vue/compiler-sfc": "3.5.1",
+        "@vue/compiler-dom": "3.5.2",
+        "@vue/compiler-sfc": "3.5.2",
         "@vue/eslint-config-prettier": "9.0.0",
-        "@vue/runtime-dom": "3.5.1",
-        "@vue/server-renderer": "3.5.1",
-        "@vue/shared": "3.5.1",
+        "@vue/runtime-dom": "3.5.2",
+        "@vue/server-renderer": "3.5.2",
+        "@vue/shared": "3.5.2",
         "@vue/test-utils": "2.4.6",
         "css": "3.0.0",
         "dayjs": "1.11.13",
@@ -3584,42 +3584,42 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.1.tgz",
-      "integrity": "sha512-WdjF+NSgFYdWttHevHw5uaJFtKPalhmxhlu2uREj8cLP0uyKKIR60/JvSZNTp0x+NSd63iTiORQTx3+tt55NWQ==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.2.tgz",
+      "integrity": "sha512-1aP7FL2GkqfcskHWGg3lfWQpJnrmewKc+rNJ/hq9WNaAw4BEyJ5QbNChnqmbw+tJ409zdy1XWmUeXXMrCKJcQQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.1",
+        "@vue/shared": "3.5.2",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.1.tgz",
-      "integrity": "sha512-Ao23fB1lINo18HLCbJVApvzd9OQe8MgmQSgyY5+umbWj2w92w9KykVmJ4Iv2US5nak3ixc2B+7Km7JTNhQ8kSQ==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.2.tgz",
+      "integrity": "sha512-QY4DpT8ZIUyu/ZA5gErpSEDocGNEbHmpkZIC/d5jbp/rUF0iOJNigAy3HCCKc0PMMhDlrcysO3ufQ6Ab4MpEcQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.1",
-        "@vue/shared": "3.5.1"
+        "@vue/compiler-core": "3.5.2",
+        "@vue/shared": "3.5.2"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.1.tgz",
-      "integrity": "sha512-DFizMNH8eDglLhlfwJ0+ciBsztaYe3fY/zcZjrqL1ljXvUw/UpC84M1d7HpBTCW68SNqZyIxrs1XWmf+73Y65w==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.2.tgz",
+      "integrity": "sha512-vErEtybSU290LbMW+ChYllI9tNJEdTW1oU+8cZWINZyjlWeTSa9YqDl4/pZJSnozOI+HmcaC1Vz2eFKmXNSXZA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.1",
-        "@vue/compiler-dom": "3.5.1",
-        "@vue/compiler-ssr": "3.5.1",
-        "@vue/shared": "3.5.1",
+        "@vue/compiler-core": "3.5.2",
+        "@vue/compiler-dom": "3.5.2",
+        "@vue/compiler-ssr": "3.5.2",
+        "@vue/shared": "3.5.2",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.44",
@@ -3627,14 +3627,14 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.1.tgz",
-      "integrity": "sha512-C1hpSHQgRM8bg+5XWWD7CkFaVpSn9wZHCLRd10AmxqrH17d4EMP6+XcZpwBOM7H1jeStU5naEapZZWX0kso1tQ==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.2.tgz",
+      "integrity": "sha512-vMtA4tQK/AM3UAYJsmouQzQpgG+h9TKiD5BV+Zt+ZyAMdicxzSEEFGWf/CykRnDpqj9fMfIHPhOezJVNxiXe2A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.1",
-        "@vue/shared": "3.5.1"
+        "@vue/compiler-dom": "3.5.2",
+        "@vue/shared": "3.5.2"
       }
     },
     "node_modules/@vue/eslint-config-prettier": {
@@ -3653,55 +3653,55 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.1.tgz",
-      "integrity": "sha512-aFE1nMDfbG7V+U5vdOk/NXxH/WX78XuAfX59vWmCM7Ao4lieoc83RkzOAWun61sQXlzNZ4IgROovFBHg+Iz1+Q==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.2.tgz",
+      "integrity": "sha512-lJwWL5bNht+2vIwU/+lnGdH+FKFxzz6z8WkoIJityPLiasWU+HDUvEsC7gm3JFwbTf7Kk+Nr9kJMaPy0HXwwxQ==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.5.1"
+        "@vue/shared": "3.5.2"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.1.tgz",
-      "integrity": "sha512-Ce92CCholNRHR3ZtzpRp/7CDGIPFxQ7ElXt9iH91ilK5eOrUv3Z582NWJesuM3aYX71BujVG5/4ypUxigGNxjA==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.2.tgz",
+      "integrity": "sha512-oU+i9sJjGEMfEhlrJ7SZv7CdSIgUNyBHnWHa0SqU2RF48V3/ATajzpWq1/DkiVJ1mtx+cQFAMKs8s/3cB3YlLQ==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.1",
-        "@vue/shared": "3.5.1"
+        "@vue/reactivity": "3.5.2",
+        "@vue/shared": "3.5.2"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.1.tgz",
-      "integrity": "sha512-B/fUJfBLp5PwE0EWNfBYnA4JUea8Yufb3wN8fN0/HzaqBdkiRHh4sFHOjWqIY8GS75gj//8VqeEqhcU6yUjIkA==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.2.tgz",
+      "integrity": "sha512-2qvysn+oR0QnFKaWZxQ90iVpWAK/WPpYmODHCv24IDXjsBrdHbjLBj9s6YBdPaMuQhs0LNsmhsgZYZBkszLg6g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.1",
-        "@vue/runtime-core": "3.5.1",
-        "@vue/shared": "3.5.1",
+        "@vue/reactivity": "3.5.2",
+        "@vue/runtime-core": "3.5.2",
+        "@vue/shared": "3.5.2",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.1.tgz",
-      "integrity": "sha512-C5V/fjQTitgVaRNH5wCoHynaWysjZ+VH68drNsAvQYg4ArHsZUQNz0nHoEWRj41nzqkVn2RUlnWaEOTl2o1Ppg==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.2.tgz",
+      "integrity": "sha512-3POhYCA8KfbmuDuUiNbMXnpdh9pwE4SvAqo7VvACjklLkf3AaMkY3TvV7APeEa/WQezrnL+E4X2ASpJsKeS4cQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.5.1",
-        "@vue/shared": "3.5.1"
+        "@vue/compiler-ssr": "3.5.2",
+        "@vue/shared": "3.5.2"
       },
       "peerDependencies": {
-        "vue": "3.5.1"
+        "vue": "3.5.2"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.1.tgz",
-      "integrity": "sha512-NdcTRoO4KuW2RSFgpE2c+E/R/ZHaRzWPxAGxhmxZaaqLh6nYCXx7lc9a88ioqOCxCaV2SFJmujkxbUScW7dNsQ==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.2.tgz",
+      "integrity": "sha512-Ce89WNFBzcDca/AgFTxgX4/K4iAyF7oFIp8Z5aBbFBNbtpwnQr+5pZOoHndxnjE2h+YFcipVMzs9UL11XB6dwA==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -7945,18 +7945,18 @@
       }
     },
     "node_modules/vue": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.1.tgz",
-      "integrity": "sha512-k4UNnbPOEskodSxMtv+B9GljdB0C9ubZDOmW6vnXVGIfMqmEsY2+ohasjGguhGkMkrcP/oOrbH0dSD41x5JQFw==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.2.tgz",
+      "integrity": "sha512-w1YB4lAwC9ByH6AnFY0JvZF+y70Usul9jDfKIKtM5xA97q/JPS5R7mqq0fhA6D2PQxYPZdgb5jzFKLyOga5pnw==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
-        "@vue/compiler-dom": "3.5.1",
-        "@vue/compiler-sfc": "3.5.1",
-        "@vue/runtime-dom": "3.5.1",
-        "@vue/server-renderer": "3.5.1",
-        "@vue/shared": "3.5.1"
+        "@vue/compiler-dom": "3.5.2",
+        "@vue/compiler-sfc": "3.5.2",
+        "@vue/runtime-dom": "3.5.2",
+        "@vue/server-renderer": "3.5.2",
+        "@vue/shared": "3.5.2"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/pdf/package.json b/pdf/package.json
index c515afd478..9356b09e3b 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -17,7 +17,7 @@
     "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json,mjs}"
   },
   "dependencies": {
-    "@vue/runtime-core": "3.5.1",
+    "@vue/runtime-core": "3.5.2",
     "html-entities": "2.5.2",
     "html-parse-stringify": "3.0.1"
   },
@@ -40,12 +40,12 @@
     "@vitejs/plugin-vue": "5.1.3",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/babel-preset-app": "5.0.8",
-    "@vue/compiler-dom": "3.5.1",
-    "@vue/compiler-sfc": "3.5.1",
+    "@vue/compiler-dom": "3.5.2",
+    "@vue/compiler-sfc": "3.5.2",
     "@vue/eslint-config-prettier": "9.0.0",
-    "@vue/runtime-dom": "3.5.1",
-    "@vue/server-renderer": "3.5.1",
-    "@vue/shared": "3.5.1",
+    "@vue/runtime-dom": "3.5.2",
+    "@vue/server-renderer": "3.5.2",
+    "@vue/shared": "3.5.2",
     "@vue/test-utils": "2.4.6",
     "css": "3.0.0",
     "dayjs": "1.11.13",
diff --git a/print/package-lock.json b/print/package-lock.json
index a6aca03c51..f999253b1b 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -31,11 +31,11 @@
         "@tailwindcss/typography": "0.5.15",
         "@typescript-eslint/eslint-plugin": "8.4.0",
         "@vitest/coverage-v8": "2.0.5",
-        "@vue/compiler-dom": "3.5.1",
-        "@vue/compiler-sfc": "3.5.1",
-        "@vue/runtime-dom": "3.5.1",
-        "@vue/server-renderer": "3.5.1",
-        "@vue/shared": "3.5.1",
+        "@vue/compiler-dom": "3.5.2",
+        "@vue/compiler-sfc": "3.5.2",
+        "@vue/runtime-dom": "3.5.2",
+        "@vue/server-renderer": "3.5.2",
+        "@vue/shared": "3.5.2",
         "@vue/test-utils": "2.4.6",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
@@ -50,7 +50,7 @@
         "vite-plugin-eslint2": "4.4.0",
         "vite-svg-loader": "5.1.0",
         "vitest": "2.0.5",
-        "vue": "3.5.1"
+        "vue": "3.5.2"
       }
     },
     "node_modules/@alloc/quick-lru": {
@@ -5084,13 +5084,13 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.1.tgz",
-      "integrity": "sha512-WdjF+NSgFYdWttHevHw5uaJFtKPalhmxhlu2uREj8cLP0uyKKIR60/JvSZNTp0x+NSd63iTiORQTx3+tt55NWQ==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.2.tgz",
+      "integrity": "sha512-1aP7FL2GkqfcskHWGg3lfWQpJnrmewKc+rNJ/hq9WNaAw4BEyJ5QbNChnqmbw+tJ409zdy1XWmUeXXMrCKJcQQ==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.1",
+        "@vue/shared": "3.5.2",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
@@ -5103,26 +5103,26 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.1.tgz",
-      "integrity": "sha512-Ao23fB1lINo18HLCbJVApvzd9OQe8MgmQSgyY5+umbWj2w92w9KykVmJ4Iv2US5nak3ixc2B+7Km7JTNhQ8kSQ==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.2.tgz",
+      "integrity": "sha512-QY4DpT8ZIUyu/ZA5gErpSEDocGNEbHmpkZIC/d5jbp/rUF0iOJNigAy3HCCKc0PMMhDlrcysO3ufQ6Ab4MpEcQ==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.1",
-        "@vue/shared": "3.5.1"
+        "@vue/compiler-core": "3.5.2",
+        "@vue/shared": "3.5.2"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.1.tgz",
-      "integrity": "sha512-DFizMNH8eDglLhlfwJ0+ciBsztaYe3fY/zcZjrqL1ljXvUw/UpC84M1d7HpBTCW68SNqZyIxrs1XWmf+73Y65w==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.2.tgz",
+      "integrity": "sha512-vErEtybSU290LbMW+ChYllI9tNJEdTW1oU+8cZWINZyjlWeTSa9YqDl4/pZJSnozOI+HmcaC1Vz2eFKmXNSXZA==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.1",
-        "@vue/compiler-dom": "3.5.1",
-        "@vue/compiler-ssr": "3.5.1",
-        "@vue/shared": "3.5.1",
+        "@vue/compiler-core": "3.5.2",
+        "@vue/compiler-dom": "3.5.2",
+        "@vue/compiler-ssr": "3.5.2",
+        "@vue/shared": "3.5.2",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.44",
@@ -5136,13 +5136,13 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.1.tgz",
-      "integrity": "sha512-C1hpSHQgRM8bg+5XWWD7CkFaVpSn9wZHCLRd10AmxqrH17d4EMP6+XcZpwBOM7H1jeStU5naEapZZWX0kso1tQ==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.2.tgz",
+      "integrity": "sha512-vMtA4tQK/AM3UAYJsmouQzQpgG+h9TKiD5BV+Zt+ZyAMdicxzSEEFGWf/CykRnDpqj9fMfIHPhOezJVNxiXe2A==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.1",
-        "@vue/shared": "3.5.1"
+        "@vue/compiler-dom": "3.5.2",
+        "@vue/shared": "3.5.2"
       }
     },
     "node_modules/@vue/devtools-api": {
@@ -5212,53 +5212,53 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.1.tgz",
-      "integrity": "sha512-aFE1nMDfbG7V+U5vdOk/NXxH/WX78XuAfX59vWmCM7Ao4lieoc83RkzOAWun61sQXlzNZ4IgROovFBHg+Iz1+Q==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.2.tgz",
+      "integrity": "sha512-lJwWL5bNht+2vIwU/+lnGdH+FKFxzz6z8WkoIJityPLiasWU+HDUvEsC7gm3JFwbTf7Kk+Nr9kJMaPy0HXwwxQ==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.5.1"
+        "@vue/shared": "3.5.2"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.1.tgz",
-      "integrity": "sha512-Ce92CCholNRHR3ZtzpRp/7CDGIPFxQ7ElXt9iH91ilK5eOrUv3Z582NWJesuM3aYX71BujVG5/4ypUxigGNxjA==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.2.tgz",
+      "integrity": "sha512-oU+i9sJjGEMfEhlrJ7SZv7CdSIgUNyBHnWHa0SqU2RF48V3/ATajzpWq1/DkiVJ1mtx+cQFAMKs8s/3cB3YlLQ==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.1",
-        "@vue/shared": "3.5.1"
+        "@vue/reactivity": "3.5.2",
+        "@vue/shared": "3.5.2"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.1.tgz",
-      "integrity": "sha512-B/fUJfBLp5PwE0EWNfBYnA4JUea8Yufb3wN8fN0/HzaqBdkiRHh4sFHOjWqIY8GS75gj//8VqeEqhcU6yUjIkA==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.2.tgz",
+      "integrity": "sha512-2qvysn+oR0QnFKaWZxQ90iVpWAK/WPpYmODHCv24IDXjsBrdHbjLBj9s6YBdPaMuQhs0LNsmhsgZYZBkszLg6g==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.1",
-        "@vue/runtime-core": "3.5.1",
-        "@vue/shared": "3.5.1",
+        "@vue/reactivity": "3.5.2",
+        "@vue/runtime-core": "3.5.2",
+        "@vue/shared": "3.5.2",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.1.tgz",
-      "integrity": "sha512-C5V/fjQTitgVaRNH5wCoHynaWysjZ+VH68drNsAvQYg4ArHsZUQNz0nHoEWRj41nzqkVn2RUlnWaEOTl2o1Ppg==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.2.tgz",
+      "integrity": "sha512-3POhYCA8KfbmuDuUiNbMXnpdh9pwE4SvAqo7VvACjklLkf3AaMkY3TvV7APeEa/WQezrnL+E4X2ASpJsKeS4cQ==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.5.1",
-        "@vue/shared": "3.5.1"
+        "@vue/compiler-ssr": "3.5.2",
+        "@vue/shared": "3.5.2"
       },
       "peerDependencies": {
-        "vue": "3.5.1"
+        "vue": "3.5.2"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.1.tgz",
-      "integrity": "sha512-NdcTRoO4KuW2RSFgpE2c+E/R/ZHaRzWPxAGxhmxZaaqLh6nYCXx7lc9a88ioqOCxCaV2SFJmujkxbUScW7dNsQ==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.2.tgz",
+      "integrity": "sha512-Ce89WNFBzcDca/AgFTxgX4/K4iAyF7oFIp8Z5aBbFBNbtpwnQr+5pZOoHndxnjE2h+YFcipVMzs9UL11XB6dwA==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -17453,16 +17453,16 @@
       "license": "MIT"
     },
     "node_modules/vue": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.1.tgz",
-      "integrity": "sha512-k4UNnbPOEskodSxMtv+B9GljdB0C9ubZDOmW6vnXVGIfMqmEsY2+ohasjGguhGkMkrcP/oOrbH0dSD41x5JQFw==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.2.tgz",
+      "integrity": "sha512-w1YB4lAwC9ByH6AnFY0JvZF+y70Usul9jDfKIKtM5xA97q/JPS5R7mqq0fhA6D2PQxYPZdgb5jzFKLyOga5pnw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.1",
-        "@vue/compiler-sfc": "3.5.1",
-        "@vue/runtime-dom": "3.5.1",
-        "@vue/server-renderer": "3.5.1",
-        "@vue/shared": "3.5.1"
+        "@vue/compiler-dom": "3.5.2",
+        "@vue/compiler-sfc": "3.5.2",
+        "@vue/runtime-dom": "3.5.2",
+        "@vue/server-renderer": "3.5.2",
+        "@vue/shared": "3.5.2"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/print/package.json b/print/package.json
index eaf5362669..85cb8072fc 100644
--- a/print/package.json
+++ b/print/package.json
@@ -40,11 +40,11 @@
     "@tailwindcss/typography": "0.5.15",
     "@typescript-eslint/eslint-plugin": "8.4.0",
     "@vitest/coverage-v8": "2.0.5",
-    "@vue/compiler-dom": "3.5.1",
-    "@vue/compiler-sfc": "3.5.1",
-    "@vue/runtime-dom": "3.5.1",
-    "@vue/server-renderer": "3.5.1",
-    "@vue/shared": "3.5.1",
+    "@vue/compiler-dom": "3.5.2",
+    "@vue/compiler-sfc": "3.5.2",
+    "@vue/runtime-dom": "3.5.2",
+    "@vue/server-renderer": "3.5.2",
+    "@vue/shared": "3.5.2",
     "@vue/test-utils": "2.4.6",
     "eslint": "8.57.0",
     "eslint-config-prettier": "9.1.0",
@@ -59,6 +59,6 @@
     "vite-plugin-eslint2": "4.4.0",
     "vite-svg-loader": "5.1.0",
     "vitest": "2.0.5",
-    "vue": "3.5.1"
+    "vue": "3.5.2"
   }
 }

From d222e5ff04e8bf2d1e0a52bac2a92470af9babe9 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 5 Sep 2024 18:37:34 +0000
Subject: [PATCH 252/273] chore(deps): update dependency @nuxt/eslint to v0.5.6

---
 print/package-lock.json | 73 +++++++++++++++++++++++++++++++++++++----
 print/package.json      |  2 +-
 2 files changed, 67 insertions(+), 8 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index cc4990a07f..0cdde74d13 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -24,7 +24,7 @@
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.1",
-        "@nuxt/eslint": "0.5.5",
+        "@nuxt/eslint": "0.5.6",
         "@nuxt/eslint-config": "0.5.5",
         "@nuxtjs/i18n": "8.5.2",
         "@nuxtjs/tailwindcss": "6.12.1",
@@ -2060,17 +2060,17 @@
       }
     },
     "node_modules/@nuxt/eslint": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint/-/eslint-0.5.5.tgz",
-      "integrity": "sha512-QfSPHNyZdRNKmjMcvSNK/kP7lZvW+u4sCazCbcsHRm+FD+LFcAeawZAS0qOwMoPxuaQMP/HR2xzxOZN+u1XFhA==",
+      "version": "0.5.6",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint/-/eslint-0.5.6.tgz",
+      "integrity": "sha512-kW9+vyFBSSCYY1oaHhtMZPoZUlD2fLh1j6t/giCw6M/IiPWsMs2Hfzm/hqrfP/XNw9pvvtATAxRB9eF76IStwA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint/config-inspector": "^0.5.4",
         "@nuxt/devtools-kit": "^1.4.1",
-        "@nuxt/eslint-config": "0.5.5",
-        "@nuxt/eslint-plugin": "0.5.5",
-        "@nuxt/kit": "^3.13.0",
+        "@nuxt/eslint-config": "0.5.6",
+        "@nuxt/eslint-plugin": "0.5.6",
+        "@nuxt/kit": "^3.13.1",
         "chokidar": "^3.6.0",
         "eslint-flat-config-utils": "^0.3.1",
         "eslint-typegen": "^0.3.1",
@@ -2136,6 +2136,65 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
+    "node_modules/@nuxt/eslint/node_modules/@nuxt/eslint-config": {
+      "version": "0.5.6",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.6.tgz",
+      "integrity": "sha512-2kse94xvLW9SeENOAkGaksfff7vwRWsekbDsRjVoW2h3/95wRHWSenObUbGaW6Jr3D0o7DzyEIsaOvnWHZXvDg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint/js": "^9.9.1",
+        "@nuxt/eslint-plugin": "0.5.6",
+        "@stylistic/eslint-plugin": "^2.7.2",
+        "@typescript-eslint/eslint-plugin": "^8.4.0",
+        "@typescript-eslint/parser": "^8.4.0",
+        "eslint-config-flat-gitignore": "^0.3.0",
+        "eslint-flat-config-utils": "^0.3.1",
+        "eslint-plugin-import-x": "^4.2.1",
+        "eslint-plugin-jsdoc": "^50.2.2",
+        "eslint-plugin-regexp": "^2.6.0",
+        "eslint-plugin-unicorn": "^55.0.0",
+        "eslint-plugin-vue": "^9.28.0",
+        "globals": "^15.9.0",
+        "local-pkg": "^0.5.0",
+        "pathe": "^1.1.2",
+        "vue-eslint-parser": "^9.4.3"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0"
+      }
+    },
+    "node_modules/@nuxt/eslint/node_modules/@nuxt/eslint-config/node_modules/eslint-config-flat-gitignore": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-flat-gitignore/-/eslint-config-flat-gitignore-0.3.0.tgz",
+      "integrity": "sha512-0Ndxo4qGhcewjTzw52TK06Mc00aDtHNTdeeW2JfONgDcLkRO/n/BteMRzNVpLQYxdCC/dFEilfM9fjjpGIJ9Og==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@eslint/compat": "^1.1.1",
+        "find-up-simple": "^1.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu"
+      },
+      "peerDependencies": {
+        "eslint": "^9.5.0"
+      }
+    },
+    "node_modules/@nuxt/eslint/node_modules/@nuxt/eslint-plugin": {
+      "version": "0.5.6",
+      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.6.tgz",
+      "integrity": "sha512-WgTcC4pGjbd8NCZpTYOOWnUWEncYV/rWJFeL5gyCXT+t36qkmWESrPLQ2NqBNaFLhoz6b/BFuOvMPVKg/q1T9g==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "^8.4.0",
+        "@typescript-eslint/utils": "^8.4.0"
+      },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0"
+      }
+    },
     "node_modules/@nuxt/kit": {
       "version": "3.13.1",
       "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.1.tgz",
diff --git a/print/package.json b/print/package.json
index d7e003946a..652e01ffec 100644
--- a/print/package.json
+++ b/print/package.json
@@ -33,7 +33,7 @@
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
     "@eslint/js": "9.9.1",
-    "@nuxt/eslint": "0.5.5",
+    "@nuxt/eslint": "0.5.6",
     "@nuxt/eslint-config": "0.5.5",
     "@nuxtjs/i18n": "8.5.2",
     "@nuxtjs/tailwindcss": "6.12.1",

From 2555164b07d77fa3b655387ef529bf6967eca20c Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 5 Sep 2024 22:10:03 +0000
Subject: [PATCH 253/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.45

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 096edf81f3..3bb8bda434 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.44
+    image: amazon/aws-cli:2.17.45
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From 19a5496aa59fadfd88165b3a82b0040ec5758537 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 5 Sep 2024 22:16:28 +0000
Subject: [PATCH 254/273] chore(deps): update dependency @nuxt/eslint-config to
 v0.5.6

---
 print/package-lock.json | 62 ++---------------------------------------
 print/package.json      |  2 +-
 2 files changed, 4 insertions(+), 60 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index 0cdde74d13..0469579da3 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -25,7 +25,7 @@
         "@eslint/eslintrc": "3.1.0",
         "@eslint/js": "9.9.1",
         "@nuxt/eslint": "0.5.6",
-        "@nuxt/eslint-config": "0.5.5",
+        "@nuxt/eslint-config": "0.5.6",
         "@nuxtjs/i18n": "8.5.2",
         "@nuxtjs/tailwindcss": "6.12.1",
         "@tailwindcss/typography": "0.5.15",
@@ -2095,48 +2095,6 @@
       }
     },
     "node_modules/@nuxt/eslint-config": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.5.tgz",
-      "integrity": "sha512-g99Q6VEGUTg8VKklNE5AaDyHFCcJTepTS6f2ea5yQRlAsJe8VUUUSnwqYw68saU3Mq6R/QOip2ic6A5SxZOy0w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint/js": "^9.9.1",
-        "@nuxt/eslint-plugin": "0.5.5",
-        "@stylistic/eslint-plugin": "^2.7.2",
-        "@typescript-eslint/eslint-plugin": "^8.3.0",
-        "@typescript-eslint/parser": "^8.3.0",
-        "eslint-config-flat-gitignore": "^0.2.0",
-        "eslint-flat-config-utils": "^0.3.1",
-        "eslint-plugin-import-x": "^4.1.1",
-        "eslint-plugin-jsdoc": "^50.2.2",
-        "eslint-plugin-regexp": "^2.6.0",
-        "eslint-plugin-unicorn": "^55.0.0",
-        "eslint-plugin-vue": "^9.27.0",
-        "globals": "^15.9.0",
-        "local-pkg": "^0.5.0",
-        "pathe": "^1.1.2",
-        "vue-eslint-parser": "^9.4.3"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
-      }
-    },
-    "node_modules/@nuxt/eslint-plugin": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.5.tgz",
-      "integrity": "sha512-Qwz+sz4HWa+QTTAYveryq25a2wXB0FgR0WvVGKYPhD1nBxJGkE6nwM8CILrsdICL6fKp2nfWLBzUr/UlGPqHkw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "^8.3.0",
-        "@typescript-eslint/utils": "^8.3.0"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
-      }
-    },
-    "node_modules/@nuxt/eslint/node_modules/@nuxt/eslint-config": {
       "version": "0.5.6",
       "resolved": "https://registry.npmjs.org/@nuxt/eslint-config/-/eslint-config-0.5.6.tgz",
       "integrity": "sha512-2kse94xvLW9SeENOAkGaksfff7vwRWsekbDsRjVoW2h3/95wRHWSenObUbGaW6Jr3D0o7DzyEIsaOvnWHZXvDg==",
@@ -2164,7 +2122,7 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
-    "node_modules/@nuxt/eslint/node_modules/@nuxt/eslint-config/node_modules/eslint-config-flat-gitignore": {
+    "node_modules/@nuxt/eslint-config/node_modules/eslint-config-flat-gitignore": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/eslint-config-flat-gitignore/-/eslint-config-flat-gitignore-0.3.0.tgz",
       "integrity": "sha512-0Ndxo4qGhcewjTzw52TK06Mc00aDtHNTdeeW2JfONgDcLkRO/n/BteMRzNVpLQYxdCC/dFEilfM9fjjpGIJ9Og==",
@@ -2181,7 +2139,7 @@
         "eslint": "^9.5.0"
       }
     },
-    "node_modules/@nuxt/eslint/node_modules/@nuxt/eslint-plugin": {
+    "node_modules/@nuxt/eslint-plugin": {
       "version": "0.5.6",
       "resolved": "https://registry.npmjs.org/@nuxt/eslint-plugin/-/eslint-plugin-0.5.6.tgz",
       "integrity": "sha512-WgTcC4pGjbd8NCZpTYOOWnUWEncYV/rWJFeL5gyCXT+t36qkmWESrPLQ2NqBNaFLhoz6b/BFuOvMPVKg/q1T9g==",
@@ -7743,20 +7701,6 @@
         "eslint": ">=6.0.0"
       }
     },
-    "node_modules/eslint-config-flat-gitignore": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-flat-gitignore/-/eslint-config-flat-gitignore-0.2.0.tgz",
-      "integrity": "sha512-s4lsQLYX+76FCt3PZPwdLwWlqssa5SLufl2gopFmCo3PETOLY3OW5IrD3/l2R0FfYEJvd9BRJ19yJ+yfc5oW3g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@eslint/compat": "^1.1.1",
-        "find-up-simple": "^1.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/antfu"
-      }
-    },
     "node_modules/eslint-config-prettier": {
       "version": "9.1.0",
       "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz",
diff --git a/print/package.json b/print/package.json
index 652e01ffec..42ad0137c6 100644
--- a/print/package.json
+++ b/print/package.json
@@ -34,7 +34,7 @@
     "@eslint/eslintrc": "3.1.0",
     "@eslint/js": "9.9.1",
     "@nuxt/eslint": "0.5.6",
-    "@nuxt/eslint-config": "0.5.5",
+    "@nuxt/eslint-config": "0.5.6",
     "@nuxtjs/i18n": "8.5.2",
     "@nuxtjs/tailwindcss": "6.12.1",
     "@tailwindcss/typography": "0.5.15",

From 7881ea034296ebc7e5bbfb77226fd89d75e36834 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 5 Sep 2024 22:27:09 +0000
Subject: [PATCH 255/273] chore(deps): update dependency phpstan/phpstan to
 v1.12.2

---
 api/composer.json |  2 +-
 api/composer.lock | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index ba8d68ec0c..92ad417b43 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -57,7 +57,7 @@
         "justinrainbow/json-schema": "6.0.0",
         "php-coveralls/php-coveralls": "2.7.0",
         "phpspec/prophecy-phpunit": "2.2",
-        "phpstan/phpstan": "1.12.1",
+        "phpstan/phpstan": "1.12.2",
         "phpunit/phpunit": "10.5.31",
         "rector/rector": "1.2.4",
         "spatie/phpunit-snapshot-assertions": "5.1.6",
diff --git a/api/composer.lock b/api/composer.lock
index 1af35e755d..3cc553b9e2 100644
--- a/api/composer.lock
+++ b/api/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": "f239a01d73c4f6db812aa8ddcea110d8",
+    "content-hash": "8bcd8bafd3952e5b733c9c1fb029f575",
     "packages": [
         {
             "name": "api-platform/core",
@@ -12169,16 +12169,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.12.1",
+            "version": "1.12.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2"
+                "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2",
-                "reference": "d8ed7fffa66de1db0d2972267d8ed1d8fa0fe5a2",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0ca1c7bb55fca8fe6448f16fff0f311ccec960a1",
+                "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1",
                 "shasum": ""
             },
             "require": {
@@ -12223,7 +12223,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-09-03T19:55:22+00:00"
+            "time": "2024-09-05T16:09:28+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",

From 2643015501274292f69b6648ad357aa410fe4744 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 6 Sep 2024 04:45:14 +0000
Subject: [PATCH 256/273] chore(deps): update vue-minor-print-pdf to v3.5.3

---
 pdf/package-lock.json   | 118 ++++++++++++++++++++--------------------
 pdf/package.json        |  12 ++--
 print/package-lock.json | 118 ++++++++++++++++++++--------------------
 print/package.json      |  12 ++--
 4 files changed, 130 insertions(+), 130 deletions(-)

diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index cce27e9ed7..8e907a952c 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -6,7 +6,7 @@
     "": {
       "name": "@ecamp3/client-pdf",
       "dependencies": {
-        "@vue/runtime-core": "3.5.2",
+        "@vue/runtime-core": "3.5.3",
         "html-entities": "2.5.2",
         "html-parse-stringify": "3.0.1"
       },
@@ -20,12 +20,12 @@
         "@vitejs/plugin-vue": "5.1.3",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/babel-preset-app": "5.0.8",
-        "@vue/compiler-dom": "3.5.2",
-        "@vue/compiler-sfc": "3.5.2",
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/compiler-sfc": "3.5.3",
         "@vue/eslint-config-prettier": "9.0.0",
-        "@vue/runtime-dom": "3.5.2",
-        "@vue/server-renderer": "3.5.2",
-        "@vue/shared": "3.5.2",
+        "@vue/runtime-dom": "3.5.3",
+        "@vue/server-renderer": "3.5.3",
+        "@vue/shared": "3.5.3",
         "@vue/test-utils": "2.4.6",
         "css": "3.0.0",
         "dayjs": "1.11.13",
@@ -3584,42 +3584,42 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.2.tgz",
-      "integrity": "sha512-1aP7FL2GkqfcskHWGg3lfWQpJnrmewKc+rNJ/hq9WNaAw4BEyJ5QbNChnqmbw+tJ409zdy1XWmUeXXMrCKJcQQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.3.tgz",
+      "integrity": "sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.2",
+        "@vue/shared": "3.5.3",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.2.tgz",
-      "integrity": "sha512-QY4DpT8ZIUyu/ZA5gErpSEDocGNEbHmpkZIC/d5jbp/rUF0iOJNigAy3HCCKc0PMMhDlrcysO3ufQ6Ab4MpEcQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.3.tgz",
+      "integrity": "sha512-wnzFArg9zpvk/811CDOZOadJRugf1Bgl/TQ3RfV4nKfSPok4hi0w10ziYUQR6LnnBAUlEXYLUfZ71Oj9ds/+QA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.2",
-        "@vue/shared": "3.5.2"
+        "@vue/compiler-core": "3.5.3",
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.2.tgz",
-      "integrity": "sha512-vErEtybSU290LbMW+ChYllI9tNJEdTW1oU+8cZWINZyjlWeTSa9YqDl4/pZJSnozOI+HmcaC1Vz2eFKmXNSXZA==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.3.tgz",
+      "integrity": "sha512-P3uATLny2tfyvMB04OQFe7Sczteno7SLFxwrOA/dw01pBWQHB5HL15a8PosoNX2aG/EAMGqnXTu+1LnmzFhpTQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.2",
-        "@vue/compiler-dom": "3.5.2",
-        "@vue/compiler-ssr": "3.5.2",
-        "@vue/shared": "3.5.2",
+        "@vue/compiler-core": "3.5.3",
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/compiler-ssr": "3.5.3",
+        "@vue/shared": "3.5.3",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.44",
@@ -3627,14 +3627,14 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.2.tgz",
-      "integrity": "sha512-vMtA4tQK/AM3UAYJsmouQzQpgG+h9TKiD5BV+Zt+ZyAMdicxzSEEFGWf/CykRnDpqj9fMfIHPhOezJVNxiXe2A==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.3.tgz",
+      "integrity": "sha512-F/5f+r2WzL/2YAPl7UlKcJWHrvoZN8XwEBLnT7S4BXwncH25iDOabhO2M2DWioyTguJAGavDOawejkFXj8EM1w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.2",
-        "@vue/shared": "3.5.2"
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/eslint-config-prettier": {
@@ -3653,55 +3653,55 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.2.tgz",
-      "integrity": "sha512-lJwWL5bNht+2vIwU/+lnGdH+FKFxzz6z8WkoIJityPLiasWU+HDUvEsC7gm3JFwbTf7Kk+Nr9kJMaPy0HXwwxQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.3.tgz",
+      "integrity": "sha512-2w61UnRWTP7+rj1H/j6FH706gRBHdFVpIqEkSDAyIpafBXYH8xt4gttstbbCWdU3OlcSWO8/3mbKl/93/HSMpw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.5.2"
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.2.tgz",
-      "integrity": "sha512-oU+i9sJjGEMfEhlrJ7SZv7CdSIgUNyBHnWHa0SqU2RF48V3/ATajzpWq1/DkiVJ1mtx+cQFAMKs8s/3cB3YlLQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.3.tgz",
+      "integrity": "sha512-5b2AQw5OZlmCzSsSBWYoZOsy75N4UdMWenTfDdI5bAzXnuVR7iR8Q4AOzQm2OGoA41xjk53VQKrqQhOz2ktWaw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.2",
-        "@vue/shared": "3.5.2"
+        "@vue/reactivity": "3.5.3",
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.2.tgz",
-      "integrity": "sha512-2qvysn+oR0QnFKaWZxQ90iVpWAK/WPpYmODHCv24IDXjsBrdHbjLBj9s6YBdPaMuQhs0LNsmhsgZYZBkszLg6g==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.3.tgz",
+      "integrity": "sha512-wPR1DEGc3XnQ7yHbmkTt3GoY0cEnVGQnARRdAkDzZ8MbUKEs26gogCQo6AOvvgahfjIcnvWJzkZArQ1fmWjcSg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.2",
-        "@vue/runtime-core": "3.5.2",
-        "@vue/shared": "3.5.2",
+        "@vue/reactivity": "3.5.3",
+        "@vue/runtime-core": "3.5.3",
+        "@vue/shared": "3.5.3",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.2.tgz",
-      "integrity": "sha512-3POhYCA8KfbmuDuUiNbMXnpdh9pwE4SvAqo7VvACjklLkf3AaMkY3TvV7APeEa/WQezrnL+E4X2ASpJsKeS4cQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.3.tgz",
+      "integrity": "sha512-28volmaZVG2PGO3V3+gBPKoSHvLlE8FGfG/GKXKkjjfxLuj/50B/0OQGakM/g6ehQeqCrZYM4eHC4Ks48eig1Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.5.2",
-        "@vue/shared": "3.5.2"
+        "@vue/compiler-ssr": "3.5.3",
+        "@vue/shared": "3.5.3"
       },
       "peerDependencies": {
-        "vue": "3.5.2"
+        "vue": "3.5.3"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.2.tgz",
-      "integrity": "sha512-Ce89WNFBzcDca/AgFTxgX4/K4iAyF7oFIp8Z5aBbFBNbtpwnQr+5pZOoHndxnjE2h+YFcipVMzs9UL11XB6dwA==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.3.tgz",
+      "integrity": "sha512-Jp2v8nylKBT+PlOUjun2Wp/f++TfJVFjshLzNtJDdmFJabJa7noGMncqXRM1vXGX+Yo2V7WykQFNxusSim8SCA==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -7945,18 +7945,18 @@
       }
     },
     "node_modules/vue": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.2.tgz",
-      "integrity": "sha512-w1YB4lAwC9ByH6AnFY0JvZF+y70Usul9jDfKIKtM5xA97q/JPS5R7mqq0fhA6D2PQxYPZdgb5jzFKLyOga5pnw==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.3.tgz",
+      "integrity": "sha512-xvRbd0HpuLovYbOHXRHlSBsSvmUJbo0pzbkKTApWnQGf3/cu5Z39mQeA5cZdLRVIoNf3zI6MSoOgHUT5i2jO+Q==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
-        "@vue/compiler-dom": "3.5.2",
-        "@vue/compiler-sfc": "3.5.2",
-        "@vue/runtime-dom": "3.5.2",
-        "@vue/server-renderer": "3.5.2",
-        "@vue/shared": "3.5.2"
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/compiler-sfc": "3.5.3",
+        "@vue/runtime-dom": "3.5.3",
+        "@vue/server-renderer": "3.5.3",
+        "@vue/shared": "3.5.3"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/pdf/package.json b/pdf/package.json
index 9356b09e3b..519aea4bc8 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -17,7 +17,7 @@
     "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json,mjs}"
   },
   "dependencies": {
-    "@vue/runtime-core": "3.5.2",
+    "@vue/runtime-core": "3.5.3",
     "html-entities": "2.5.2",
     "html-parse-stringify": "3.0.1"
   },
@@ -40,12 +40,12 @@
     "@vitejs/plugin-vue": "5.1.3",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/babel-preset-app": "5.0.8",
-    "@vue/compiler-dom": "3.5.2",
-    "@vue/compiler-sfc": "3.5.2",
+    "@vue/compiler-dom": "3.5.3",
+    "@vue/compiler-sfc": "3.5.3",
     "@vue/eslint-config-prettier": "9.0.0",
-    "@vue/runtime-dom": "3.5.2",
-    "@vue/server-renderer": "3.5.2",
-    "@vue/shared": "3.5.2",
+    "@vue/runtime-dom": "3.5.3",
+    "@vue/server-renderer": "3.5.3",
+    "@vue/shared": "3.5.3",
     "@vue/test-utils": "2.4.6",
     "css": "3.0.0",
     "dayjs": "1.11.13",
diff --git a/print/package-lock.json b/print/package-lock.json
index 0469579da3..da1310b712 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -31,11 +31,11 @@
         "@tailwindcss/typography": "0.5.15",
         "@typescript-eslint/eslint-plugin": "8.4.0",
         "@vitest/coverage-v8": "2.0.5",
-        "@vue/compiler-dom": "3.5.2",
-        "@vue/compiler-sfc": "3.5.2",
-        "@vue/runtime-dom": "3.5.2",
-        "@vue/server-renderer": "3.5.2",
-        "@vue/shared": "3.5.2",
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/compiler-sfc": "3.5.3",
+        "@vue/runtime-dom": "3.5.3",
+        "@vue/server-renderer": "3.5.3",
+        "@vue/shared": "3.5.3",
         "@vue/test-utils": "2.4.6",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
@@ -50,7 +50,7 @@
         "vite-plugin-eslint2": "4.4.0",
         "vite-svg-loader": "5.1.0",
         "vitest": "2.0.5",
-        "vue": "3.5.2"
+        "vue": "3.5.3"
       }
     },
     "node_modules/@alloc/quick-lru": {
@@ -5101,13 +5101,13 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.2.tgz",
-      "integrity": "sha512-1aP7FL2GkqfcskHWGg3lfWQpJnrmewKc+rNJ/hq9WNaAw4BEyJ5QbNChnqmbw+tJ409zdy1XWmUeXXMrCKJcQQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.3.tgz",
+      "integrity": "sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.2",
+        "@vue/shared": "3.5.3",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
@@ -5120,26 +5120,26 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.2.tgz",
-      "integrity": "sha512-QY4DpT8ZIUyu/ZA5gErpSEDocGNEbHmpkZIC/d5jbp/rUF0iOJNigAy3HCCKc0PMMhDlrcysO3ufQ6Ab4MpEcQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.3.tgz",
+      "integrity": "sha512-wnzFArg9zpvk/811CDOZOadJRugf1Bgl/TQ3RfV4nKfSPok4hi0w10ziYUQR6LnnBAUlEXYLUfZ71Oj9ds/+QA==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.2",
-        "@vue/shared": "3.5.2"
+        "@vue/compiler-core": "3.5.3",
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.2.tgz",
-      "integrity": "sha512-vErEtybSU290LbMW+ChYllI9tNJEdTW1oU+8cZWINZyjlWeTSa9YqDl4/pZJSnozOI+HmcaC1Vz2eFKmXNSXZA==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.3.tgz",
+      "integrity": "sha512-P3uATLny2tfyvMB04OQFe7Sczteno7SLFxwrOA/dw01pBWQHB5HL15a8PosoNX2aG/EAMGqnXTu+1LnmzFhpTQ==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.2",
-        "@vue/compiler-dom": "3.5.2",
-        "@vue/compiler-ssr": "3.5.2",
-        "@vue/shared": "3.5.2",
+        "@vue/compiler-core": "3.5.3",
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/compiler-ssr": "3.5.3",
+        "@vue/shared": "3.5.3",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.44",
@@ -5153,13 +5153,13 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.2.tgz",
-      "integrity": "sha512-vMtA4tQK/AM3UAYJsmouQzQpgG+h9TKiD5BV+Zt+ZyAMdicxzSEEFGWf/CykRnDpqj9fMfIHPhOezJVNxiXe2A==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.3.tgz",
+      "integrity": "sha512-F/5f+r2WzL/2YAPl7UlKcJWHrvoZN8XwEBLnT7S4BXwncH25iDOabhO2M2DWioyTguJAGavDOawejkFXj8EM1w==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.2",
-        "@vue/shared": "3.5.2"
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/devtools-api": {
@@ -5229,53 +5229,53 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.2.tgz",
-      "integrity": "sha512-lJwWL5bNht+2vIwU/+lnGdH+FKFxzz6z8WkoIJityPLiasWU+HDUvEsC7gm3JFwbTf7Kk+Nr9kJMaPy0HXwwxQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.3.tgz",
+      "integrity": "sha512-2w61UnRWTP7+rj1H/j6FH706gRBHdFVpIqEkSDAyIpafBXYH8xt4gttstbbCWdU3OlcSWO8/3mbKl/93/HSMpw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.5.2"
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.2.tgz",
-      "integrity": "sha512-oU+i9sJjGEMfEhlrJ7SZv7CdSIgUNyBHnWHa0SqU2RF48V3/ATajzpWq1/DkiVJ1mtx+cQFAMKs8s/3cB3YlLQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.3.tgz",
+      "integrity": "sha512-5b2AQw5OZlmCzSsSBWYoZOsy75N4UdMWenTfDdI5bAzXnuVR7iR8Q4AOzQm2OGoA41xjk53VQKrqQhOz2ktWaw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.2",
-        "@vue/shared": "3.5.2"
+        "@vue/reactivity": "3.5.3",
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.2.tgz",
-      "integrity": "sha512-2qvysn+oR0QnFKaWZxQ90iVpWAK/WPpYmODHCv24IDXjsBrdHbjLBj9s6YBdPaMuQhs0LNsmhsgZYZBkszLg6g==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.3.tgz",
+      "integrity": "sha512-wPR1DEGc3XnQ7yHbmkTt3GoY0cEnVGQnARRdAkDzZ8MbUKEs26gogCQo6AOvvgahfjIcnvWJzkZArQ1fmWjcSg==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.2",
-        "@vue/runtime-core": "3.5.2",
-        "@vue/shared": "3.5.2",
+        "@vue/reactivity": "3.5.3",
+        "@vue/runtime-core": "3.5.3",
+        "@vue/shared": "3.5.3",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.2.tgz",
-      "integrity": "sha512-3POhYCA8KfbmuDuUiNbMXnpdh9pwE4SvAqo7VvACjklLkf3AaMkY3TvV7APeEa/WQezrnL+E4X2ASpJsKeS4cQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.3.tgz",
+      "integrity": "sha512-28volmaZVG2PGO3V3+gBPKoSHvLlE8FGfG/GKXKkjjfxLuj/50B/0OQGakM/g6ehQeqCrZYM4eHC4Ks48eig1Q==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.5.2",
-        "@vue/shared": "3.5.2"
+        "@vue/compiler-ssr": "3.5.3",
+        "@vue/shared": "3.5.3"
       },
       "peerDependencies": {
-        "vue": "3.5.2"
+        "vue": "3.5.3"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.2.tgz",
-      "integrity": "sha512-Ce89WNFBzcDca/AgFTxgX4/K4iAyF7oFIp8Z5aBbFBNbtpwnQr+5pZOoHndxnjE2h+YFcipVMzs9UL11XB6dwA==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.3.tgz",
+      "integrity": "sha512-Jp2v8nylKBT+PlOUjun2Wp/f++TfJVFjshLzNtJDdmFJabJa7noGMncqXRM1vXGX+Yo2V7WykQFNxusSim8SCA==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -17456,16 +17456,16 @@
       "license": "MIT"
     },
     "node_modules/vue": {
-      "version": "3.5.2",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.2.tgz",
-      "integrity": "sha512-w1YB4lAwC9ByH6AnFY0JvZF+y70Usul9jDfKIKtM5xA97q/JPS5R7mqq0fhA6D2PQxYPZdgb5jzFKLyOga5pnw==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.3.tgz",
+      "integrity": "sha512-xvRbd0HpuLovYbOHXRHlSBsSvmUJbo0pzbkKTApWnQGf3/cu5Z39mQeA5cZdLRVIoNf3zI6MSoOgHUT5i2jO+Q==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.2",
-        "@vue/compiler-sfc": "3.5.2",
-        "@vue/runtime-dom": "3.5.2",
-        "@vue/server-renderer": "3.5.2",
-        "@vue/shared": "3.5.2"
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/compiler-sfc": "3.5.3",
+        "@vue/runtime-dom": "3.5.3",
+        "@vue/server-renderer": "3.5.3",
+        "@vue/shared": "3.5.3"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/print/package.json b/print/package.json
index 42ad0137c6..a56adfb7e0 100644
--- a/print/package.json
+++ b/print/package.json
@@ -40,11 +40,11 @@
     "@tailwindcss/typography": "0.5.15",
     "@typescript-eslint/eslint-plugin": "8.4.0",
     "@vitest/coverage-v8": "2.0.5",
-    "@vue/compiler-dom": "3.5.2",
-    "@vue/compiler-sfc": "3.5.2",
-    "@vue/runtime-dom": "3.5.2",
-    "@vue/server-renderer": "3.5.2",
-    "@vue/shared": "3.5.2",
+    "@vue/compiler-dom": "3.5.3",
+    "@vue/compiler-sfc": "3.5.3",
+    "@vue/runtime-dom": "3.5.3",
+    "@vue/server-renderer": "3.5.3",
+    "@vue/shared": "3.5.3",
     "@vue/test-utils": "2.4.6",
     "eslint": "8.57.0",
     "eslint-config-prettier": "9.1.0",
@@ -59,6 +59,6 @@
     "vite-plugin-eslint2": "4.4.0",
     "vite-svg-loader": "5.1.0",
     "vitest": "2.0.5",
-    "vue": "3.5.2"
+    "vue": "3.5.3"
   }
 }

From 35e3449869c7bd8a8df79db82dc40a0368a1dcd6 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 6 Sep 2024 22:18:01 +0000
Subject: [PATCH 257/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.46

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 3bb8bda434..89ad7c9cec 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.45
+    image: amazon/aws-cli:2.17.46
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From e573a2bbe4f8ba2c16c2fdd3612243cb9ee036a2 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 6 Sep 2024 22:18:50 +0000
Subject: [PATCH 258/273] chore(deps): update dependency @eslint/js to v9.10.0

---
 .ops/aws-setup/package-lock.json | 8 ++++----
 .ops/aws-setup/package.json      | 2 +-
 e2e/package-lock.json            | 8 ++++----
 e2e/package.json                 | 2 +-
 frontend/package-lock.json       | 8 ++++----
 frontend/package.json            | 2 +-
 pdf/package-lock.json            | 8 ++++----
 pdf/package.json                 | 2 +-
 print/package-lock.json          | 8 ++++----
 print/package.json               | 2 +-
 10 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index 999e37b0d2..0efd9a2403 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -14,7 +14,7 @@
                 "@babel/eslint-parser": "7.25.1",
                 "@eslint/compat": "1.1.1",
                 "@eslint/eslintrc": "3.1.0",
-                "@eslint/js": "9.9.1",
+                "@eslint/js": "9.10.0",
                 "@types/node": "20.16.5",
                 "eslint": "8.57.0",
                 "eslint-config-prettier": "9.1.0",
@@ -1093,9 +1093,9 @@
             }
         },
         "node_modules/@eslint/js": {
-            "version": "9.9.1",
-            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
-            "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
+            "version": "9.10.0",
+            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz",
+            "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==",
             "dev": true,
             "license": "MIT",
             "engines": {
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 4f5fa5d3b8..76d8aa3082 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -18,7 +18,7 @@
         "@babel/eslint-parser": "7.25.1",
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.9.1",
+        "@eslint/js": "9.10.0",
         "@types/node": "20.16.5",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
diff --git a/e2e/package-lock.json b/e2e/package-lock.json
index 842beaf468..4eafa58897 100644
--- a/e2e/package-lock.json
+++ b/e2e/package-lock.json
@@ -9,7 +9,7 @@
         "@babel/eslint-parser": "7.25.1",
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.9.1",
+        "@eslint/js": "9.10.0",
         "cypress": "13.13.2",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
@@ -490,9 +490,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.9.1",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
-      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
+      "version": "9.10.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz",
+      "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/e2e/package.json b/e2e/package.json
index dbd59acb1c..d6352145d1 100644
--- a/e2e/package.json
+++ b/e2e/package.json
@@ -15,7 +15,7 @@
     "@babel/eslint-parser": "7.25.1",
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
-    "@eslint/js": "9.9.1",
+    "@eslint/js": "9.10.0",
     "cypress": "13.13.2",
     "eslint": "8.57.0",
     "eslint-config-prettier": "9.1.0",
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 31f0d21814..3f58f12059 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -74,7 +74,7 @@
         "@babel/eslint-parser": "7.25.1",
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.9.1",
+        "@eslint/js": "9.10.0",
         "@sentry/vite-plugin": "2.22.4",
         "@testing-library/jest-dom": "6.5.0",
         "@testing-library/user-event": "14.5.2",
@@ -2512,9 +2512,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.9.1",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
-      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
+      "version": "9.10.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz",
+      "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/frontend/package.json b/frontend/package.json
index ba91e1a95f..db664f1193 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -86,7 +86,7 @@
     "@babel/eslint-parser": "7.25.1",
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
-    "@eslint/js": "9.9.1",
+    "@eslint/js": "9.10.0",
     "@sentry/vite-plugin": "2.22.4",
     "@testing-library/jest-dom": "6.5.0",
     "@testing-library/user-event": "14.5.2",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index 8e907a952c..c6c59b0f44 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -14,7 +14,7 @@
         "@babel/eslint-parser": "7.25.1",
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.9.1",
+        "@eslint/js": "9.10.0",
         "@intlify/core": "^9.10.2",
         "@rushstack/eslint-patch": "1.10.4",
         "@vitejs/plugin-vue": "5.1.3",
@@ -2438,9 +2438,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.9.1",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
-      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
+      "version": "9.10.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz",
+      "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/pdf/package.json b/pdf/package.json
index 519aea4bc8..11701118e6 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -34,7 +34,7 @@
     "@babel/eslint-parser": "7.25.1",
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
-    "@eslint/js": "9.9.1",
+    "@eslint/js": "9.10.0",
     "@intlify/core": "^9.10.2",
     "@rushstack/eslint-patch": "1.10.4",
     "@vitejs/plugin-vue": "5.1.3",
diff --git a/print/package-lock.json b/print/package-lock.json
index da1310b712..ae935953d8 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -23,7 +23,7 @@
       "devDependencies": {
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.9.1",
+        "@eslint/js": "9.10.0",
         "@nuxt/eslint": "0.5.6",
         "@nuxt/eslint-config": "0.5.6",
         "@nuxtjs/i18n": "8.5.2",
@@ -1343,9 +1343,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.9.1",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
-      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
+      "version": "9.10.0",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz",
+      "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/print/package.json b/print/package.json
index a56adfb7e0..f7133783e3 100644
--- a/print/package.json
+++ b/print/package.json
@@ -32,7 +32,7 @@
   "devDependencies": {
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
-    "@eslint/js": "9.9.1",
+    "@eslint/js": "9.10.0",
     "@nuxt/eslint": "0.5.6",
     "@nuxt/eslint-config": "0.5.6",
     "@nuxtjs/i18n": "8.5.2",

From 3af520258c12a51ac2b67537b6593cd288a27bdc Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 7 Sep 2024 00:43:19 +0000
Subject: [PATCH 259/273] fix(deps): update dependency @pulumi/aws to v6.51.0

---
 .ops/aws-setup/package-lock.json | 16 ++++++++--------
 .ops/aws-setup/package.json      |  4 ++--
 e2e/package-lock.json            |  8 ++++----
 e2e/package.json                 |  2 +-
 frontend/package-lock.json       |  8 ++++----
 frontend/package.json            |  2 +-
 pdf/package-lock.json            |  8 ++++----
 pdf/package.json                 |  2 +-
 print/package-lock.json          |  8 ++++----
 print/package.json               |  2 +-
 10 files changed, 30 insertions(+), 30 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index 0efd9a2403..2241de8e5a 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -6,7 +6,7 @@
         "": {
             "name": "ecamp-core",
             "dependencies": {
-                "@pulumi/aws": "6.50.1",
+                "@pulumi/aws": "6.51.0",
                 "@pulumi/awsx": "2.14.0",
                 "@pulumi/pulumi": "3.131.0"
             },
@@ -14,7 +14,7 @@
                 "@babel/eslint-parser": "7.25.1",
                 "@eslint/compat": "1.1.1",
                 "@eslint/eslintrc": "3.1.0",
-                "@eslint/js": "9.10.0",
+                "@eslint/js": "9.9.1",
                 "@types/node": "20.16.5",
                 "eslint": "8.57.0",
                 "eslint-config-prettier": "9.1.0",
@@ -1093,9 +1093,9 @@
             }
         },
         "node_modules/@eslint/js": {
-            "version": "9.10.0",
-            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz",
-            "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==",
+            "version": "9.9.1",
+            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
+            "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
             "dev": true,
             "license": "MIT",
             "engines": {
@@ -2026,9 +2026,9 @@
             "license": "BSD-3-Clause"
         },
         "node_modules/@pulumi/aws": {
-            "version": "6.50.1",
-            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.50.1.tgz",
-            "integrity": "sha512-PzU8DnOsLCFgqeV7eFSrmcyqos2ilsuuRNbGLxP9pP1dXhsBvXoLFVyLNdTuI+zDG58fOmC2c7KsXXuyo3vjvg==",
+            "version": "6.51.0",
+            "resolved": "https://registry.npmjs.org/@pulumi/aws/-/aws-6.51.0.tgz",
+            "integrity": "sha512-t2aduFqp8CVZ5axGbBGwKZUjMb8y3YC1iVLgaW5wh/eHW2AYEgz9u+weqkte5c43v16QIfV15bXBy6j/fkVQOg==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@pulumi/pulumi": "^3.0.0",
diff --git a/.ops/aws-setup/package.json b/.ops/aws-setup/package.json
index 76d8aa3082..1b148233f2 100644
--- a/.ops/aws-setup/package.json
+++ b/.ops/aws-setup/package.json
@@ -11,14 +11,14 @@
     },
     "dependencies": {
         "@pulumi/pulumi": "3.131.0",
-        "@pulumi/aws": "6.50.1",
+        "@pulumi/aws": "6.51.0",
         "@pulumi/awsx": "2.14.0"
     },
     "devDependencies": {
         "@babel/eslint-parser": "7.25.1",
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.10.0",
+        "@eslint/js": "9.9.1",
         "@types/node": "20.16.5",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
diff --git a/e2e/package-lock.json b/e2e/package-lock.json
index 4eafa58897..842beaf468 100644
--- a/e2e/package-lock.json
+++ b/e2e/package-lock.json
@@ -9,7 +9,7 @@
         "@babel/eslint-parser": "7.25.1",
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.10.0",
+        "@eslint/js": "9.9.1",
         "cypress": "13.13.2",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
@@ -490,9 +490,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.10.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz",
-      "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==",
+      "version": "9.9.1",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
+      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/e2e/package.json b/e2e/package.json
index d6352145d1..dbd59acb1c 100644
--- a/e2e/package.json
+++ b/e2e/package.json
@@ -15,7 +15,7 @@
     "@babel/eslint-parser": "7.25.1",
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
-    "@eslint/js": "9.10.0",
+    "@eslint/js": "9.9.1",
     "cypress": "13.13.2",
     "eslint": "8.57.0",
     "eslint-config-prettier": "9.1.0",
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 3f58f12059..31f0d21814 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -74,7 +74,7 @@
         "@babel/eslint-parser": "7.25.1",
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.10.0",
+        "@eslint/js": "9.9.1",
         "@sentry/vite-plugin": "2.22.4",
         "@testing-library/jest-dom": "6.5.0",
         "@testing-library/user-event": "14.5.2",
@@ -2512,9 +2512,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.10.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz",
-      "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==",
+      "version": "9.9.1",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
+      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/frontend/package.json b/frontend/package.json
index db664f1193..ba91e1a95f 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -86,7 +86,7 @@
     "@babel/eslint-parser": "7.25.1",
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
-    "@eslint/js": "9.10.0",
+    "@eslint/js": "9.9.1",
     "@sentry/vite-plugin": "2.22.4",
     "@testing-library/jest-dom": "6.5.0",
     "@testing-library/user-event": "14.5.2",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index c6c59b0f44..8e907a952c 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -14,7 +14,7 @@
         "@babel/eslint-parser": "7.25.1",
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.10.0",
+        "@eslint/js": "9.9.1",
         "@intlify/core": "^9.10.2",
         "@rushstack/eslint-patch": "1.10.4",
         "@vitejs/plugin-vue": "5.1.3",
@@ -2438,9 +2438,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.10.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz",
-      "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==",
+      "version": "9.9.1",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
+      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/pdf/package.json b/pdf/package.json
index 11701118e6..519aea4bc8 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -34,7 +34,7 @@
     "@babel/eslint-parser": "7.25.1",
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
-    "@eslint/js": "9.10.0",
+    "@eslint/js": "9.9.1",
     "@intlify/core": "^9.10.2",
     "@rushstack/eslint-patch": "1.10.4",
     "@vitejs/plugin-vue": "5.1.3",
diff --git a/print/package-lock.json b/print/package-lock.json
index ae935953d8..da1310b712 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -23,7 +23,7 @@
       "devDependencies": {
         "@eslint/compat": "1.1.1",
         "@eslint/eslintrc": "3.1.0",
-        "@eslint/js": "9.10.0",
+        "@eslint/js": "9.9.1",
         "@nuxt/eslint": "0.5.6",
         "@nuxt/eslint-config": "0.5.6",
         "@nuxtjs/i18n": "8.5.2",
@@ -1343,9 +1343,9 @@
       }
     },
     "node_modules/@eslint/js": {
-      "version": "9.10.0",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz",
-      "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==",
+      "version": "9.9.1",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
+      "integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/print/package.json b/print/package.json
index f7133783e3..a56adfb7e0 100644
--- a/print/package.json
+++ b/print/package.json
@@ -32,7 +32,7 @@
   "devDependencies": {
     "@eslint/compat": "1.1.1",
     "@eslint/eslintrc": "3.1.0",
-    "@eslint/js": "9.10.0",
+    "@eslint/js": "9.9.1",
     "@nuxt/eslint": "0.5.6",
     "@nuxt/eslint-config": "0.5.6",
     "@nuxtjs/i18n": "8.5.2",

From 06ef6127267ef4d3498551a3d0e1e118bf3e87b0 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 7 Sep 2024 11:07:30 +0000
Subject: [PATCH 260/273] fix(deps): update dependency twig/cssinliner-extra to
 v3.13.0

---
 api/composer.lock | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/api/composer.lock b/api/composer.lock
index 3cc553b9e2..a6c566244e 100644
--- a/api/composer.lock
+++ b/api/composer.lock
@@ -9732,23 +9732,23 @@
         },
         {
             "name": "twig/cssinliner-extra",
-            "version": "v3.12.0",
+            "version": "v3.13.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/twigphp/cssinliner-extra.git",
-                "reference": "31fd1f7bc79bf3b7c188316e02d78fdd0fc153e3"
+                "reference": "cef36c444b1cce4c0978d7aebd20427671a918f4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/31fd1f7bc79bf3b7c188316e02d78fdd0fc153e3",
-                "reference": "31fd1f7bc79bf3b7c188316e02d78fdd0fc153e3",
+                "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/cef36c444b1cce4c0978d7aebd20427671a918f4",
+                "reference": "cef36c444b1cce4c0978d7aebd20427671a918f4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=8.0.2",
                 "symfony/deprecation-contracts": "^2.5|^3",
                 "tijsverkoyen/css-to-inline-styles": "^2.0",
-                "twig/twig": "^3.0"
+                "twig/twig": "^3.13|^4.0"
             },
             "require-dev": {
                 "symfony/phpunit-bridge": "^6.4|^7.0"
@@ -9785,7 +9785,7 @@
                 "twig"
             ],
             "support": {
-                "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.12.0"
+                "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.13.0"
             },
             "funding": [
                 {
@@ -9797,7 +9797,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-08-26T15:29:01+00:00"
+            "time": "2024-09-03T13:08:40+00:00"
         },
         {
             "name": "twig/extra-bundle",
@@ -9875,16 +9875,16 @@
         },
         {
             "name": "twig/twig",
-            "version": "v3.12.0",
+            "version": "v3.13.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/twigphp/Twig.git",
-                "reference": "4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea"
+                "reference": "afc0eb63dc66c248c5a94504dc2b255bc9b86575"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/Twig/zipball/4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea",
-                "reference": "4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea",
+                "url": "https://api.github.com/repos/twigphp/Twig/zipball/afc0eb63dc66c248c5a94504dc2b255bc9b86575",
+                "reference": "afc0eb63dc66c248c5a94504dc2b255bc9b86575",
                 "shasum": ""
             },
             "require": {
@@ -9938,7 +9938,7 @@
             ],
             "support": {
                 "issues": "https://github.com/twigphp/Twig/issues",
-                "source": "https://github.com/twigphp/Twig/tree/v3.12.0"
+                "source": "https://github.com/twigphp/Twig/tree/v3.13.0"
             },
             "funding": [
                 {
@@ -9950,7 +9950,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-08-29T09:51:12+00:00"
+            "time": "2024-09-07T08:01:12+00:00"
         },
         {
             "name": "webmozart/assert",

From 751ded81c0cbf67733890004f8431f19d4b024d5 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 7 Sep 2024 11:07:38 +0000
Subject: [PATCH 261/273] fix(deps): update dependency twig/extra-bundle to
 v3.13.0

---
 api/composer.lock | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/api/composer.lock b/api/composer.lock
index 3cc553b9e2..38f20b057c 100644
--- a/api/composer.lock
+++ b/api/composer.lock
@@ -9801,23 +9801,23 @@
         },
         {
             "name": "twig/extra-bundle",
-            "version": "v3.12.0",
+            "version": "v3.13.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/twigphp/twig-extra-bundle.git",
-                "reference": "a5427976a23c50b98d034d2f4c215ffaaaf5875f"
+                "reference": "21a9a7aa9f79d4493bb6fed4eb2794339f9551f5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/a5427976a23c50b98d034d2f4c215ffaaaf5875f",
-                "reference": "a5427976a23c50b98d034d2f4c215ffaaaf5875f",
+                "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/21a9a7aa9f79d4493bb6fed4eb2794339f9551f5",
+                "reference": "21a9a7aa9f79d4493bb6fed4eb2794339f9551f5",
                 "shasum": ""
             },
             "require": {
                 "php": ">=8.0.2",
                 "symfony/framework-bundle": "^5.4|^6.4|^7.0",
                 "symfony/twig-bundle": "^5.4|^6.4|^7.0",
-                "twig/twig": "^3.0"
+                "twig/twig": "^3.0|^4.0"
             },
             "require-dev": {
                 "league/commonmark": "^1.0|^2.0",
@@ -9859,7 +9859,7 @@
                 "twig"
             ],
             "support": {
-                "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.12.0"
+                "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.13.0"
             },
             "funding": [
                 {
@@ -9871,20 +9871,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-08-10T10:32:24+00:00"
+            "time": "2024-09-01T20:39:12+00:00"
         },
         {
             "name": "twig/twig",
-            "version": "v3.12.0",
+            "version": "v3.13.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/twigphp/Twig.git",
-                "reference": "4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea"
+                "reference": "afc0eb63dc66c248c5a94504dc2b255bc9b86575"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/Twig/zipball/4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea",
-                "reference": "4d19472d4ac1838e0b1f0e029ce1fa4040eb34ea",
+                "url": "https://api.github.com/repos/twigphp/Twig/zipball/afc0eb63dc66c248c5a94504dc2b255bc9b86575",
+                "reference": "afc0eb63dc66c248c5a94504dc2b255bc9b86575",
                 "shasum": ""
             },
             "require": {
@@ -9938,7 +9938,7 @@
             ],
             "support": {
                 "issues": "https://github.com/twigphp/Twig/issues",
-                "source": "https://github.com/twigphp/Twig/tree/v3.12.0"
+                "source": "https://github.com/twigphp/Twig/tree/v3.13.0"
             },
             "funding": [
                 {
@@ -9950,7 +9950,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-08-29T09:51:12+00:00"
+            "time": "2024-09-07T08:01:12+00:00"
         },
         {
             "name": "webmozart/assert",

From be1ac88da67c579fb59b30182e80c626254f2433 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 8 Sep 2024 18:09:58 +0000
Subject: [PATCH 262/273] chore(deps): update dependency rector/rector to
 v1.2.5

---
 api/composer.json |  2 +-
 api/composer.lock | 16 ++++++++--------
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 92ad417b43..1c8e4fcfda 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -59,7 +59,7 @@
         "phpspec/prophecy-phpunit": "2.2",
         "phpstan/phpstan": "1.12.2",
         "phpunit/phpunit": "10.5.31",
-        "rector/rector": "1.2.4",
+        "rector/rector": "1.2.5",
         "spatie/phpunit-snapshot-assertions": "5.1.6",
         "symfony/browser-kit": "7.1.1",
         "symfony/css-selector": "7.1.1",
diff --git a/api/composer.lock b/api/composer.lock
index a6c566244e..786d84a499 100644
--- a/api/composer.lock
+++ b/api/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": "8bcd8bafd3952e5b733c9c1fb029f575",
+    "content-hash": "e1504d206c516db167996275509163fa",
     "packages": [
         {
             "name": "api-platform/core",
@@ -13179,21 +13179,21 @@
         },
         {
             "name": "rector/rector",
-            "version": "1.2.4",
+            "version": "1.2.5",
             "source": {
                 "type": "git",
                 "url": "https://github.com/rectorphp/rector.git",
-                "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381"
+                "reference": "e98aa793ca3fcd17e893cfaf9103ac049775d339"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/rectorphp/rector/zipball/42a4aa23b48b4cfc8ebfeac2b570364e27744381",
-                "reference": "42a4aa23b48b4cfc8ebfeac2b570364e27744381",
+                "url": "https://api.github.com/repos/rectorphp/rector/zipball/e98aa793ca3fcd17e893cfaf9103ac049775d339",
+                "reference": "e98aa793ca3fcd17e893cfaf9103ac049775d339",
                 "shasum": ""
             },
             "require": {
                 "php": "^7.2|^8.0",
-                "phpstan/phpstan": "^1.11.11"
+                "phpstan/phpstan": "^1.12.2"
             },
             "conflict": {
                 "rector/rector-doctrine": "*",
@@ -13226,7 +13226,7 @@
             ],
             "support": {
                 "issues": "https://github.com/rectorphp/rector/issues",
-                "source": "https://github.com/rectorphp/rector/tree/1.2.4"
+                "source": "https://github.com/rectorphp/rector/tree/1.2.5"
             },
             "funding": [
                 {
@@ -13234,7 +13234,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-08-23T09:03:01+00:00"
+            "time": "2024-09-08T17:43:24+00:00"
         },
         {
             "name": "sebastian/cli-parser",

From 523da94905a82a292849796eb9d9f09c2b41b940 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 8 Sep 2024 21:25:09 +0000
Subject: [PATCH 263/273] chore(deps): update dependency vimeo/psalm to v5.26.0

---
 api/composer.json |  2 +-
 api/composer.lock | 26 +++++++++++++-------------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 1c8e4fcfda..6bb6089214 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -69,7 +69,7 @@
         "symfony/stopwatch": "7.1.1",
         "symfony/var-dumper": "7.1.4",
         "symfony/web-profiler-bundle": "7.1.4",
-        "vimeo/psalm": "5.25.0"
+        "vimeo/psalm": "5.26.0"
     },
     "config": {
         "optimize-autoloader": true,
diff --git a/api/composer.lock b/api/composer.lock
index 786d84a499..5b1b8203c1 100644
--- a/api/composer.lock
+++ b/api/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": "e1504d206c516db167996275509163fa",
+    "content-hash": "9322cdad44d36234afc9a49546bae3a5",
     "packages": [
         {
             "name": "api-platform/core",
@@ -11740,16 +11740,16 @@
         },
         {
             "name": "netresearch/jsonmapper",
-            "version": "v4.4.1",
+            "version": "v4.5.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/cweiske/jsonmapper.git",
-                "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0"
+                "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/132c75c7dd83e45353ebb9c6c9f591952995bbf0",
-                "reference": "132c75c7dd83e45353ebb9c6c9f591952995bbf0",
+                "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5",
+                "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5",
                 "shasum": ""
             },
             "require": {
@@ -11785,9 +11785,9 @@
             "support": {
                 "email": "cweiske@cweiske.de",
                 "issues": "https://github.com/cweiske/jsonmapper/issues",
-                "source": "https://github.com/cweiske/jsonmapper/tree/v4.4.1"
+                "source": "https://github.com/cweiske/jsonmapper/tree/v4.5.0"
             },
-            "time": "2024-01-31T06:18:54+00:00"
+            "time": "2024-09-08T10:13:13+00:00"
         },
         {
             "name": "nikic/php-parser",
@@ -14970,16 +14970,16 @@
         },
         {
             "name": "vimeo/psalm",
-            "version": "5.25.0",
+            "version": "5.26.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/vimeo/psalm.git",
-                "reference": "01a8eb06b9e9cc6cfb6a320bf9fb14331919d505"
+                "reference": "4787eaf414e16c661902b94dfe5d882223e5b513"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/vimeo/psalm/zipball/01a8eb06b9e9cc6cfb6a320bf9fb14331919d505",
-                "reference": "01a8eb06b9e9cc6cfb6a320bf9fb14331919d505",
+                "url": "https://api.github.com/repos/vimeo/psalm/zipball/4787eaf414e16c661902b94dfe5d882223e5b513",
+                "reference": "4787eaf414e16c661902b94dfe5d882223e5b513",
                 "shasum": ""
             },
             "require": {
@@ -15000,7 +15000,7 @@
                 "felixfbecker/language-server-protocol": "^1.5.2",
                 "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0",
                 "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
-                "nikic/php-parser": "^4.16",
+                "nikic/php-parser": "^4.17",
                 "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0",
                 "sebastian/diff": "^4.0 || ^5.0 || ^6.0",
                 "spatie/array-to-xml": "^2.17.0 || ^3.0",
@@ -15076,7 +15076,7 @@
                 "issues": "https://github.com/vimeo/psalm/issues",
                 "source": "https://github.com/vimeo/psalm"
             },
-            "time": "2024-06-16T15:08:35+00:00"
+            "time": "2024-09-08T00:00:18+00:00"
         }
     ],
     "aliases": [],

From 7c5a914d10856ccfd220e73f3f202241da8aca53 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 9 Sep 2024 11:40:00 +0000
Subject: [PATCH 264/273] chore(deps): update dependency phpstan/phpstan to
 v1.12.3

---
 api/composer.json |  2 +-
 api/composer.lock | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 6bb6089214..720b4fa8e9 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -57,7 +57,7 @@
         "justinrainbow/json-schema": "6.0.0",
         "php-coveralls/php-coveralls": "2.7.0",
         "phpspec/prophecy-phpunit": "2.2",
-        "phpstan/phpstan": "1.12.2",
+        "phpstan/phpstan": "1.12.3",
         "phpunit/phpunit": "10.5.31",
         "rector/rector": "1.2.5",
         "spatie/phpunit-snapshot-assertions": "5.1.6",
diff --git a/api/composer.lock b/api/composer.lock
index 5b1b8203c1..4a6b29ce02 100644
--- a/api/composer.lock
+++ b/api/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": "9322cdad44d36234afc9a49546bae3a5",
+    "content-hash": "1eead27dd999ad7f67530927ec5d2351",
     "packages": [
         {
             "name": "api-platform/core",
@@ -12169,16 +12169,16 @@
         },
         {
             "name": "phpstan/phpstan",
-            "version": "1.12.2",
+            "version": "1.12.3",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1"
+                "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0ca1c7bb55fca8fe6448f16fff0f311ccec960a1",
-                "reference": "0ca1c7bb55fca8fe6448f16fff0f311ccec960a1",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0fcbf194ab63d8159bb70d9aa3e1350051632009",
+                "reference": "0fcbf194ab63d8159bb70d9aa3e1350051632009",
                 "shasum": ""
             },
             "require": {
@@ -12223,7 +12223,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2024-09-05T16:09:28+00:00"
+            "time": "2024-09-09T08:10:35+00:00"
         },
         {
             "name": "phpunit/php-code-coverage",

From c9aacb71f0b3be3cf77a09a42307459147041c5a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 9 Sep 2024 11:40:44 +0000
Subject: [PATCH 265/273] chore(deps): update helm release oauth2-proxy to
 v7.7.17

---
 .ops/ops-dashboard/Chart.lock | 10 +++++-----
 .ops/ops-dashboard/Chart.yaml |  6 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/.ops/ops-dashboard/Chart.lock b/.ops/ops-dashboard/Chart.lock
index f534a2c826..13fcb5724d 100644
--- a/.ops/ops-dashboard/Chart.lock
+++ b/.ops/ops-dashboard/Chart.lock
@@ -1,15 +1,15 @@
 dependencies:
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.16
+  version: 7.7.17
 - name: kubernetes-dashboard
   repository: https://kubernetes.github.io/dashboard/
   version: 7.5.0
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.16
+  version: 7.7.17
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.16
-digest: sha256:3dba6168c5aac2abad258ca513a62932ec474f551357d0a03989dd32eea5f27c
-generated: "2024-09-05T12:46:38.906706795Z"
+  version: 7.7.17
+digest: sha256:0e7550063adac38ab57f7106861b43adf3c86df517644ebf22afb101c88be5af
+generated: "2024-09-09T11:40:29.7976055Z"
diff --git a/.ops/ops-dashboard/Chart.yaml b/.ops/ops-dashboard/Chart.yaml
index ff6c2a56ac..a8604ee157 100644
--- a/.ops/ops-dashboard/Chart.yaml
+++ b/.ops/ops-dashboard/Chart.yaml
@@ -26,16 +26,16 @@ appVersion: 0.1.0
 dependencies:
   - name: oauth2-proxy
     alias: grafana-proxy
-    version: 7.7.16
+    version: 7.7.17
     repository: https://oauth2-proxy.github.io/manifests
   - name: kubernetes-dashboard
     version: 7.5.0
     repository: https://kubernetes.github.io/dashboard/
   - name: oauth2-proxy
     alias: kubernetes-dashboard-proxy
-    version: 7.7.16
+    version: 7.7.17
     repository: https://oauth2-proxy.github.io/manifests
   - name: oauth2-proxy
     alias: logging-proxy
-    version: 7.7.16
+    version: 7.7.17
     repository: https://oauth2-proxy.github.io/manifests

From 9c6ce6039d7e917e78b038848863fb6ed200b7b0 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 9 Sep 2024 12:47:40 +0000
Subject: [PATCH 266/273] fix(deps): update sentry-javascript monorepo to
 v8.29.0

---
 .ops/ops-dashboard/Chart.lock |  10 +-
 .ops/ops-dashboard/Chart.yaml |   6 +-
 frontend/package-lock.json    | 114 ++---
 frontend/package.json         |   4 +-
 print/package-lock.json       | 860 ++++++++++++++++++++++++++++------
 print/package.json            |   2 +-
 6 files changed, 782 insertions(+), 214 deletions(-)

diff --git a/.ops/ops-dashboard/Chart.lock b/.ops/ops-dashboard/Chart.lock
index 13fcb5724d..f534a2c826 100644
--- a/.ops/ops-dashboard/Chart.lock
+++ b/.ops/ops-dashboard/Chart.lock
@@ -1,15 +1,15 @@
 dependencies:
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.17
+  version: 7.7.16
 - name: kubernetes-dashboard
   repository: https://kubernetes.github.io/dashboard/
   version: 7.5.0
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.17
+  version: 7.7.16
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.17
-digest: sha256:0e7550063adac38ab57f7106861b43adf3c86df517644ebf22afb101c88be5af
-generated: "2024-09-09T11:40:29.7976055Z"
+  version: 7.7.16
+digest: sha256:3dba6168c5aac2abad258ca513a62932ec474f551357d0a03989dd32eea5f27c
+generated: "2024-09-05T12:46:38.906706795Z"
diff --git a/.ops/ops-dashboard/Chart.yaml b/.ops/ops-dashboard/Chart.yaml
index a8604ee157..ff6c2a56ac 100644
--- a/.ops/ops-dashboard/Chart.yaml
+++ b/.ops/ops-dashboard/Chart.yaml
@@ -26,16 +26,16 @@ appVersion: 0.1.0
 dependencies:
   - name: oauth2-proxy
     alias: grafana-proxy
-    version: 7.7.17
+    version: 7.7.16
     repository: https://oauth2-proxy.github.io/manifests
   - name: kubernetes-dashboard
     version: 7.5.0
     repository: https://kubernetes.github.io/dashboard/
   - name: oauth2-proxy
     alias: kubernetes-dashboard-proxy
-    version: 7.7.17
+    version: 7.7.16
     repository: https://oauth2-proxy.github.io/manifests
   - name: oauth2-proxy
     alias: logging-proxy
-    version: 7.7.17
+    version: 7.7.16
     repository: https://oauth2-proxy.github.io/manifests
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 31f0d21814..b4cc91c6ed 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -14,8 +14,8 @@
         "@react-pdf/pdfkit": "3.1.10",
         "@react-pdf/primitives": "3.1.1",
         "@react-pdf/render": "3.4.4",
-        "@sentry/browser": "8.28.0",
-        "@sentry/vue": "8.28.0",
+        "@sentry/browser": "8.29.0",
+        "@sentry/vue": "8.29.0",
         "@tiptap/extension-bold": "2.6.6",
         "@tiptap/extension-bubble-menu": "2.6.6",
         "@tiptap/extension-bullet-list": "2.6.6",
@@ -3270,58 +3270,58 @@
       ]
     },
     "node_modules/@sentry-internal/browser-utils": {
-      "version": "8.28.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.28.0.tgz",
-      "integrity": "sha512-tE9++KEy8SlqibTmYymuxFVAnutsXBqrwQ936WJbjaMfkqXiro7C1El0ybkprskd0rKS7kln20Q6nQlNlMEoTA==",
+      "version": "8.29.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-8.29.0.tgz",
+      "integrity": "sha512-6HpyQkaqPvK6Lnigjlarq/LDYgXT2OBNf24RK7z0ipJSxSIpmtelfzHbnwWYnypNDXfTDdPm97fZEenQHryYJA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/core": "8.28.0",
-        "@sentry/types": "8.28.0",
-        "@sentry/utils": "8.28.0"
+        "@sentry/core": "8.29.0",
+        "@sentry/types": "8.29.0",
+        "@sentry/utils": "8.29.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry-internal/feedback": {
-      "version": "8.28.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.28.0.tgz",
-      "integrity": "sha512-5vYunPCDBLCJ8QNnhepacdYheiN+UtYxpGAIaC/zjBC1nDuBgWs+TfKPo1UlO/1sesfgs9ibpxtShOweucL61g==",
+      "version": "8.29.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-8.29.0.tgz",
+      "integrity": "sha512-yAL5YMEFk4XaeVRUGEguydahRzaQrNPAaWRv6k+XRzCv9CGBhxb14KXQc9X/penlauMFcDfgelCPKcTqcf6wDw==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/core": "8.28.0",
-        "@sentry/types": "8.28.0",
-        "@sentry/utils": "8.28.0"
+        "@sentry/core": "8.29.0",
+        "@sentry/types": "8.29.0",
+        "@sentry/utils": "8.29.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry-internal/replay": {
-      "version": "8.28.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.28.0.tgz",
-      "integrity": "sha512-70jvzzOL5O74gahgXKyRkZgiYN93yly5gq+bbj4/6NRQ+EtPd285+ccy0laExdfyK0ugvvwD4v+1MQit52OAsg==",
+      "version": "8.29.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-8.29.0.tgz",
+      "integrity": "sha512-Xgv/eYucsm7GaGKms2ClQ02NpD07MxjoTjp1/vYZm0H4Q08dVphVZrQp7hL1oX/VD9mb5SFyyKuuIRqIu7S8RA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry-internal/browser-utils": "8.28.0",
-        "@sentry/core": "8.28.0",
-        "@sentry/types": "8.28.0",
-        "@sentry/utils": "8.28.0"
+        "@sentry-internal/browser-utils": "8.29.0",
+        "@sentry/core": "8.29.0",
+        "@sentry/types": "8.29.0",
+        "@sentry/utils": "8.29.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry-internal/replay-canvas": {
-      "version": "8.28.0",
-      "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.28.0.tgz",
-      "integrity": "sha512-RfpYHDHMUKGeEdx41QtHITjEn6P3tGaDPHvatqdrD3yv4j+wbJ6laX1PrIxCpGFUtjdzkqi/KUcvUd2kzbH/FA==",
+      "version": "8.29.0",
+      "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-8.29.0.tgz",
+      "integrity": "sha512-W2YbZRvp2lYC50V51fNLcnoIiK1Km4vSc+v6SL7c//lv2qpyumoUAAIDKY+14s8Lgt1RsR6rfZhfheD4O/6WSQ==",
       "license": "MIT",
       "dependencies": {
-        "@sentry-internal/replay": "8.28.0",
-        "@sentry/core": "8.28.0",
-        "@sentry/types": "8.28.0",
-        "@sentry/utils": "8.28.0"
+        "@sentry-internal/replay": "8.29.0",
+        "@sentry/core": "8.29.0",
+        "@sentry/types": "8.29.0",
+        "@sentry/utils": "8.29.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3338,18 +3338,18 @@
       }
     },
     "node_modules/@sentry/browser": {
-      "version": "8.28.0",
-      "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.28.0.tgz",
-      "integrity": "sha512-i/gjMYzIGQiPFH1pCbdnTwH9xs9mTAqzN+goP3GWX5a58frc7h8vxyA/5z0yMd0aCW6U8mVxnoAT72vGbKbx0g==",
+      "version": "8.29.0",
+      "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-8.29.0.tgz",
+      "integrity": "sha512-aKTy4H/3RI0q9LIeepesjWGlGNeh4HGFfwQjzHME8gcWCQ5LSlzYX4U+hu2yp7r1Jfd9MUTFfOuuLih2HGLGsQ==",
       "license": "MIT",
       "dependencies": {
-        "@sentry-internal/browser-utils": "8.28.0",
-        "@sentry-internal/feedback": "8.28.0",
-        "@sentry-internal/replay": "8.28.0",
-        "@sentry-internal/replay-canvas": "8.28.0",
-        "@sentry/core": "8.28.0",
-        "@sentry/types": "8.28.0",
-        "@sentry/utils": "8.28.0"
+        "@sentry-internal/browser-utils": "8.29.0",
+        "@sentry-internal/feedback": "8.29.0",
+        "@sentry-internal/replay": "8.29.0",
+        "@sentry-internal/replay-canvas": "8.29.0",
+        "@sentry/core": "8.29.0",
+        "@sentry/types": "8.29.0",
+        "@sentry/utils": "8.29.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3528,34 +3528,34 @@
       }
     },
     "node_modules/@sentry/core": {
-      "version": "8.28.0",
-      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.28.0.tgz",
-      "integrity": "sha512-+If9uubvpZpvaQQw4HLiKPhrSS9/KcoA/AcdQkNm+5CVwAoOmDPtyYfkPBgfo2hLZnZQqR1bwkz/PrNoOm+gqA==",
+      "version": "8.29.0",
+      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.29.0.tgz",
+      "integrity": "sha512-scMbZaJ0Ov8NPgWn86EdjhyTLrhvRVbTxjg0imJAvhIvRbblH3xyqye/17Qnk2fOp8TNDOl7TBZHi0NCFQ5HUw==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.28.0",
-        "@sentry/utils": "8.28.0"
+        "@sentry/types": "8.29.0",
+        "@sentry/utils": "8.29.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/types": {
-      "version": "8.28.0",
-      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.28.0.tgz",
-      "integrity": "sha512-hOfqfd92/AzBrEdMgmmV1VfOXJbIfleFTnerRl0mg/+CcNgP/6+Fdonp354TD56ouWNF2WkOM6sEKSXMWp6SEQ==",
+      "version": "8.29.0",
+      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.29.0.tgz",
+      "integrity": "sha512-j4gX3ctzgD4xVWllXAhm6M+kHFEvrFoUPFq60X/pgkjsWCocGuhtNfB0rW43ICG8hCnlz8IYl7O7b8V8qY7SPg==",
       "license": "MIT",
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/utils": {
-      "version": "8.28.0",
-      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.28.0.tgz",
-      "integrity": "sha512-smhk7PJpvDMQ2DB5p2qn9UeoUHdU41IgjMmS2xklZpa8tjzBTxDeWpGvrX2fuH67D9bAJuLC/XyZjJCHLoEW5g==",
+      "version": "8.29.0",
+      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.29.0.tgz",
+      "integrity": "sha512-nb93/m3SjQChQJFqJj3oNW3Rz/12yrT7jypTCire3c2hpYWG2uR5n8VY9UUMTA6HLNvdom6tckK7p3bXGXlF0w==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.28.0"
+        "@sentry/types": "8.29.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -3576,15 +3576,15 @@
       }
     },
     "node_modules/@sentry/vue": {
-      "version": "8.28.0",
-      "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-8.28.0.tgz",
-      "integrity": "sha512-2zKNlWUKvJe1DqjtEWIaSCYUqvVbARZiu+xxsfEd8ksYukH/dV+iZaAEx5ESypnQtDBk6C/bCwvFIMgztDL8MA==",
+      "version": "8.29.0",
+      "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-8.29.0.tgz",
+      "integrity": "sha512-LvS9SbQxwmjPwRNOfj189XKGDxebUyIxHRNtxPMSO1LEWIkhDK1WC88bZCdFUf59t4vaAgel6UdGVbWkB+eOwA==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/browser": "8.28.0",
-        "@sentry/core": "8.28.0",
-        "@sentry/types": "8.28.0",
-        "@sentry/utils": "8.28.0"
+        "@sentry/browser": "8.29.0",
+        "@sentry/core": "8.29.0",
+        "@sentry/types": "8.29.0",
+        "@sentry/utils": "8.29.0"
       },
       "engines": {
         "node": ">=14.18"
diff --git a/frontend/package.json b/frontend/package.json
index ba91e1a95f..2c974fa0a9 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -26,8 +26,8 @@
     "@react-pdf/pdfkit": "3.1.10",
     "@react-pdf/primitives": "3.1.1",
     "@react-pdf/render": "3.4.4",
-    "@sentry/browser": "8.28.0",
-    "@sentry/vue": "8.28.0",
+    "@sentry/browser": "8.29.0",
+    "@sentry/vue": "8.29.0",
     "@tiptap/extension-bold": "2.6.6",
     "@tiptap/extension-bubble-menu": "2.6.6",
     "@tiptap/extension-bullet-list": "2.6.6",
diff --git a/print/package-lock.json b/print/package-lock.json
index da1310b712..d0365b4c0b 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -8,7 +8,7 @@
       "dependencies": {
         "@jamescoyle/vue-icon": "0.1.2",
         "@mdi/js": "7.4.47",
-        "@sentry/node": "8.28.0",
+        "@sentry/node": "8.29.0",
         "axios": "1.7.7",
         "colorjs.io": "0.5.2",
         "dayjs": "1.11.13",
@@ -2861,14 +2861,14 @@
       }
     },
     "node_modules/@opentelemetry/instrumentation-connect": {
-      "version": "0.38.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.38.0.tgz",
-      "integrity": "sha512-2/nRnx3pjYEmdPIaBwtgtSviTKHWnDZN3R+TkRUnhIVrvBKVcq+I5B2rtd6mr6Fe9cHlZ9Ojcuh7pkNh/xdWWg==",
+      "version": "0.39.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.39.0.tgz",
+      "integrity": "sha512-pGBiKevLq7NNglMgqzmeKczF4XQMTOUOTkK8afRHMZMnrK3fcETyTH7lVaSozwiOM3Ws+SuEmXZT7DYrrhxGlg==",
       "license": "Apache-2.0",
       "dependencies": {
         "@opentelemetry/core": "^1.8.0",
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0",
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0",
         "@types/connect": "3.4.36"
       },
       "engines": {
@@ -2878,15 +2878,79 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
+    "node_modules/@opentelemetry/instrumentation-connect/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-connect/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
     "node_modules/@opentelemetry/instrumentation-express": {
-      "version": "0.41.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.41.1.tgz",
-      "integrity": "sha512-uRx0V3LPGzjn2bxAnV8eUsDT82vT7NTwI0ezEuPMBOTOsnPpGhWdhcdNdhH80sM4TrWrOfXm9HGEdfWE3TRIww==",
+      "version": "0.42.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.42.0.tgz",
+      "integrity": "sha512-YNcy7ZfGnLsVEqGXQPT+S0G1AE46N21ORY7i7yUQyfhGAL4RBjnZUqefMI0NwqIl6nGbr1IpF0rZGoN8Q7x12Q==",
       "license": "Apache-2.0",
       "dependencies": {
         "@opentelemetry/core": "^1.8.0",
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0"
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-express/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-express/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
       },
       "engines": {
         "node": ">=14"
@@ -2896,14 +2960,46 @@
       }
     },
     "node_modules/@opentelemetry/instrumentation-fastify": {
-      "version": "0.38.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.38.0.tgz",
-      "integrity": "sha512-HBVLpTSYpkQZ87/Df3N0gAw7VzYZV3n28THIBrJWfuqw3Or7UqdhnjeuMIPQ04BKk3aZc0cWn2naSQObbh5vXw==",
+      "version": "0.39.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.39.0.tgz",
+      "integrity": "sha512-SS9uSlKcsWZabhBp2szErkeuuBDgxOUlllwkS92dVaWRnMmwysPhcEgHKB8rUe3BHg/GnZC1eo1hbTZv4YhfoA==",
       "license": "Apache-2.0",
       "dependencies": {
         "@opentelemetry/core": "^1.8.0",
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0"
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-fastify/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-fastify/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
       },
       "engines": {
         "node": ">=14"
@@ -2913,13 +3009,92 @@
       }
     },
     "node_modules/@opentelemetry/instrumentation-fs": {
-      "version": "0.14.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.14.0.tgz",
-      "integrity": "sha512-pVc8P5AgliC1DphyyBUgsxXlm2XaPH4BpYvt7rAZDMIqUpRk8gs19SioABtKqqxvFzg5jPtgJfJsdxq0Y+maLw==",
+      "version": "0.15.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.15.0.tgz",
+      "integrity": "sha512-JWVKdNLpu1skqZQA//jKOcKdJC66TWKqa2FUFq70rKohvaSq47pmXlnabNO+B/BvLfmidfiaN35XakT5RyMl2Q==",
       "license": "Apache-2.0",
       "dependencies": {
         "@opentelemetry/core": "^1.8.0",
-        "@opentelemetry/instrumentation": "^0.52.0"
+        "@opentelemetry/instrumentation": "^0.53.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-fs/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-fs/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-generic-pool": {
+      "version": "0.39.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.39.0.tgz",
+      "integrity": "sha512-y4v8Y+tSfRB3NNBvHjbjrn7rX/7sdARG7FuK6zR8PGb28CTa0kHpEGCJqvL9L8xkTNvTXo+lM36ajFGUaK1aNw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/instrumentation": "^0.53.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-generic-pool/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-generic-pool/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
       },
       "engines": {
         "node": ">=14"
@@ -2929,12 +3104,44 @@
       }
     },
     "node_modules/@opentelemetry/instrumentation-graphql": {
-      "version": "0.42.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.42.0.tgz",
-      "integrity": "sha512-N8SOwoKL9KQSX7z3gOaw5UaTeVQcfDO1c21csVHnmnmGUoqsXbArK2B8VuwPWcv6/BC/i3io+xTo7QGRZ/z28Q==",
+      "version": "0.43.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.43.0.tgz",
+      "integrity": "sha512-aI3YMmC2McGd8KW5du1a2gBA0iOMOGLqg4s9YjzwbjFwjlmMNFSK1P3AIg374GWg823RPUGfVTIgZ/juk9CVOA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0"
+        "@opentelemetry/instrumentation": "^0.53.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-graphql/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-graphql/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
       },
       "engines": {
         "node": ">=14"
@@ -2944,14 +3151,14 @@
       }
     },
     "node_modules/@opentelemetry/instrumentation-hapi": {
-      "version": "0.40.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.40.0.tgz",
-      "integrity": "sha512-8U/w7Ifumtd2bSN1OLaSwAAFhb9FyqWUki3lMMB0ds+1+HdSxYBe9aspEJEgvxAqOkrQnVniAPTEGf1pGM7SOw==",
+      "version": "0.41.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.41.0.tgz",
+      "integrity": "sha512-jKDrxPNXDByPlYcMdZjNPYCvw0SQJjN+B1A+QH+sx+sAHsKSAf9hwFiJSrI6C4XdOls43V/f/fkp9ITkHhKFbQ==",
       "license": "Apache-2.0",
       "dependencies": {
         "@opentelemetry/core": "^1.8.0",
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0"
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0"
       },
       "engines": {
         "node": ">=14"
@@ -2960,16 +3167,30 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-http": {
-      "version": "0.52.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.52.1.tgz",
-      "integrity": "sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==",
+    "node_modules/@opentelemetry/instrumentation-hapi/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/core": "1.25.1",
-        "@opentelemetry/instrumentation": "0.52.1",
-        "@opentelemetry/semantic-conventions": "1.25.1",
-        "semver": "^7.5.2"
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-hapi/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
       },
       "engines": {
         "node": ">=14"
@@ -2978,39 +3199,97 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/core": {
-      "version": "1.25.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz",
-      "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==",
+    "node_modules/@opentelemetry/instrumentation-http": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.53.0.tgz",
+      "integrity": "sha512-H74ErMeDuZfj7KgYCTOFGWF5W9AfaPnqLQQxeFq85+D29wwV2yqHbz2IKLYpkOh7EI6QwDEl7rZCIxjJLyc/CQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/semantic-conventions": "1.25.1"
+        "@opentelemetry/core": "1.26.0",
+        "@opentelemetry/instrumentation": "0.53.0",
+        "@opentelemetry/semantic-conventions": "1.27.0",
+        "semver": "^7.5.2"
       },
       "engines": {
         "node": ">=14"
       },
       "peerDependencies": {
-        "@opentelemetry/api": ">=1.0.0 <1.10.0"
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/semantic-conventions": {
-      "version": "1.25.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz",
-      "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==",
+    "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
       "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
       "engines": {
         "node": ">=14"
       }
     },
+    "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
     "node_modules/@opentelemetry/instrumentation-ioredis": {
-      "version": "0.42.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.42.0.tgz",
-      "integrity": "sha512-P11H168EKvBB9TUSasNDOGJCSkpT44XgoM6d3gRIWAa9ghLpYhl0uRkS8//MqPzcJVHr3h3RmfXIpiYLjyIZTw==",
+      "version": "0.43.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.43.0.tgz",
+      "integrity": "sha512-i3Dke/LdhZbiUAEImmRG3i7Dimm/BD7t8pDDzwepSvIQ6s2X6FPia7561gw+64w+nx0+G9X14D7rEfaMEmmjig==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0",
+        "@opentelemetry/instrumentation": "^0.53.0",
         "@opentelemetry/redis-common": "^0.36.2",
-        "@opentelemetry/semantic-conventions": "^1.23.0"
+        "@opentelemetry/semantic-conventions": "^1.27.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-ioredis/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-ioredis/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
       },
       "engines": {
         "node": ">=14"
@@ -3020,14 +3299,46 @@
       }
     },
     "node_modules/@opentelemetry/instrumentation-koa": {
-      "version": "0.42.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.42.0.tgz",
-      "integrity": "sha512-H1BEmnMhho8o8HuNRq5zEI4+SIHDIglNB7BPKohZyWG4fWNuR7yM4GTlR01Syq21vODAS7z5omblScJD/eZdKw==",
+      "version": "0.43.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.43.0.tgz",
+      "integrity": "sha512-lDAhSnmoTIN6ELKmLJBplXzT/Jqs5jGZehuG22EdSMaTwgjMpxMDI1YtlKEhiWPWkrz5LUsd0aOO0ZRc9vn3AQ==",
       "license": "Apache-2.0",
       "dependencies": {
         "@opentelemetry/core": "^1.8.0",
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0"
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-koa/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-koa/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
       },
       "engines": {
         "node": ">=14"
@@ -3037,14 +3348,46 @@
       }
     },
     "node_modules/@opentelemetry/instrumentation-mongodb": {
-      "version": "0.46.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.46.0.tgz",
-      "integrity": "sha512-VF/MicZ5UOBiXrqBslzwxhN7TVqzu1/LN/QDpkskqM0Zm0aZ4CVRbUygL8d7lrjLn15x5kGIe8VsSphMfPJzlA==",
+      "version": "0.47.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.47.0.tgz",
+      "integrity": "sha512-yqyXRx2SulEURjgOQyJzhCECSh5i1uM49NUaq9TqLd6fA7g26OahyJfsr9NE38HFqGRHpi4loyrnfYGdrsoVjQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0",
+        "@opentelemetry/instrumentation": "^0.53.0",
         "@opentelemetry/sdk-metrics": "^1.9.1",
-        "@opentelemetry/semantic-conventions": "^1.22.0"
+        "@opentelemetry/semantic-conventions": "^1.27.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-mongodb/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-mongodb/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
       },
       "engines": {
         "node": ">=14"
@@ -3054,14 +3397,46 @@
       }
     },
     "node_modules/@opentelemetry/instrumentation-mongoose": {
-      "version": "0.40.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.40.0.tgz",
-      "integrity": "sha512-niRi5ZUnkgzRhIGMOozTyoZIvJKNJyhijQI4nF4iFSb+FUx2v5fngfR+8XLmdQAO7xmsD8E5vEGdDVYVtKbZew==",
+      "version": "0.42.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.42.0.tgz",
+      "integrity": "sha512-AnWv+RaR86uG3qNEMwt3plKX1ueRM7AspfszJYVkvkehiicC3bHQA6vWdb6Zvy5HAE14RyFbu9+2hUUjR2NSyg==",
       "license": "Apache-2.0",
       "dependencies": {
         "@opentelemetry/core": "^1.8.0",
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0"
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-mongoose/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-mongoose/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
       },
       "engines": {
         "node": ">=14"
@@ -3071,14 +3446,46 @@
       }
     },
     "node_modules/@opentelemetry/instrumentation-mysql": {
-      "version": "0.40.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.40.0.tgz",
-      "integrity": "sha512-d7ja8yizsOCNMYIJt5PH/fKZXjb/mS48zLROO4BzZTtDfhNCl2UM/9VIomP2qkGIFVouSJrGr/T00EzY7bPtKA==",
+      "version": "0.41.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.41.0.tgz",
+      "integrity": "sha512-jnvrV6BsQWyHS2qb2fkfbfSb1R/lmYwqEZITwufuRl37apTopswu9izc0b1CYRp/34tUG/4k/V39PND6eyiNvw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0",
-        "@types/mysql": "2.15.22"
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0",
+        "@types/mysql": "2.15.26"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-mysql/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-mysql/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
       },
       "engines": {
         "node": ">=14"
@@ -3088,13 +3495,13 @@
       }
     },
     "node_modules/@opentelemetry/instrumentation-mysql2": {
-      "version": "0.40.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.40.0.tgz",
-      "integrity": "sha512-0xfS1xcqUmY7WE1uWjlmI67Xg3QsSUlNT+AcXHeA4BDUPwZtWqF4ezIwLgpVZfHOnkAEheqGfNSWd1PIu3Wnfg==",
+      "version": "0.41.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.41.0.tgz",
+      "integrity": "sha512-REQB0x+IzVTpoNgVmy5b+UnH1/mDByrneimP6sbDHkp1j8QOl1HyWOrBH/6YWR0nrbU3l825Em5PlybjT3232g==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0",
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0",
         "@opentelemetry/sql-common": "^0.40.1"
       },
       "engines": {
@@ -3104,14 +3511,78 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
+    "node_modules/@opentelemetry/instrumentation-mysql2/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-mysql2/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
     "node_modules/@opentelemetry/instrumentation-nestjs-core": {
-      "version": "0.39.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.39.0.tgz",
-      "integrity": "sha512-mewVhEXdikyvIZoMIUry8eb8l3HUjuQjSjVbmLVTt4NQi35tkpnHQrG9bTRBrl3403LoWZ2njMPJyg4l6HfKvA==",
+      "version": "0.40.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.40.0.tgz",
+      "integrity": "sha512-WF1hCUed07vKmf5BzEkL0wSPinqJgH7kGzOjjMAiTGacofNXjb/y4KQ8loj2sNsh5C/NN7s1zxQuCgbWbVTGKg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.23.0"
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-nestjs-core/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-nestjs-core/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
       },
       "engines": {
         "node": ">=14"
@@ -3121,16 +3592,48 @@
       }
     },
     "node_modules/@opentelemetry/instrumentation-pg": {
-      "version": "0.43.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.43.0.tgz",
-      "integrity": "sha512-og23KLyoxdnAeFs1UWqzSonuCkePUzCX30keSYigIzJe/6WSYA8rnEI5lobcxPEzg+GcU06J7jzokuEHbjVJNw==",
+      "version": "0.44.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.44.0.tgz",
+      "integrity": "sha512-oTWVyzKqXud1BYEGX1loo2o4k4vaU1elr3vPO8NZolrBtFvQ34nx4HgUaexUDuEog00qQt+MLR5gws/p+JXMLQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0",
-        "@opentelemetry/semantic-conventions": "^1.22.0",
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0",
         "@opentelemetry/sql-common": "^0.40.1",
         "@types/pg": "8.6.1",
-        "@types/pg-pool": "2.0.4"
+        "@types/pg-pool": "2.0.6"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-pg/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-pg/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
       },
       "engines": {
         "node": ">=14"
@@ -3140,14 +3643,46 @@
       }
     },
     "node_modules/@opentelemetry/instrumentation-redis-4": {
-      "version": "0.41.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.41.0.tgz",
-      "integrity": "sha512-H7IfGTqW2reLXqput4yzAe8YpDC0fmVNal95GHMLOrS89W+qWUKIqxolSh63hJyfmwPSFwXASzj7wpSk8Az+Dg==",
+      "version": "0.42.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.42.0.tgz",
+      "integrity": "sha512-NaD+t2JNcOzX/Qa7kMy68JbmoVIV37fT/fJYzLKu2Wwd+0NCxt+K2OOsOakA8GVg8lSpFdbx4V/suzZZ2Pvdjg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/instrumentation": "^0.52.0",
+        "@opentelemetry/instrumentation": "^0.53.0",
         "@opentelemetry/redis-common": "^0.36.2",
-        "@opentelemetry/semantic-conventions": "^1.22.0"
+        "@opentelemetry/semantic-conventions": "^1.27.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-redis-4/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation-redis-4/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
       },
       "engines": {
         "node": ">=14"
@@ -3597,9 +4132,9 @@
       "license": "MIT"
     },
     "node_modules/@prisma/instrumentation": {
-      "version": "5.18.0",
-      "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-5.18.0.tgz",
-      "integrity": "sha512-r074avGkpPXItk+josQPhufZEmGhUCb16PQx4ITPS40vWTpTPET4VsgCBZB2alIN6SS7pRFod2vz2M2HHEEylQ==",
+      "version": "5.19.1",
+      "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-5.19.1.tgz",
+      "integrity": "sha512-VLnzMQq7CWroL5AeaW0Py2huiNKeoMfCH3SUxstdzPrlWQi6UQ9UrfcbUkNHlVFqOMacqy8X/8YtE0kuKDpD9w==",
       "license": "Apache-2.0",
       "dependencies": {
         "@opentelemetry/api": "^1.8",
@@ -4140,52 +4675,53 @@
       ]
     },
     "node_modules/@sentry/core": {
-      "version": "8.28.0",
-      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.28.0.tgz",
-      "integrity": "sha512-+If9uubvpZpvaQQw4HLiKPhrSS9/KcoA/AcdQkNm+5CVwAoOmDPtyYfkPBgfo2hLZnZQqR1bwkz/PrNoOm+gqA==",
+      "version": "8.29.0",
+      "resolved": "https://registry.npmjs.org/@sentry/core/-/core-8.29.0.tgz",
+      "integrity": "sha512-scMbZaJ0Ov8NPgWn86EdjhyTLrhvRVbTxjg0imJAvhIvRbblH3xyqye/17Qnk2fOp8TNDOl7TBZHi0NCFQ5HUw==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.28.0",
-        "@sentry/utils": "8.28.0"
+        "@sentry/types": "8.29.0",
+        "@sentry/utils": "8.29.0"
       },
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/node": {
-      "version": "8.28.0",
-      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.28.0.tgz",
-      "integrity": "sha512-444hx0S7EAYDdq3g2U37qHFC/WFErgf8ZvXqhWfoCI4RweHHntdFbz3azexYnO61iUsmSAnFAX6htJtAG2zNdA==",
+      "version": "8.29.0",
+      "resolved": "https://registry.npmjs.org/@sentry/node/-/node-8.29.0.tgz",
+      "integrity": "sha512-RCKpWR6DUWmlxtms10MRXwJZRrFt1a2P38FjwEEahcdcK1R6wB8GPf0GO4JnJAiw6oeM0MERSqLIcSLT8+FxtA==",
       "license": "MIT",
       "dependencies": {
         "@opentelemetry/api": "^1.9.0",
         "@opentelemetry/context-async-hooks": "^1.25.1",
         "@opentelemetry/core": "^1.25.1",
-        "@opentelemetry/instrumentation": "^0.52.1",
-        "@opentelemetry/instrumentation-connect": "0.38.0",
-        "@opentelemetry/instrumentation-express": "0.41.1",
-        "@opentelemetry/instrumentation-fastify": "0.38.0",
-        "@opentelemetry/instrumentation-fs": "0.14.0",
-        "@opentelemetry/instrumentation-graphql": "0.42.0",
-        "@opentelemetry/instrumentation-hapi": "0.40.0",
-        "@opentelemetry/instrumentation-http": "0.52.1",
-        "@opentelemetry/instrumentation-ioredis": "0.42.0",
-        "@opentelemetry/instrumentation-koa": "0.42.0",
-        "@opentelemetry/instrumentation-mongodb": "0.46.0",
-        "@opentelemetry/instrumentation-mongoose": "0.40.0",
-        "@opentelemetry/instrumentation-mysql": "0.40.0",
-        "@opentelemetry/instrumentation-mysql2": "0.40.0",
-        "@opentelemetry/instrumentation-nestjs-core": "0.39.0",
-        "@opentelemetry/instrumentation-pg": "0.43.0",
-        "@opentelemetry/instrumentation-redis-4": "0.41.0",
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/instrumentation-connect": "0.39.0",
+        "@opentelemetry/instrumentation-express": "0.42.0",
+        "@opentelemetry/instrumentation-fastify": "0.39.0",
+        "@opentelemetry/instrumentation-fs": "0.15.0",
+        "@opentelemetry/instrumentation-generic-pool": "0.39.0",
+        "@opentelemetry/instrumentation-graphql": "0.43.0",
+        "@opentelemetry/instrumentation-hapi": "0.41.0",
+        "@opentelemetry/instrumentation-http": "0.53.0",
+        "@opentelemetry/instrumentation-ioredis": "0.43.0",
+        "@opentelemetry/instrumentation-koa": "0.43.0",
+        "@opentelemetry/instrumentation-mongodb": "0.47.0",
+        "@opentelemetry/instrumentation-mongoose": "0.42.0",
+        "@opentelemetry/instrumentation-mysql": "0.41.0",
+        "@opentelemetry/instrumentation-mysql2": "0.41.0",
+        "@opentelemetry/instrumentation-nestjs-core": "0.40.0",
+        "@opentelemetry/instrumentation-pg": "0.44.0",
+        "@opentelemetry/instrumentation-redis-4": "0.42.0",
         "@opentelemetry/resources": "^1.25.1",
         "@opentelemetry/sdk-trace-base": "^1.25.1",
         "@opentelemetry/semantic-conventions": "^1.25.1",
-        "@prisma/instrumentation": "5.18.0",
-        "@sentry/core": "8.28.0",
-        "@sentry/opentelemetry": "8.28.0",
-        "@sentry/types": "8.28.0",
-        "@sentry/utils": "8.28.0",
+        "@prisma/instrumentation": "5.19.1",
+        "@sentry/core": "8.29.0",
+        "@sentry/opentelemetry": "8.29.0",
+        "@sentry/types": "8.29.0",
+        "@sentry/utils": "8.29.0",
         "import-in-the-middle": "^1.11.0"
       },
       "engines": {
@@ -4195,15 +4731,47 @@
         "opentelemetry-instrumentation-fetch-node": "1.2.3"
       }
     },
+    "node_modules/@sentry/node/node_modules/@opentelemetry/api-logs": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@sentry/node/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
     "node_modules/@sentry/opentelemetry": {
-      "version": "8.28.0",
-      "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.28.0.tgz",
-      "integrity": "sha512-xClK/fa2Y9AMoaV6f7sWfoHAz56actn2RN3UuYAfxlgmNEfZEa0tc78x4XygCT+2b83QbUb+qf1q4+1ft+HEsQ==",
+      "version": "8.29.0",
+      "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.29.0.tgz",
+      "integrity": "sha512-MtfjDMUuKFYlyw9hZohp9xnphz+6QosyHb2zCV3e/fANoA53FDxmg/Co7haMohUCiOwwJPytUmSQQaP0nyL2Uw==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/core": "8.28.0",
-        "@sentry/types": "8.28.0",
-        "@sentry/utils": "8.28.0"
+        "@sentry/core": "8.29.0",
+        "@sentry/types": "8.29.0",
+        "@sentry/utils": "8.29.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -4217,21 +4785,21 @@
       }
     },
     "node_modules/@sentry/types": {
-      "version": "8.28.0",
-      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.28.0.tgz",
-      "integrity": "sha512-hOfqfd92/AzBrEdMgmmV1VfOXJbIfleFTnerRl0mg/+CcNgP/6+Fdonp354TD56ouWNF2WkOM6sEKSXMWp6SEQ==",
+      "version": "8.29.0",
+      "resolved": "https://registry.npmjs.org/@sentry/types/-/types-8.29.0.tgz",
+      "integrity": "sha512-j4gX3ctzgD4xVWllXAhm6M+kHFEvrFoUPFq60X/pgkjsWCocGuhtNfB0rW43ICG8hCnlz8IYl7O7b8V8qY7SPg==",
       "license": "MIT",
       "engines": {
         "node": ">=14.18"
       }
     },
     "node_modules/@sentry/utils": {
-      "version": "8.28.0",
-      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.28.0.tgz",
-      "integrity": "sha512-smhk7PJpvDMQ2DB5p2qn9UeoUHdU41IgjMmS2xklZpa8tjzBTxDeWpGvrX2fuH67D9bAJuLC/XyZjJCHLoEW5g==",
+      "version": "8.29.0",
+      "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-8.29.0.tgz",
+      "integrity": "sha512-nb93/m3SjQChQJFqJj3oNW3Rz/12yrT7jypTCire3c2hpYWG2uR5n8VY9UUMTA6HLNvdom6tckK7p3bXGXlF0w==",
       "license": "MIT",
       "dependencies": {
-        "@sentry/types": "8.28.0"
+        "@sentry/types": "8.29.0"
       },
       "engines": {
         "node": ">=14.18"
@@ -4370,9 +4938,9 @@
       "license": "MIT"
     },
     "node_modules/@types/mysql": {
-      "version": "2.15.22",
-      "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.22.tgz",
-      "integrity": "sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==",
+      "version": "2.15.26",
+      "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz",
+      "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==",
       "license": "MIT",
       "dependencies": {
         "@types/node": "*"
@@ -4406,9 +4974,9 @@
       }
     },
     "node_modules/@types/pg-pool": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.4.tgz",
-      "integrity": "sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==",
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz",
+      "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==",
       "license": "MIT",
       "dependencies": {
         "@types/pg": "*"
diff --git a/print/package.json b/print/package.json
index a56adfb7e0..285da37eec 100644
--- a/print/package.json
+++ b/print/package.json
@@ -17,7 +17,7 @@
   "dependencies": {
     "@jamescoyle/vue-icon": "0.1.2",
     "@mdi/js": "7.4.47",
-    "@sentry/node": "8.28.0",
+    "@sentry/node": "8.29.0",
     "axios": "1.7.7",
     "colorjs.io": "0.5.2",
     "dayjs": "1.11.13",

From fee2c5170cab1913a7be4029d30ebff5b3ec54fa Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 9 Sep 2024 16:19:37 +0000
Subject: [PATCH 267/273] chore(deps): update helm release oauth2-proxy to
 v7.7.17

---
 .ops/ops-dashboard/Chart.lock | 10 +++++-----
 .ops/ops-dashboard/Chart.yaml |  6 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/.ops/ops-dashboard/Chart.lock b/.ops/ops-dashboard/Chart.lock
index f534a2c826..f4c4a7c686 100644
--- a/.ops/ops-dashboard/Chart.lock
+++ b/.ops/ops-dashboard/Chart.lock
@@ -1,15 +1,15 @@
 dependencies:
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.16
+  version: 7.7.17
 - name: kubernetes-dashboard
   repository: https://kubernetes.github.io/dashboard/
   version: 7.5.0
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.16
+  version: 7.7.17
 - name: oauth2-proxy
   repository: https://oauth2-proxy.github.io/manifests
-  version: 7.7.16
-digest: sha256:3dba6168c5aac2abad258ca513a62932ec474f551357d0a03989dd32eea5f27c
-generated: "2024-09-05T12:46:38.906706795Z"
+  version: 7.7.17
+digest: sha256:0e7550063adac38ab57f7106861b43adf3c86df517644ebf22afb101c88be5af
+generated: "2024-09-09T16:19:24.295493803Z"
diff --git a/.ops/ops-dashboard/Chart.yaml b/.ops/ops-dashboard/Chart.yaml
index ff6c2a56ac..a8604ee157 100644
--- a/.ops/ops-dashboard/Chart.yaml
+++ b/.ops/ops-dashboard/Chart.yaml
@@ -26,16 +26,16 @@ appVersion: 0.1.0
 dependencies:
   - name: oauth2-proxy
     alias: grafana-proxy
-    version: 7.7.16
+    version: 7.7.17
     repository: https://oauth2-proxy.github.io/manifests
   - name: kubernetes-dashboard
     version: 7.5.0
     repository: https://kubernetes.github.io/dashboard/
   - name: oauth2-proxy
     alias: kubernetes-dashboard-proxy
-    version: 7.7.16
+    version: 7.7.17
     repository: https://oauth2-proxy.github.io/manifests
   - name: oauth2-proxy
     alias: logging-proxy
-    version: 7.7.16
+    version: 7.7.17
     repository: https://oauth2-proxy.github.io/manifests

From edf9d72d6dc06f77194a2c582b53b036e7a56a07 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 9 Sep 2024 20:31:33 +0000
Subject: [PATCH 268/273] chore(deps): update dependency vimeo/psalm to v5.26.1

---
 api/composer.json |  2 +-
 api/composer.lock | 12 ++++++------
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 720b4fa8e9..142bca9838 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -69,7 +69,7 @@
         "symfony/stopwatch": "7.1.1",
         "symfony/var-dumper": "7.1.4",
         "symfony/web-profiler-bundle": "7.1.4",
-        "vimeo/psalm": "5.26.0"
+        "vimeo/psalm": "5.26.1"
     },
     "config": {
         "optimize-autoloader": true,
diff --git a/api/composer.lock b/api/composer.lock
index 85ba575ba3..ef86c8bf35 100644
--- a/api/composer.lock
+++ b/api/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": "1eead27dd999ad7f67530927ec5d2351",
+    "content-hash": "268893dd32f4f3cdade81373480c5396",
     "packages": [
         {
             "name": "api-platform/core",
@@ -14970,16 +14970,16 @@
         },
         {
             "name": "vimeo/psalm",
-            "version": "5.26.0",
+            "version": "5.26.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/vimeo/psalm.git",
-                "reference": "4787eaf414e16c661902b94dfe5d882223e5b513"
+                "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/vimeo/psalm/zipball/4787eaf414e16c661902b94dfe5d882223e5b513",
-                "reference": "4787eaf414e16c661902b94dfe5d882223e5b513",
+                "url": "https://api.github.com/repos/vimeo/psalm/zipball/d747f6500b38ac4f7dfc5edbcae6e4b637d7add0",
+                "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0",
                 "shasum": ""
             },
             "require": {
@@ -15076,7 +15076,7 @@
                 "issues": "https://github.com/vimeo/psalm/issues",
                 "source": "https://github.com/vimeo/psalm"
             },
-            "time": "2024-09-08T00:00:18+00:00"
+            "time": "2024-09-08T18:53:08+00:00"
         }
     ],
     "aliases": [],

From c5a0810297da1e4e27c3e3e79927f00374ff5c11 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 9 Sep 2024 20:32:00 +0000
Subject: [PATCH 269/273] chore(deps): update dependency
 @typescript-eslint/eslint-plugin to v8.5.0

---
 print/package-lock.json | 319 +++++++++++++++++++++++++++++++++++++---
 print/package.json      |   2 +-
 2 files changed, 301 insertions(+), 20 deletions(-)

diff --git a/print/package-lock.json b/print/package-lock.json
index d0365b4c0b..a05977cf9f 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -29,7 +29,7 @@
         "@nuxtjs/i18n": "8.5.2",
         "@nuxtjs/tailwindcss": "6.12.1",
         "@tailwindcss/typography": "0.5.15",
-        "@typescript-eslint/eslint-plugin": "8.4.0",
+        "@typescript-eslint/eslint-plugin": "8.5.0",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/compiler-dom": "3.5.3",
         "@vue/compiler-sfc": "3.5.3",
@@ -5012,17 +5012,17 @@
       }
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.4.0.tgz",
-      "integrity": "sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==",
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.5.0.tgz",
+      "integrity": "sha512-lHS5hvz33iUFQKuPFGheAB84LwcJ60G8vKnEhnfcK1l8kGVLro2SFYW6K0/tj8FUhRJ0VHyg1oAfg50QGbPPHw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.4.0",
-        "@typescript-eslint/type-utils": "8.4.0",
-        "@typescript-eslint/utils": "8.4.0",
-        "@typescript-eslint/visitor-keys": "8.4.0",
+        "@typescript-eslint/scope-manager": "8.5.0",
+        "@typescript-eslint/type-utils": "8.5.0",
+        "@typescript-eslint/utils": "8.5.0",
+        "@typescript-eslint/visitor-keys": "8.5.0",
         "graphemer": "^1.4.0",
         "ignore": "^5.3.1",
         "natural-compare": "^1.4.0",
@@ -5045,6 +5045,69 @@
         }
       }
     },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz",
+      "integrity": "sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.5.0",
+        "@typescript-eslint/visitor-keys": "8.5.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz",
+      "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz",
+      "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.5.0",
+        "eslint-visitor-keys": "^3.4.3"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
     "node_modules/@typescript-eslint/parser": {
       "version": "8.4.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.4.0.tgz",
@@ -5093,15 +5156,58 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.4.0.tgz",
-      "integrity": "sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==",
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.5.0.tgz",
+      "integrity": "sha512-N1K8Ix+lUM+cIDhL2uekVn/ZD7TZW+9/rwz8DclQpcQ9rk4sIL5CAlBC0CugWKREmDjBzI/kQqU4wkg46jWLYA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "8.4.0",
-        "@typescript-eslint/utils": "8.4.0",
+        "@typescript-eslint/typescript-estree": "8.5.0",
+        "@typescript-eslint/utils": "8.5.0",
+        "debug": "^4.3.4",
+        "ts-api-utils": "^1.3.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz",
+      "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz",
+      "integrity": "sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "@typescript-eslint/types": "8.5.0",
+        "@typescript-eslint/visitor-keys": "8.5.0",
         "debug": "^4.3.4",
+        "fast-glob": "^3.3.2",
+        "is-glob": "^4.0.3",
+        "minimatch": "^9.0.4",
+        "semver": "^7.6.0",
         "ts-api-utils": "^1.3.0"
       },
       "engines": {
@@ -5117,6 +5223,63 @@
         }
       }
     },
+    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz",
+      "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.5.0",
+        "eslint-visitor-keys": "^3.4.3"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/@typescript-eslint/types": {
       "version": "8.4.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.4.0.tgz",
@@ -5187,16 +5350,16 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.4.0.tgz",
-      "integrity": "sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==",
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.5.0.tgz",
+      "integrity": "sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "8.4.0",
-        "@typescript-eslint/types": "8.4.0",
-        "@typescript-eslint/typescript-estree": "8.4.0"
+        "@typescript-eslint/scope-manager": "8.5.0",
+        "@typescript-eslint/types": "8.5.0",
+        "@typescript-eslint/typescript-estree": "8.5.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5209,6 +5372,124 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
+    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz",
+      "integrity": "sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.5.0",
+        "@typescript-eslint/visitor-keys": "8.5.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz",
+      "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==",
+      "dev": true,
+      "license": "MIT",
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz",
+      "integrity": "sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==",
+      "dev": true,
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "@typescript-eslint/types": "8.5.0",
+        "@typescript-eslint/visitor-keys": "8.5.0",
+        "debug": "^4.3.4",
+        "fast-glob": "^3.3.2",
+        "is-glob": "^4.0.3",
+        "minimatch": "^9.0.4",
+        "semver": "^7.6.0",
+        "ts-api-utils": "^1.3.0"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz",
+      "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "@typescript-eslint/types": "8.5.0",
+        "eslint-visitor-keys": "^3.4.3"
+      },
+      "engines": {
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/eslint-visitor-keys": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      }
+    },
+    "node_modules/@typescript-eslint/utils/node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/@typescript-eslint/visitor-keys": {
       "version": "8.4.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz",
diff --git a/print/package.json b/print/package.json
index 285da37eec..8f4bd37fce 100644
--- a/print/package.json
+++ b/print/package.json
@@ -38,7 +38,7 @@
     "@nuxtjs/i18n": "8.5.2",
     "@nuxtjs/tailwindcss": "6.12.1",
     "@tailwindcss/typography": "0.5.15",
-    "@typescript-eslint/eslint-plugin": "8.4.0",
+    "@typescript-eslint/eslint-plugin": "8.5.0",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/compiler-dom": "3.5.3",
     "@vue/compiler-sfc": "3.5.3",

From 0a7f17a346f58bc856ee84f49992236eac86cdcd Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 9 Sep 2024 20:53:18 +0000
Subject: [PATCH 270/273] chore(deps): update amazon/aws-cli docker tag to
 v2.17.47

---
 .ops/aws-setup/docker-compose.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.ops/aws-setup/docker-compose.yml b/.ops/aws-setup/docker-compose.yml
index 89ad7c9cec..fdbd1edb48 100644
--- a/.ops/aws-setup/docker-compose.yml
+++ b/.ops/aws-setup/docker-compose.yml
@@ -13,7 +13,7 @@ services:
       - AWS_DEFAULT_REGION=eu-west-3
 
   aws-cli:
-    image: amazon/aws-cli:2.17.46
+    image: amazon/aws-cli:2.17.47
     container_name: 'ecamp3-aws-cli'
     volumes:
       - ./.aws:/root/.aws:delegated

From 9d346e2c4a64d3aab475e8a9603db5efd9bc545b Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 10 Sep 2024 00:46:28 +0000
Subject: [PATCH 271/273] chore(deps): lock file maintenance

---
 .ops/aws-setup/package-lock.json |  412 ++++----
 api/composer.lock                |   55 +-
 e2e/package-lock.json            |   70 +-
 frontend/package-lock.json       |  301 +++---
 pdf/package-lock.json            |  173 ++--
 print/package-lock.json          | 1557 +++++++-----------------------
 translation/package-lock.json    |   18 +-
 7 files changed, 800 insertions(+), 1786 deletions(-)

diff --git a/.ops/aws-setup/package-lock.json b/.ops/aws-setup/package-lock.json
index 2241de8e5a..17a90cf614 100644
--- a/.ops/aws-setup/package-lock.json
+++ b/.ops/aws-setup/package-lock.json
@@ -1103,9 +1103,9 @@
             }
         },
         "node_modules/@grpc/grpc-js": {
-            "version": "1.11.1",
-            "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.11.1.tgz",
-            "integrity": "sha512-gyt/WayZrVPH2w/UTLansS7F9Nwld472JxxaETamrM8HNlsa+jSLNyKAZmhxI2Me4c3mQHFiS1wWHDY1g1Kthw==",
+            "version": "1.11.2",
+            "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.11.2.tgz",
+            "integrity": "sha512-DWp92gDD7/Qkj7r8kus6/HCINeo3yPZWZ3paKgDgsbKbSpoxKg1yvN8xe2Q8uE3zOsPe3bX8FQX2+XValq2yTw==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@grpc/proto-loader": "^0.7.13",
@@ -1189,9 +1189,9 @@
             }
         },
         "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-            "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+            "version": "6.1.0",
+            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+            "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
             "license": "MIT",
             "engines": {
                 "node": ">=12"
@@ -2259,12 +2259,12 @@
             }
         },
         "node_modules/@smithy/abort-controller": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz",
-            "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==",
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.2.tgz",
+            "integrity": "sha512-b5g+PNujlfqIib9BjkNB108NyO5aZM/RXjfOCXRCqXQ1oPnIkfvdORrztbGgCZdPe/BN/MKDlrGA7PafKPM2jw==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/types": "^3.3.0",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2272,15 +2272,15 @@
             }
         },
         "node_modules/@smithy/config-resolver": {
-            "version": "3.0.5",
-            "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz",
-            "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==",
+            "version": "3.0.6",
+            "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.6.tgz",
+            "integrity": "sha512-j7HuVNoRd8EhcFp0MzcUb4fG40C7BcyshH+fAd3Jhd8bINNFvEQYBrZoS/SK6Pun9WPlfoI8uuU2SMz8DsEGlA==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/node-config-provider": "^3.1.4",
-                "@smithy/types": "^3.3.0",
+                "@smithy/node-config-provider": "^3.1.5",
+                "@smithy/types": "^3.4.0",
                 "@smithy/util-config-provider": "^3.0.0",
-                "@smithy/util-middleware": "^3.0.3",
+                "@smithy/util-middleware": "^3.0.4",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2288,19 +2288,19 @@
             }
         },
         "node_modules/@smithy/core": {
-            "version": "2.4.0",
-            "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.0.tgz",
-            "integrity": "sha512-cHXq+FneIF/KJbt4q4pjN186+Jf4ZB0ZOqEaZMBhT79srEyGDDBV31NqBRBjazz8ppQ1bJbDJMY9ba5wKFV36w==",
+            "version": "2.4.1",
+            "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.1.tgz",
+            "integrity": "sha512-7cts7/Oni7aCHebHGiBeWoz5z+vmH+Vx2Z/UW3XtXMslcxI3PEwBZxNinepwZjixS3n12fPc247PHWmjU7ndsQ==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/middleware-endpoint": "^3.1.0",
-                "@smithy/middleware-retry": "^3.0.15",
-                "@smithy/middleware-serde": "^3.0.3",
-                "@smithy/protocol-http": "^4.1.0",
-                "@smithy/smithy-client": "^3.2.0",
-                "@smithy/types": "^3.3.0",
+                "@smithy/middleware-endpoint": "^3.1.1",
+                "@smithy/middleware-retry": "^3.0.16",
+                "@smithy/middleware-serde": "^3.0.4",
+                "@smithy/protocol-http": "^4.1.1",
+                "@smithy/smithy-client": "^3.3.0",
+                "@smithy/types": "^3.4.0",
                 "@smithy/util-body-length-browser": "^3.0.0",
-                "@smithy/util-middleware": "^3.0.3",
+                "@smithy/util-middleware": "^3.0.4",
                 "@smithy/util-utf8": "^3.0.0",
                 "tslib": "^2.6.2"
             },
@@ -2309,15 +2309,15 @@
             }
         },
         "node_modules/@smithy/credential-provider-imds": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz",
-            "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==",
+            "version": "3.2.1",
+            "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.1.tgz",
+            "integrity": "sha512-4z/oTWpRF2TqQI3aCM89/PWu3kim58XU4kOCTtuTJnoaS4KT95cPWMxbQfTN2vzcOe96SOKO8QouQW/+ESB1fQ==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/node-config-provider": "^3.1.4",
-                "@smithy/property-provider": "^3.1.3",
-                "@smithy/types": "^3.3.0",
-                "@smithy/url-parser": "^3.0.3",
+                "@smithy/node-config-provider": "^3.1.5",
+                "@smithy/property-provider": "^3.1.4",
+                "@smithy/types": "^3.4.0",
+                "@smithy/url-parser": "^3.0.4",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2325,25 +2325,25 @@
             }
         },
         "node_modules/@smithy/fetch-http-handler": {
-            "version": "3.2.4",
-            "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz",
-            "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==",
+            "version": "3.2.5",
+            "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.5.tgz",
+            "integrity": "sha512-DjRtGmK8pKQMIo9+JlAKUt14Z448bg8nAN04yKIvlrrpmpRSG57s5d2Y83npks1r4gPtTRNbAFdQCoj9l3P2KQ==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/protocol-http": "^4.1.0",
-                "@smithy/querystring-builder": "^3.0.3",
-                "@smithy/types": "^3.3.0",
+                "@smithy/protocol-http": "^4.1.1",
+                "@smithy/querystring-builder": "^3.0.4",
+                "@smithy/types": "^3.4.0",
                 "@smithy/util-base64": "^3.0.0",
                 "tslib": "^2.6.2"
             }
         },
         "node_modules/@smithy/hash-node": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz",
-            "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==",
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.4.tgz",
+            "integrity": "sha512-6FgTVqEfCr9z/7+Em8BwSkJKA2y3krf1em134x3yr2NHWVCo2KYI8tcA53cjeO47y41jwF84ntsEE0Pe6pNKlg==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/types": "^3.3.0",
+                "@smithy/types": "^3.4.0",
                 "@smithy/util-buffer-from": "^3.0.0",
                 "@smithy/util-utf8": "^3.0.0",
                 "tslib": "^2.6.2"
@@ -2353,12 +2353,12 @@
             }
         },
         "node_modules/@smithy/invalid-dependency": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz",
-            "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==",
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.4.tgz",
+            "integrity": "sha512-MJBUrojC4SEXi9aJcnNOE3oNAuYNphgCGFXscaCj2TA/59BTcXhzHACP8jnnEU3n4yir/NSLKzxqez0T4x4tjA==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/types": "^3.3.0",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             }
         },
@@ -2375,13 +2375,13 @@
             }
         },
         "node_modules/@smithy/middleware-content-length": {
-            "version": "3.0.5",
-            "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz",
-            "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==",
+            "version": "3.0.6",
+            "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.6.tgz",
+            "integrity": "sha512-AFyHCfe8rumkJkz+hCOVJmBagNBj05KypyDwDElA4TgMSA4eYDZRjVePFZuyABrJZFDc7uVj3dpFIDCEhf59SA==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/protocol-http": "^4.1.0",
-                "@smithy/types": "^3.3.0",
+                "@smithy/protocol-http": "^4.1.1",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2389,17 +2389,17 @@
             }
         },
         "node_modules/@smithy/middleware-endpoint": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz",
-            "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==",
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.1.tgz",
+            "integrity": "sha512-Irv+soW8NKluAtFSEsF8O3iGyLxa5oOevJb/e1yNacV9H7JP/yHyJuKST5YY2ORS1+W34VR8EuUrOF+K29Pl4g==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/middleware-serde": "^3.0.3",
-                "@smithy/node-config-provider": "^3.1.4",
-                "@smithy/shared-ini-file-loader": "^3.1.4",
-                "@smithy/types": "^3.3.0",
-                "@smithy/url-parser": "^3.0.3",
-                "@smithy/util-middleware": "^3.0.3",
+                "@smithy/middleware-serde": "^3.0.4",
+                "@smithy/node-config-provider": "^3.1.5",
+                "@smithy/shared-ini-file-loader": "^3.1.5",
+                "@smithy/types": "^3.4.0",
+                "@smithy/url-parser": "^3.0.4",
+                "@smithy/util-middleware": "^3.0.4",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2407,18 +2407,18 @@
             }
         },
         "node_modules/@smithy/middleware-retry": {
-            "version": "3.0.15",
-            "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.15.tgz",
-            "integrity": "sha512-iTMedvNt1ApdvkaoE8aSDuwaoc+BhvHqttbA/FO4Ty+y/S5hW6Ci/CTScG7vam4RYJWZxdTElc3MEfHRVH6cgQ==",
+            "version": "3.0.16",
+            "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.16.tgz",
+            "integrity": "sha512-08kI36p1yB4CWO3Qi+UQxjzobt8iQJpnruF0K5BkbZmA/N/sJ51A1JJGJ36GgcbFyPfWw2FU48S5ZoqXt0h0jw==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/node-config-provider": "^3.1.4",
-                "@smithy/protocol-http": "^4.1.0",
-                "@smithy/service-error-classification": "^3.0.3",
-                "@smithy/smithy-client": "^3.2.0",
-                "@smithy/types": "^3.3.0",
-                "@smithy/util-middleware": "^3.0.3",
-                "@smithy/util-retry": "^3.0.3",
+                "@smithy/node-config-provider": "^3.1.5",
+                "@smithy/protocol-http": "^4.1.1",
+                "@smithy/service-error-classification": "^3.0.4",
+                "@smithy/smithy-client": "^3.3.0",
+                "@smithy/types": "^3.4.0",
+                "@smithy/util-middleware": "^3.0.4",
+                "@smithy/util-retry": "^3.0.4",
                 "tslib": "^2.6.2",
                 "uuid": "^9.0.1"
             },
@@ -2427,12 +2427,12 @@
             }
         },
         "node_modules/@smithy/middleware-serde": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz",
-            "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==",
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.4.tgz",
+            "integrity": "sha512-1lPDB2O6IJ50Ucxgn7XrvZXbbuI48HmPCcMTuSoXT1lDzuTUfIuBjgAjpD8YLVMfnrjdepi/q45556LA51Pubw==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/types": "^3.3.0",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2440,12 +2440,12 @@
             }
         },
         "node_modules/@smithy/middleware-stack": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz",
-            "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==",
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.4.tgz",
+            "integrity": "sha512-sLMRjtMCqtVcrOqaOZ10SUnlFE25BSlmLsi4bRSGFD7dgR54eqBjfqkVkPBQyrKBortfGM0+2DJoUPcGECR+nQ==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/types": "^3.3.0",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2453,14 +2453,14 @@
             }
         },
         "node_modules/@smithy/node-config-provider": {
-            "version": "3.1.4",
-            "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz",
-            "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==",
+            "version": "3.1.5",
+            "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.5.tgz",
+            "integrity": "sha512-dq/oR3/LxgCgizVk7in7FGTm0w9a3qM4mg3IIXLTCHeW3fV+ipssSvBZ2bvEx1+asfQJTyCnVLeYf7JKfd9v3Q==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/property-provider": "^3.1.3",
-                "@smithy/shared-ini-file-loader": "^3.1.4",
-                "@smithy/types": "^3.3.0",
+                "@smithy/property-provider": "^3.1.4",
+                "@smithy/shared-ini-file-loader": "^3.1.5",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2468,15 +2468,15 @@
             }
         },
         "node_modules/@smithy/node-http-handler": {
-            "version": "3.1.4",
-            "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz",
-            "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==",
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.0.tgz",
+            "integrity": "sha512-5TFqaABbiY7uJMKbqR4OARjwI/l4TRoysDJ75pLpVQyO3EcmeloKYwDGyCtgB9WJniFx3BMkmGCB9+j+QiB+Ww==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/abort-controller": "^3.1.1",
-                "@smithy/protocol-http": "^4.1.0",
-                "@smithy/querystring-builder": "^3.0.3",
-                "@smithy/types": "^3.3.0",
+                "@smithy/abort-controller": "^3.1.2",
+                "@smithy/protocol-http": "^4.1.1",
+                "@smithy/querystring-builder": "^3.0.4",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2484,12 +2484,12 @@
             }
         },
         "node_modules/@smithy/property-provider": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz",
-            "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==",
+            "version": "3.1.4",
+            "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.4.tgz",
+            "integrity": "sha512-BmhefQbfkSl9DeU0/e6k9N4sT5bya5etv2epvqLUz3eGyfRBhtQq60nDkc1WPp4c+KWrzK721cUc/3y0f2psPQ==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/types": "^3.3.0",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2497,12 +2497,12 @@
             }
         },
         "node_modules/@smithy/protocol-http": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz",
-            "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==",
+            "version": "4.1.1",
+            "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.1.tgz",
+            "integrity": "sha512-Fm5+8LkeIus83Y8jTL1XHsBGP8sPvE1rEVyKf/87kbOPTbzEDMcgOlzcmYXat2h+nC3wwPtRy8hFqtJS71+Wow==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/types": "^3.3.0",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2510,12 +2510,12 @@
             }
         },
         "node_modules/@smithy/querystring-builder": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz",
-            "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==",
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.4.tgz",
+            "integrity": "sha512-NEoPAsZPdpfVbF98qm8i5k1XMaRKeEnO47CaL5ja6Y1Z2DgJdwIJuJkTJypKm/IKfp8gc0uimIFLwhml8+/pAw==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/types": "^3.3.0",
+                "@smithy/types": "^3.4.0",
                 "@smithy/util-uri-escape": "^3.0.0",
                 "tslib": "^2.6.2"
             },
@@ -2524,12 +2524,12 @@
             }
         },
         "node_modules/@smithy/querystring-parser": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz",
-            "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==",
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.4.tgz",
+            "integrity": "sha512-7CHPXffFcakFzhO0OZs/rn6fXlTHrSDdLhIT6/JIk1u2bvwguTL3fMCc1+CfcbXA7TOhjWXu3TcB1EGMqJQwHg==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/types": "^3.3.0",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2537,24 +2537,24 @@
             }
         },
         "node_modules/@smithy/service-error-classification": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz",
-            "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==",
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.4.tgz",
+            "integrity": "sha512-KciDHHKFVTb9A1KlJHBt2F26PBaDtoE23uTZy5qRvPzHPqrooXFi6fmx98lJb3Jl38PuUTqIuCUmmY3pacuMBQ==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/types": "^3.3.0"
+                "@smithy/types": "^3.4.0"
             },
             "engines": {
                 "node": ">=16.0.0"
             }
         },
         "node_modules/@smithy/shared-ini-file-loader": {
-            "version": "3.1.4",
-            "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz",
-            "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==",
+            "version": "3.1.5",
+            "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.5.tgz",
+            "integrity": "sha512-6jxsJ4NOmY5Du4FD0enYegNJl4zTSuKLiChIMqIkh+LapxiP7lmz5lYUNLE9/4cvA65mbBmtdzZ8yxmcqM5igg==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/types": "^3.3.0",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2562,16 +2562,16 @@
             }
         },
         "node_modules/@smithy/signature-v4": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz",
-            "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==",
+            "version": "4.1.1",
+            "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.1.tgz",
+            "integrity": "sha512-SH9J9be81TMBNGCmjhrgMWu4YSpQ3uP1L06u/K9SDrE2YibUix1qxedPCxEQu02At0P0SrYDjvz+y91vLG0KRQ==",
             "license": "Apache-2.0",
             "dependencies": {
                 "@smithy/is-array-buffer": "^3.0.0",
-                "@smithy/protocol-http": "^4.1.0",
-                "@smithy/types": "^3.3.0",
+                "@smithy/protocol-http": "^4.1.1",
+                "@smithy/types": "^3.4.0",
                 "@smithy/util-hex-encoding": "^3.0.0",
-                "@smithy/util-middleware": "^3.0.3",
+                "@smithy/util-middleware": "^3.0.4",
                 "@smithy/util-uri-escape": "^3.0.0",
                 "@smithy/util-utf8": "^3.0.0",
                 "tslib": "^2.6.2"
@@ -2581,16 +2581,16 @@
             }
         },
         "node_modules/@smithy/smithy-client": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz",
-            "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==",
+            "version": "3.3.0",
+            "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.3.0.tgz",
+            "integrity": "sha512-H32nVo8tIX82kB0xI2LBrIcj8jx/3/ITotNLbeG1UL0b3b440YPR/hUvqjFJiaB24pQrMjRbU8CugqH5sV0hkw==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/middleware-endpoint": "^3.1.0",
-                "@smithy/middleware-stack": "^3.0.3",
-                "@smithy/protocol-http": "^4.1.0",
-                "@smithy/types": "^3.3.0",
-                "@smithy/util-stream": "^3.1.3",
+                "@smithy/middleware-endpoint": "^3.1.1",
+                "@smithy/middleware-stack": "^3.0.4",
+                "@smithy/protocol-http": "^4.1.1",
+                "@smithy/types": "^3.4.0",
+                "@smithy/util-stream": "^3.1.4",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2598,9 +2598,9 @@
             }
         },
         "node_modules/@smithy/types": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz",
-            "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==",
+            "version": "3.4.0",
+            "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.4.0.tgz",
+            "integrity": "sha512-0shOWSg/pnFXPcsSU8ZbaJ4JBHZJPPzLCJxafJvbMVFo9l1w81CqpgUqjlKGNHVrVB7fhIs+WS82JDTyzaLyLA==",
             "license": "Apache-2.0",
             "dependencies": {
                 "tslib": "^2.6.2"
@@ -2610,13 +2610,13 @@
             }
         },
         "node_modules/@smithy/url-parser": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz",
-            "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==",
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.4.tgz",
+            "integrity": "sha512-XdXfObA8WrloavJYtDuzoDhJAYc5rOt+FirFmKBRKaihu7QtU/METAxJgSo7uMK6hUkx0vFnqxV75urtRaLkLg==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/querystring-parser": "^3.0.3",
-                "@smithy/types": "^3.3.0",
+                "@smithy/querystring-parser": "^3.0.4",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             }
         },
@@ -2681,14 +2681,14 @@
             }
         },
         "node_modules/@smithy/util-defaults-mode-browser": {
-            "version": "3.0.15",
-            "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.15.tgz",
-            "integrity": "sha512-FZ4Psa3vjp8kOXcd3HJOiDPBCWtiilLl57r0cnNtq/Ga9RSDrM5ERL6xt+tO43+2af6Pn5Yp92x2n5vPuduNfg==",
+            "version": "3.0.16",
+            "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.16.tgz",
+            "integrity": "sha512-Os8ddfNBe7hmc5UMWZxygIHCyAqY0aWR8Wnp/aKbti3f8Df/r0J9ttMZIxeMjsFgtVjEryB0q7SGcwBsHk8WEw==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/property-provider": "^3.1.3",
-                "@smithy/smithy-client": "^3.2.0",
-                "@smithy/types": "^3.3.0",
+                "@smithy/property-provider": "^3.1.4",
+                "@smithy/smithy-client": "^3.3.0",
+                "@smithy/types": "^3.4.0",
                 "bowser": "^2.11.0",
                 "tslib": "^2.6.2"
             },
@@ -2697,17 +2697,17 @@
             }
         },
         "node_modules/@smithy/util-defaults-mode-node": {
-            "version": "3.0.15",
-            "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.15.tgz",
-            "integrity": "sha512-KSyAAx2q6d0t6f/S4XB2+3+6aQacm3aLMhs9aLMqn18uYGUepbdssfogW5JQZpc6lXNBnp0tEnR5e9CEKmEd7A==",
+            "version": "3.0.16",
+            "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.16.tgz",
+            "integrity": "sha512-rNhFIYRtrOrrhRlj6RL8jWA6/dcwrbGYAmy8+OAHjjzQ6zdzUBB1P+3IuJAgwWN6Y5GxI+mVXlM/pOjaoIgHow==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/config-resolver": "^3.0.5",
-                "@smithy/credential-provider-imds": "^3.2.0",
-                "@smithy/node-config-provider": "^3.1.4",
-                "@smithy/property-provider": "^3.1.3",
-                "@smithy/smithy-client": "^3.2.0",
-                "@smithy/types": "^3.3.0",
+                "@smithy/config-resolver": "^3.0.6",
+                "@smithy/credential-provider-imds": "^3.2.1",
+                "@smithy/node-config-provider": "^3.1.5",
+                "@smithy/property-provider": "^3.1.4",
+                "@smithy/smithy-client": "^3.3.0",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2715,13 +2715,13 @@
             }
         },
         "node_modules/@smithy/util-endpoints": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz",
-            "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==",
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.0.tgz",
+            "integrity": "sha512-ilS7/0jcbS2ELdg0fM/4GVvOiuk8/U3bIFXUW25xE1Vh1Ol4DP6vVHQKqM40rCMizCLmJ9UxK+NeJrKlhI3HVA==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/node-config-provider": "^3.1.4",
-                "@smithy/types": "^3.3.0",
+                "@smithy/node-config-provider": "^3.1.5",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2741,12 +2741,12 @@
             }
         },
         "node_modules/@smithy/util-middleware": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz",
-            "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==",
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.4.tgz",
+            "integrity": "sha512-uSXHTBhstb1c4nHdmQEdkNMv9LiRNaJ/lWV2U/GO+5F236YFpdPw+hyWI9Zc0Rp9XKzwD9kVZvhZmEgp0UCVnA==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/types": "^3.3.0",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2754,13 +2754,13 @@
             }
         },
         "node_modules/@smithy/util-retry": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz",
-            "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==",
+            "version": "3.0.4",
+            "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.4.tgz",
+            "integrity": "sha512-JJr6g0tO1qO2tCQyK+n3J18r34ZpvatlFN5ULcLranFIBZPxqoivb77EPyNTVwTGMEvvq2qMnyjm4jMIxjdLFg==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/service-error-classification": "^3.0.3",
-                "@smithy/types": "^3.3.0",
+                "@smithy/service-error-classification": "^3.0.4",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -2768,14 +2768,14 @@
             }
         },
         "node_modules/@smithy/util-stream": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz",
-            "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==",
+            "version": "3.1.4",
+            "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.4.tgz",
+            "integrity": "sha512-txU3EIDLhrBZdGfon6E9V6sZz/irYnKFMblz4TLVjyq8hObNHNS2n9a2t7GIrl7d85zgEPhwLE0gANpZsvpsKg==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/fetch-http-handler": "^3.2.4",
-                "@smithy/node-http-handler": "^3.1.4",
-                "@smithy/types": "^3.3.0",
+                "@smithy/fetch-http-handler": "^3.2.5",
+                "@smithy/node-http-handler": "^3.2.0",
+                "@smithy/types": "^3.4.0",
                 "@smithy/util-base64": "^3.0.0",
                 "@smithy/util-buffer-from": "^3.0.0",
                 "@smithy/util-hex-encoding": "^3.0.0",
@@ -2812,13 +2812,13 @@
             }
         },
         "node_modules/@smithy/util-waiter": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.2.tgz",
-            "integrity": "sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==",
+            "version": "3.1.3",
+            "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.3.tgz",
+            "integrity": "sha512-OU0YllH51/CxD8iyr3UHSMwYqTGTyuxFdCMH/0F978t+iDmJseC/ttrWPb22zmYkhkrjqtipzC1xaMuax5QKIA==",
             "license": "Apache-2.0",
             "dependencies": {
-                "@smithy/abort-controller": "^3.1.1",
-                "@smithy/types": "^3.3.0",
+                "@smithy/abort-controller": "^3.1.2",
+                "@smithy/types": "^3.4.0",
                 "tslib": "^2.6.2"
             },
             "engines": {
@@ -3093,9 +3093,9 @@
             }
         },
         "node_modules/aws-sdk": {
-            "version": "2.1689.0",
-            "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1689.0.tgz",
-            "integrity": "sha512-+HjbDRzkMrqgQ78BplI7enfO84gSX0wXWnpalzrG7vjH6jFUjuWmRuki6GQhNzrSPQZu1zUi3gPud+3xUxXp3Q==",
+            "version": "2.1691.0",
+            "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1691.0.tgz",
+            "integrity": "sha512-/F2YC+DlsY3UBM2Bdnh5RLHOPNibS/+IcjUuhP8XuctyrN+MlL+fWDAiela32LTDk7hMy4rx8MTgvbJ+0blO5g==",
             "hasInstallScript": true,
             "license": "Apache-2.0",
             "dependencies": {
@@ -3342,9 +3342,9 @@
             }
         },
         "node_modules/caniuse-lite": {
-            "version": "1.0.30001655",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz",
-            "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==",
+            "version": "1.0.30001659",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001659.tgz",
+            "integrity": "sha512-Qxxyfv3RdHAfJcXelgf0hU4DFUVXBGTjqrBUZLUh8AtlGnsDo+CnncYtTd95+ZKfnANUOzxyIQCuU/UeBZBYoA==",
             "dev": true,
             "funding": [
                 {
@@ -3389,9 +3389,9 @@
             }
         },
         "node_modules/cjs-module-lexer": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.0.tgz",
-            "integrity": "sha512-N1NGmowPlGBLsOZLPvm48StN04V4YvQRL0i6b7ctrVY3epjP/ct7hFLOItz6pDIvRjwpfPxi52a2UWV2ziir8g==",
+            "version": "1.4.1",
+            "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz",
+            "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==",
             "license": "MIT"
         },
         "node_modules/clean-stack": {
@@ -3596,12 +3596,12 @@
             }
         },
         "node_modules/debug": {
-            "version": "4.3.6",
-            "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
-            "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
+            "version": "4.3.7",
+            "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+            "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
             "license": "MIT",
             "dependencies": {
-                "ms": "2.1.2"
+                "ms": "^2.1.3"
             },
             "engines": {
                 "node": ">=6.0"
@@ -3713,9 +3713,9 @@
             "license": "MIT"
         },
         "node_modules/electron-to-chromium": {
-            "version": "1.5.13",
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
-            "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
+            "version": "1.5.18",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz",
+            "integrity": "sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==",
             "dev": true,
             "license": "ISC",
             "peer": true
@@ -5718,9 +5718,9 @@
             "license": "MIT"
         },
         "node_modules/ms": {
-            "version": "2.1.2",
-            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-            "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+            "version": "2.1.3",
+            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
             "license": "MIT"
         },
         "node_modules/natural-compare": {
@@ -6403,9 +6403,9 @@
             }
         },
         "node_modules/promise-call-limit": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.1.tgz",
-            "integrity": "sha512-utl+0x8gIDasV5X+PI5qWEPqH6fJS0pFtQ/4gZ95xfEFb/89dmh+/b895TbFDBLiafBvxD/PGTKfvxl4kH/pQg==",
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz",
+            "integrity": "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==",
             "license": "ISC",
             "funding": {
                 "url": "https://github.com/sponsors/isaacs"
@@ -6944,9 +6944,9 @@
             "license": "MIT"
         },
         "node_modules/string-width/node_modules/ansi-regex": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-            "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+            "version": "6.1.0",
+            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+            "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
             "license": "MIT",
             "engines": {
                 "node": ">=12"
@@ -7502,9 +7502,9 @@
             }
         },
         "node_modules/wrap-ansi/node_modules/ansi-regex": {
-            "version": "6.0.1",
-            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-            "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+            "version": "6.1.0",
+            "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+            "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
             "license": "MIT",
             "engines": {
                 "node": ">=12"
diff --git a/api/composer.lock b/api/composer.lock
index 85ba575ba3..104e014aa2 100644
--- a/api/composer.lock
+++ b/api/composer.lock
@@ -3991,16 +3991,16 @@
         },
         {
             "name": "phpstan/phpdoc-parser",
-            "version": "1.30.0",
+            "version": "1.30.1",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpstan/phpdoc-parser.git",
-                "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f"
+                "reference": "51b95ec8670af41009e2b2b56873bad96682413e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/5ceb0e384997db59f38774bf79c2a6134252c08f",
-                "reference": "5ceb0e384997db59f38774bf79c2a6134252c08f",
+                "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/51b95ec8670af41009e2b2b56873bad96682413e",
+                "reference": "51b95ec8670af41009e2b2b56873bad96682413e",
                 "shasum": ""
             },
             "require": {
@@ -4032,9 +4032,9 @@
             "description": "PHPDoc parser with support for nullable, intersection and generic types",
             "support": {
                 "issues": "https://github.com/phpstan/phpdoc-parser/issues",
-                "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.0"
+                "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.1"
             },
-            "time": "2024-08-29T09:54:52+00:00"
+            "time": "2024-09-07T20:13:05+00:00"
         },
         {
             "name": "psr/cache",
@@ -7582,22 +7582,21 @@
         },
         {
             "name": "symfony/polyfill-intl-idn",
-            "version": "v1.30.0",
+            "version": "v1.31.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-intl-idn.git",
-                "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c"
+                "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a6e83bdeb3c84391d1dfe16f42e40727ce524a5c",
-                "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773",
+                "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1",
-                "symfony/polyfill-intl-normalizer": "^1.10",
-                "symfony/polyfill-php72": "^1.10"
+                "php": ">=7.2",
+                "symfony/polyfill-intl-normalizer": "^1.10"
             },
             "suggest": {
                 "ext-intl": "For best performance"
@@ -7646,7 +7645,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.30.0"
+                "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0"
             },
             "funding": [
                 {
@@ -7662,24 +7661,24 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-05-31T15:07:36+00:00"
+            "time": "2024-09-09T11:45:10+00:00"
         },
         {
             "name": "symfony/polyfill-php83",
-            "version": "v1.30.0",
+            "version": "v1.31.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php83.git",
-                "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9"
+                "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9",
-                "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9",
+                "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491",
+                "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491",
                 "shasum": ""
             },
             "require": {
-                "php": ">=7.1"
+                "php": ">=7.2"
             },
             "type": "library",
             "extra": {
@@ -7722,7 +7721,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0"
+                "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0"
             },
             "funding": [
                 {
@@ -7738,7 +7737,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-06-19T12:35:24+00:00"
+            "time": "2024-09-09T11:45:10+00:00"
         },
         {
             "name": "symfony/property-access",
@@ -9875,16 +9874,16 @@
         },
         {
             "name": "twig/twig",
-            "version": "v3.13.0",
+            "version": "v3.14.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/twigphp/Twig.git",
-                "reference": "afc0eb63dc66c248c5a94504dc2b255bc9b86575"
+                "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/twigphp/Twig/zipball/afc0eb63dc66c248c5a94504dc2b255bc9b86575",
-                "reference": "afc0eb63dc66c248c5a94504dc2b255bc9b86575",
+                "url": "https://api.github.com/repos/twigphp/Twig/zipball/126b2c97818dbff0cdf3fbfc881aedb3d40aae72",
+                "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72",
                 "shasum": ""
             },
             "require": {
@@ -9938,7 +9937,7 @@
             ],
             "support": {
                 "issues": "https://github.com/twigphp/Twig/issues",
-                "source": "https://github.com/twigphp/Twig/tree/v3.13.0"
+                "source": "https://github.com/twigphp/Twig/tree/v3.14.0"
             },
             "funding": [
                 {
@@ -9950,7 +9949,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2024-09-07T08:01:12+00:00"
+            "time": "2024-09-09T17:55:12+00:00"
         },
         {
             "name": "webmozart/assert",
diff --git a/e2e/package-lock.json b/e2e/package-lock.json
index 842beaf468..9e8bdd0c2f 100644
--- a/e2e/package-lock.json
+++ b/e2e/package-lock.json
@@ -353,9 +353,9 @@
       }
     },
     "node_modules/@cypress/request": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz",
-      "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==",
+      "version": "3.0.5",
+      "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.5.tgz",
+      "integrity": "sha512-v+XHd9XmWbufxF1/bTaVm2yhbxY+TB4YtWRqF2zaXBlDNMkls34KiATz0AVDLavL3iB6bQk9/7n3oY1EoLSWGA==",
       "dev": true,
       "license": "Apache-2.0",
       "dependencies": {
@@ -365,14 +365,14 @@
         "combined-stream": "~1.0.6",
         "extend": "~3.0.2",
         "forever-agent": "~0.6.1",
-        "form-data": "~2.3.2",
-        "http-signature": "~1.3.6",
+        "form-data": "~4.0.0",
+        "http-signature": "~1.4.0",
         "is-typedarray": "~1.0.0",
         "isstream": "~0.1.2",
         "json-stringify-safe": "~5.0.1",
         "mime-types": "~2.1.19",
         "performance-now": "^2.1.0",
-        "qs": "6.10.4",
+        "qs": "6.13.0",
         "safe-buffer": "^5.1.2",
         "tough-cookie": "^4.1.3",
         "tunnel-agent": "^0.6.0",
@@ -657,9 +657,9 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.5.3",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.3.tgz",
-      "integrity": "sha512-njripolh85IA9SQGTAqbmnNZTdxv7X/4OYGPz8tgy5JDr8MP+uDBa921GpYEoDDnwm0Hmn5ZPeJgiiSTPoOzkQ==",
+      "version": "22.5.4",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz",
+      "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==",
       "dev": true,
       "license": "MIT",
       "optional": true,
@@ -1075,9 +1075,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001655",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz",
-      "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==",
+      "version": "1.0.30001659",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001659.tgz",
+      "integrity": "sha512-Qxxyfv3RdHAfJcXelgf0hU4DFUVXBGTjqrBUZLUh8AtlGnsDo+CnncYtTd95+ZKfnANUOzxyIQCuU/UeBZBYoA==",
       "dev": true,
       "funding": [
         {
@@ -1481,13 +1481,13 @@
       "license": "MIT"
     },
     "node_modules/debug": {
-      "version": "4.3.6",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
-      "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
+      "version": "4.3.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+      "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ms": "2.1.2"
+        "ms": "^2.1.3"
       },
       "engines": {
         "node": ">=6.0"
@@ -1558,9 +1558,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.13",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
-      "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
+      "version": "1.5.18",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz",
+      "integrity": "sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==",
       "dev": true,
       "license": "ISC",
       "peer": true
@@ -2322,18 +2322,18 @@
       }
     },
     "node_modules/form-data": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
-      "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+      "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "asynckit": "^0.4.0",
-        "combined-stream": "^1.0.6",
+        "combined-stream": "^1.0.8",
         "mime-types": "^2.1.12"
       },
       "engines": {
-        "node": ">= 0.12"
+        "node": ">= 6"
       }
     },
     "node_modules/fs-extra": {
@@ -2591,15 +2591,15 @@
       }
     },
     "node_modules/http-signature": {
-      "version": "1.3.6",
-      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz",
-      "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz",
+      "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "assert-plus": "^1.0.0",
         "jsprim": "^2.0.2",
-        "sshpk": "^1.14.1"
+        "sshpk": "^1.18.0"
       },
       "engines": {
         "node": ">=0.10"
@@ -3307,9 +3307,9 @@
       }
     },
     "node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
       "dev": true,
       "license": "MIT"
     },
@@ -3626,13 +3626,13 @@
       }
     },
     "node_modules/qs": {
-      "version": "6.10.4",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz",
-      "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==",
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+      "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
       "dev": true,
       "license": "BSD-3-Clause",
       "dependencies": {
-        "side-channel": "^1.0.4"
+        "side-channel": "^1.0.6"
       },
       "engines": {
         "node": ">=0.6"
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index b4cc91c6ed..4173e42a9a 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -2638,9 +2638,9 @@
       }
     },
     "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -3376,9 +3376,9 @@
       }
     },
     "node_modules/@sentry/cli": {
-      "version": "2.34.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.34.1.tgz",
-      "integrity": "sha512-hAHvu+XH1kn1ee2NUWvuqAZenK/MrxqQzeIrIYATqF2XGjtSOr7irjAKWjd97/vXdLHA6TBnMW1wHwLcuJK2tg==",
+      "version": "2.36.0",
+      "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.36.0.tgz",
+      "integrity": "sha512-GraZSztW394hxI1btVDYGyGkM2Wr7UK4vItBIm62xh7rpNkX7Ia4nWUC9inuzK5THEk4GbF/F89J3mb8QJt47g==",
       "dev": true,
       "hasInstallScript": true,
       "license": "BSD-3-Clause",
@@ -3396,19 +3396,19 @@
         "node": ">= 10"
       },
       "optionalDependencies": {
-        "@sentry/cli-darwin": "2.34.1",
-        "@sentry/cli-linux-arm": "2.34.1",
-        "@sentry/cli-linux-arm64": "2.34.1",
-        "@sentry/cli-linux-i686": "2.34.1",
-        "@sentry/cli-linux-x64": "2.34.1",
-        "@sentry/cli-win32-i686": "2.34.1",
-        "@sentry/cli-win32-x64": "2.34.1"
+        "@sentry/cli-darwin": "2.36.0",
+        "@sentry/cli-linux-arm": "2.36.0",
+        "@sentry/cli-linux-arm64": "2.36.0",
+        "@sentry/cli-linux-i686": "2.36.0",
+        "@sentry/cli-linux-x64": "2.36.0",
+        "@sentry/cli-win32-i686": "2.36.0",
+        "@sentry/cli-win32-x64": "2.36.0"
       }
     },
     "node_modules/@sentry/cli-darwin": {
-      "version": "2.34.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.34.1.tgz",
-      "integrity": "sha512-SqlCunwhweMDJNKVf3kabiN6FwpvCIffn2cjfaZD0zqZQ3M1tWMJ/kSA0TGfe7lWu9JloNmVm+ArcudGitvX3w==",
+      "version": "2.36.0",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.36.0.tgz",
+      "integrity": "sha512-+vqJN7wycr7Tt/UICHNtctfDnmISwMqox2Izhb29+nh2j+xsEwHBTdlVolw8e5rb97Sm/sGG+0msSlPUBF4f1g==",
       "dev": true,
       "license": "BSD-3-Clause",
       "optional": true,
@@ -3420,9 +3420,9 @@
       }
     },
     "node_modules/@sentry/cli-linux-arm": {
-      "version": "2.34.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.34.1.tgz",
-      "integrity": "sha512-CDhtFbUs16CoU10wEbxnn/pEuenFIMosTcxI7v0gWp3Wo0B2h0bOsLEk9dlT0YsqRTAldKUzef9AVX82m5Svwg==",
+      "version": "2.36.0",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.36.0.tgz",
+      "integrity": "sha512-Nc6yOFTJrTbTyX8H2f/uEJSZ0uK0YQ955UzV8mqbcQpycEzMD1kkxidu3AauT9fNJlzwx5rx4UGmHSjZkzFhAw==",
       "cpu": [
         "arm"
       ],
@@ -3438,9 +3438,9 @@
       }
     },
     "node_modules/@sentry/cli-linux-arm64": {
-      "version": "2.34.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.34.1.tgz",
-      "integrity": "sha512-iSl/uNWjKbVPb6ll12SmHG9iGcC3oN8jjzdycm/mD3H/d8DLMloEiaz8lHQnsYCaPiNKwap1ThKlPvnKOU4SNg==",
+      "version": "2.36.0",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.36.0.tgz",
+      "integrity": "sha512-stFAgqpDN2sy0B4lB8hq1R2cWZAxeeqTYvJHiNBTUDuEUrTS3HxTftXgX28cBXHKjFanTC58jraw5dfm8KjRUA==",
       "cpu": [
         "arm64"
       ],
@@ -3456,9 +3456,9 @@
       }
     },
     "node_modules/@sentry/cli-linux-i686": {
-      "version": "2.34.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.34.1.tgz",
-      "integrity": "sha512-jq5o49pgzJFv/CQtvx4FLVO1xra22gzP76FtmvPwEhZQhJT6QduW9fpnvVDnOaY8YLzC7GAeszUV6sqZ0MZUqg==",
+      "version": "2.36.0",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.36.0.tgz",
+      "integrity": "sha512-Liis5qyDcnmq5X4B1M5vOH/3vO7uvLF1dXwLRGCrrsA8olDh/v9cMMNcG7n7GfkVbvf6PPg32JiJ0SwG7ZL2ZA==",
       "cpu": [
         "x86",
         "ia32"
@@ -3475,9 +3475,9 @@
       }
     },
     "node_modules/@sentry/cli-linux-x64": {
-      "version": "2.34.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.34.1.tgz",
-      "integrity": "sha512-O99RAkrcMErWLPRdza6HaG7kmHCx9MYFNDX6FLrAgSP3oz+X3ral1oDTIrMs4hVbPDK287ZGAqCJtk+1iOjEBg==",
+      "version": "2.36.0",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.36.0.tgz",
+      "integrity": "sha512-myzppIE+008jKZdDzkNIHm0FdIk94l6GNk0A3XYh7r9S/sTMWaxq6u6CR2aqDX1X18Ksh7kxHhMnKep4Fd+TqQ==",
       "cpu": [
         "x64"
       ],
@@ -3493,9 +3493,9 @@
       }
     },
     "node_modules/@sentry/cli-win32-i686": {
-      "version": "2.34.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.34.1.tgz",
-      "integrity": "sha512-yEeuneEVmExCbWlnSauhIg8wZDfKxRaou8XRfM6oPlSBu0XO5HUI3uRK5t2xT0zX8Syzh2kCZpdVE1KLavVeKA==",
+      "version": "2.36.0",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.36.0.tgz",
+      "integrity": "sha512-as/TKSH1evLKMkziRQklpKjwwVuqs1LST/Od544XISbGwUPtMTP9rOyzc3zxT2LI9dfSshJP/wRWru2oytBGkg==",
       "cpu": [
         "x86",
         "ia32"
@@ -3511,9 +3511,9 @@
       }
     },
     "node_modules/@sentry/cli-win32-x64": {
-      "version": "2.34.1",
-      "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.34.1.tgz",
-      "integrity": "sha512-mU48VpDTwRgt7/Pf3vk/P87m4kM3XEXHHHfq9EvHCTspFF6GtMfL9njZ7+5Z+7ko852JS4kpunjZtsxmoP4/zA==",
+      "version": "2.36.0",
+      "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.36.0.tgz",
+      "integrity": "sha512-9Adpiadr/mMWkNQaWDy3hL6P0WV1P1fYzZiQxSh0xRkRCbyV27LKeJvVjhmGiZOlygZFzksZW9qNDd4d6BmEXQ==",
       "cpu": [
         "x64"
       ],
@@ -4424,28 +4424,27 @@
       "license": "MIT"
     },
     "node_modules/@vue/babel-helper-vue-transform-on": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.2.tgz",
-      "integrity": "sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.4.tgz",
+      "integrity": "sha512-3L9zXWRN2jvmLjtSyw9vtcO5KTSCfKhCD5rEZM+024bc+4dKSzTjIABl/5b+uZ5nXe5y31uUMxxLo1PdXkYaig==",
       "dev": true,
       "license": "MIT"
     },
     "node_modules/@vue/babel-plugin-jsx": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.2.tgz",
-      "integrity": "sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.4.tgz",
+      "integrity": "sha512-jwAVtHUaDfOGGT1EmVKBi0anXOtPvsuKbImcdnHXluaJQ6GEJzshf1JMTtMRx2fPiG7BZjNmyMv+NdZY2OyZEA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "~7.22.15",
-        "@babel/helper-plugin-utils": "^7.22.5",
-        "@babel/plugin-syntax-jsx": "^7.23.3",
-        "@babel/template": "^7.23.9",
-        "@babel/traverse": "^7.23.9",
-        "@babel/types": "^7.23.9",
-        "@vue/babel-helper-vue-transform-on": "1.2.2",
-        "@vue/babel-plugin-resolve-type": "1.2.2",
-        "camelcase": "^6.3.0",
+        "@babel/helper-module-imports": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/plugin-syntax-jsx": "^7.24.7",
+        "@babel/template": "^7.25.0",
+        "@babel/traverse": "^7.25.6",
+        "@babel/types": "^7.25.6",
+        "@vue/babel-helper-vue-transform-on": "1.2.4",
+        "@vue/babel-plugin-resolve-type": "1.2.4",
         "html-tags": "^3.3.1",
         "svg-tags": "^1.0.0"
       },
@@ -4458,49 +4457,23 @@
         }
       }
     },
-    "node_modules/@vue/babel-plugin-jsx/node_modules/@babel/helper-module-imports": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
-      "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/types": "^7.22.15"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@vue/babel-plugin-resolve-type": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.2.tgz",
-      "integrity": "sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.4.tgz",
+      "integrity": "sha512-jWcJAmfKvc/xT2XBC4JAmy2eezNjU3CLfeDecl2Ge3tSjJCTmKJWkEhHdzXyx9Nr6PbIcQrFKhCaEDobhSrPqw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.23.5",
-        "@babel/helper-module-imports": "~7.22.15",
-        "@babel/helper-plugin-utils": "^7.22.5",
-        "@babel/parser": "^7.23.9",
-        "@vue/compiler-sfc": "^3.4.15"
+        "@babel/code-frame": "^7.24.7",
+        "@babel/helper-module-imports": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/parser": "^7.25.6",
+        "@vue/compiler-sfc": "^3.5.3"
       },
       "peerDependencies": {
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@babel/helper-module-imports": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
-      "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/types": "^7.22.15"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@vue/babel-plugin-transform-vue-jsx": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz",
@@ -4676,16 +4649,6 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@vue/babel-sugar-v-model/node_modules/camelcase": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/@vue/babel-sugar-v-model/node_modules/html-tags": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz",
@@ -4711,53 +4674,43 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@vue/babel-sugar-v-on/node_modules/camelcase": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.1.tgz",
-      "integrity": "sha512-WdjF+NSgFYdWttHevHw5uaJFtKPalhmxhlu2uREj8cLP0uyKKIR60/JvSZNTp0x+NSd63iTiORQTx3+tt55NWQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.3.tgz",
+      "integrity": "sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.1",
+        "@vue/shared": "3.5.3",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.1.tgz",
-      "integrity": "sha512-Ao23fB1lINo18HLCbJVApvzd9OQe8MgmQSgyY5+umbWj2w92w9KykVmJ4Iv2US5nak3ixc2B+7Km7JTNhQ8kSQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.3.tgz",
+      "integrity": "sha512-wnzFArg9zpvk/811CDOZOadJRugf1Bgl/TQ3RfV4nKfSPok4hi0w10ziYUQR6LnnBAUlEXYLUfZ71Oj9ds/+QA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.1",
-        "@vue/shared": "3.5.1"
+        "@vue/compiler-core": "3.5.3",
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.1.tgz",
-      "integrity": "sha512-DFizMNH8eDglLhlfwJ0+ciBsztaYe3fY/zcZjrqL1ljXvUw/UpC84M1d7HpBTCW68SNqZyIxrs1XWmf+73Y65w==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.3.tgz",
+      "integrity": "sha512-P3uATLny2tfyvMB04OQFe7Sczteno7SLFxwrOA/dw01pBWQHB5HL15a8PosoNX2aG/EAMGqnXTu+1LnmzFhpTQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.1",
-        "@vue/compiler-dom": "3.5.1",
-        "@vue/compiler-ssr": "3.5.1",
-        "@vue/shared": "3.5.1",
+        "@vue/compiler-core": "3.5.3",
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/compiler-ssr": "3.5.3",
+        "@vue/shared": "3.5.3",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.44",
@@ -4775,14 +4728,14 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.1.tgz",
-      "integrity": "sha512-C1hpSHQgRM8bg+5XWWD7CkFaVpSn9wZHCLRd10AmxqrH17d4EMP6+XcZpwBOM7H1jeStU5naEapZZWX0kso1tQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.3.tgz",
+      "integrity": "sha512-F/5f+r2WzL/2YAPl7UlKcJWHrvoZN8XwEBLnT7S4BXwncH25iDOabhO2M2DWioyTguJAGavDOawejkFXj8EM1w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.1",
-        "@vue/shared": "3.5.1"
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/component-compiler-utils": {
@@ -4891,9 +4844,9 @@
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.1.tgz",
-      "integrity": "sha512-NdcTRoO4KuW2RSFgpE2c+E/R/ZHaRzWPxAGxhmxZaaqLh6nYCXx7lc9a88ioqOCxCaV2SFJmujkxbUScW7dNsQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.3.tgz",
+      "integrity": "sha512-Jp2v8nylKBT+PlOUjun2Wp/f++TfJVFjshLzNtJDdmFJabJa7noGMncqXRM1vXGX+Yo2V7WykQFNxusSim8SCA==",
       "dev": true,
       "license": "MIT"
     },
@@ -5450,22 +5403,19 @@
       }
     },
     "node_modules/camelcase": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
-      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=6"
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001655",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz",
-      "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==",
+      "version": "1.0.30001659",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001659.tgz",
+      "integrity": "sha512-Qxxyfv3RdHAfJcXelgf0hU4DFUVXBGTjqrBUZLUh8AtlGnsDo+CnncYtTd95+ZKfnANUOzxyIQCuU/UeBZBYoA==",
       "dev": true,
       "funding": [
         {
@@ -5969,25 +5919,18 @@
       "license": "CC0-1.0"
     },
     "node_modules/cssstyle": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz",
-      "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz",
+      "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "rrweb-cssom": "^0.6.0"
+        "rrweb-cssom": "^0.7.1"
       },
       "engines": {
         "node": ">=18"
       }
     },
-    "node_modules/cssstyle/node_modules/rrweb-cssom": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
-      "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/csstype": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
@@ -6022,13 +5965,13 @@
       "license": "MIT"
     },
     "node_modules/debug": {
-      "version": "4.3.6",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
-      "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
+      "version": "4.3.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+      "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ms": "2.1.2"
+        "ms": "^2.1.3"
       },
       "engines": {
         "node": ">=6.0"
@@ -6339,9 +6282,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.13",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
-      "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
+      "version": "1.5.18",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz",
+      "integrity": "sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==",
       "dev": true,
       "license": "ISC"
     },
@@ -7347,9 +7290,9 @@
       "license": "MIT"
     },
     "node_modules/follow-redirects": {
-      "version": "1.15.8",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.8.tgz",
-      "integrity": "sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==",
+      "version": "1.15.9",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+      "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
       "funding": [
         {
           "type": "individual",
@@ -9033,9 +8976,9 @@
       }
     },
     "node_modules/log-update/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -9389,9 +9332,9 @@
       "license": "MIT"
     },
     "node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
       "dev": true,
       "license": "MIT"
     },
@@ -11013,9 +10956,9 @@
       }
     },
     "node_modules/source-map-js": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
-      "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
       "license": "BSD-3-Clause",
       "engines": {
         "node": ">=0.10.0"
@@ -11131,9 +11074,9 @@
       }
     },
     "node_modules/string-width/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -11489,9 +11432,9 @@
       }
     },
     "node_modules/tinyspy": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz",
-      "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz",
+      "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -11781,9 +11724,9 @@
       }
     },
     "node_modules/unplugin-vue-components/node_modules/unplugin": {
-      "version": "1.13.1",
-      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.13.1.tgz",
-      "integrity": "sha512-6Kq1iSSwg7KyjcThRUks9LuqDAKvtnioxbL9iEtB9ctTyBA5OmrB8gZd/d225VJu1w3UpUsKV7eGrvf59J7+VA==",
+      "version": "1.14.0",
+      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.14.0.tgz",
+      "integrity": "sha512-cfkZeALGyW7tKYjZbi0G+pn0XnUFa0QvLIeLJEUUlnU0R8YYsBQnt5+h9Eu1B7AB7KETld+UBFI5lOeBL+msoQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -12705,9 +12648,9 @@
       }
     },
     "node_modules/wrap-ansi/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index 8e907a952c..e6e40a961f 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -2568,9 +2568,9 @@
       }
     },
     "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -3286,28 +3286,27 @@
       "license": "MIT"
     },
     "node_modules/@vue/babel-helper-vue-transform-on": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.2.tgz",
-      "integrity": "sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.4.tgz",
+      "integrity": "sha512-3L9zXWRN2jvmLjtSyw9vtcO5KTSCfKhCD5rEZM+024bc+4dKSzTjIABl/5b+uZ5nXe5y31uUMxxLo1PdXkYaig==",
       "dev": true,
       "license": "MIT"
     },
     "node_modules/@vue/babel-plugin-jsx": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.2.tgz",
-      "integrity": "sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.4.tgz",
+      "integrity": "sha512-jwAVtHUaDfOGGT1EmVKBi0anXOtPvsuKbImcdnHXluaJQ6GEJzshf1JMTtMRx2fPiG7BZjNmyMv+NdZY2OyZEA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "~7.22.15",
-        "@babel/helper-plugin-utils": "^7.22.5",
-        "@babel/plugin-syntax-jsx": "^7.23.3",
-        "@babel/template": "^7.23.9",
-        "@babel/traverse": "^7.23.9",
-        "@babel/types": "^7.23.9",
-        "@vue/babel-helper-vue-transform-on": "1.2.2",
-        "@vue/babel-plugin-resolve-type": "1.2.2",
-        "camelcase": "^6.3.0",
+        "@babel/helper-module-imports": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/plugin-syntax-jsx": "^7.24.7",
+        "@babel/template": "^7.25.0",
+        "@babel/traverse": "^7.25.6",
+        "@babel/types": "^7.25.6",
+        "@vue/babel-helper-vue-transform-on": "1.2.4",
+        "@vue/babel-plugin-resolve-type": "1.2.4",
         "html-tags": "^3.3.1",
         "svg-tags": "^1.0.0"
       },
@@ -3320,49 +3319,23 @@
         }
       }
     },
-    "node_modules/@vue/babel-plugin-jsx/node_modules/@babel/helper-module-imports": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
-      "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/types": "^7.22.15"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@vue/babel-plugin-resolve-type": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.2.tgz",
-      "integrity": "sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.4.tgz",
+      "integrity": "sha512-jWcJAmfKvc/xT2XBC4JAmy2eezNjU3CLfeDecl2Ge3tSjJCTmKJWkEhHdzXyx9Nr6PbIcQrFKhCaEDobhSrPqw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.23.5",
-        "@babel/helper-module-imports": "~7.22.15",
-        "@babel/helper-plugin-utils": "^7.22.5",
-        "@babel/parser": "^7.23.9",
-        "@vue/compiler-sfc": "^3.4.15"
+        "@babel/code-frame": "^7.24.7",
+        "@babel/helper-module-imports": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/parser": "^7.25.6",
+        "@vue/compiler-sfc": "^3.5.3"
       },
       "peerDependencies": {
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@babel/helper-module-imports": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
-      "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/types": "^7.22.15"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@vue/babel-plugin-transform-vue-jsx": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz",
@@ -3538,16 +3511,6 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@vue/babel-sugar-v-model/node_modules/camelcase": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/@vue/babel-sugar-v-model/node_modules/html-tags": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz",
@@ -3573,16 +3536,6 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@vue/babel-sugar-v-on/node_modules/camelcase": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/@vue/compiler-core": {
       "version": "3.5.3",
       "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.3.tgz",
@@ -4047,22 +4000,19 @@
       }
     },
     "node_modules/camelcase": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
-      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=6"
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001655",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz",
-      "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==",
+      "version": "1.0.30001659",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001659.tgz",
+      "integrity": "sha512-Qxxyfv3RdHAfJcXelgf0hU4DFUVXBGTjqrBUZLUh8AtlGnsDo+CnncYtTd95+ZKfnANUOzxyIQCuU/UeBZBYoA==",
       "dev": true,
       "funding": [
         {
@@ -4298,25 +4248,18 @@
       }
     },
     "node_modules/cssstyle": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz",
-      "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz",
+      "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "rrweb-cssom": "^0.6.0"
+        "rrweb-cssom": "^0.7.1"
       },
       "engines": {
         "node": ">=18"
       }
     },
-    "node_modules/cssstyle/node_modules/rrweb-cssom": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
-      "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/csstype": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
@@ -4346,13 +4289,13 @@
       "license": "MIT"
     },
     "node_modules/debug": {
-      "version": "4.3.6",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
-      "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
+      "version": "4.3.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+      "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ms": "2.1.2"
+        "ms": "^2.1.3"
       },
       "engines": {
         "node": ">=6.0"
@@ -4529,9 +4472,9 @@
       }
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.13",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
-      "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
+      "version": "1.5.18",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz",
+      "integrity": "sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==",
       "dev": true,
       "license": "ISC"
     },
@@ -6284,9 +6227,9 @@
       }
     },
     "node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
       "dev": true,
       "license": "MIT"
     },
@@ -7220,9 +7163,9 @@
       }
     },
     "node_modules/source-map-js": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
-      "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
       "dev": true,
       "license": "BSD-3-Clause",
       "engines": {
@@ -7307,9 +7250,9 @@
       "license": "MIT"
     },
     "node_modules/string-width/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -7541,9 +7484,9 @@
       }
     },
     "node_modules/tinyspy": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz",
-      "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz",
+      "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -8279,9 +8222,9 @@
       }
     },
     "node_modules/wrap-ansi/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/print/package-lock.json b/print/package-lock.json
index a05977cf9f..f70022d91b 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -1607,9 +1607,9 @@
       }
     },
     "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -2210,25 +2210,26 @@
       }
     },
     "node_modules/@nuxt/telemetry": {
-      "version": "2.5.4",
-      "resolved": "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-2.5.4.tgz",
-      "integrity": "sha512-KH6wxzsNys69daSO0xUv0LEBAfhwwjK1M+0Cdi1/vxmifCslMIY7lN11B4eywSfscbyVPAYJvANyc7XiVPImBQ==",
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/@nuxt/telemetry/-/telemetry-2.6.0.tgz",
+      "integrity": "sha512-h4YJ1d32cU7tDKjjhjtIIEck4WF/w3DTQBT348E9Pz85YLttnLqktLM0Ez9Xc2LzCeUgBDQv1el7Ob/zT3KUqg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@nuxt/kit": "^3.11.2",
+        "@nuxt/kit": "^3.13.1",
         "ci-info": "^4.0.0",
         "consola": "^3.2.3",
         "create-require": "^1.1.1",
         "defu": "^6.1.4",
         "destr": "^2.0.3",
         "dotenv": "^16.4.5",
-        "git-url-parse": "^14.0.0",
+        "git-url-parse": "^15.0.0",
         "is-docker": "^3.0.0",
-        "jiti": "^1.21.0",
+        "jiti": "^1.21.6",
         "mri": "^1.2.0",
         "nanoid": "^5.0.7",
         "ofetch": "^1.3.4",
+        "package-manager-detector": "^0.2.0",
         "parse-git-config": "^3.0.0",
         "pathe": "^1.1.2",
         "rc9": "^2.1.2",
@@ -2802,9 +2803,9 @@
       }
     },
     "node_modules/@opentelemetry/api-logs": {
-      "version": "0.52.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz",
-      "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==",
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
+      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
       "license": "Apache-2.0",
       "dependencies": {
         "@opentelemetry/api": "^1.0.0"
@@ -2841,13 +2842,13 @@
       }
     },
     "node_modules/@opentelemetry/instrumentation": {
-      "version": "0.52.1",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz",
-      "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==",
+      "version": "0.53.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
+      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/api-logs": "0.52.1",
-        "@types/shimmer": "^1.0.2",
+        "@opentelemetry/api-logs": "0.53.0",
+        "@types/shimmer": "^1.2.0",
         "import-in-the-middle": "^1.8.1",
         "require-in-the-middle": "^7.1.1",
         "semver": "^7.5.2",
@@ -2878,30 +2879,32 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-connect/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+    "node_modules/@opentelemetry/instrumentation-express": {
+      "version": "0.42.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.42.0.tgz",
+      "integrity": "sha512-YNcy7ZfGnLsVEqGXQPT+S0G1AE46N21ORY7i7yUQyfhGAL4RBjnZUqefMI0NwqIl6nGbr1IpF0rZGoN8Q7x12Q==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
+        "@opentelemetry/core": "^1.8.0",
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0"
       },
       "engines": {
         "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-connect/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+    "node_modules/@opentelemetry/instrumentation-fastify": {
+      "version": "0.39.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.39.0.tgz",
+      "integrity": "sha512-SS9uSlKcsWZabhBp2szErkeuuBDgxOUlllwkS92dVaWRnMmwysPhcEgHKB8rUe3BHg/GnZC1eo1hbTZv4YhfoA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
+        "@opentelemetry/core": "^1.8.0",
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0"
       },
       "engines": {
         "node": ">=14"
@@ -2910,15 +2913,14 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-express": {
-      "version": "0.42.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.42.0.tgz",
-      "integrity": "sha512-YNcy7ZfGnLsVEqGXQPT+S0G1AE46N21ORY7i7yUQyfhGAL4RBjnZUqefMI0NwqIl6nGbr1IpF0rZGoN8Q7x12Q==",
+    "node_modules/@opentelemetry/instrumentation-fs": {
+      "version": "0.15.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.15.0.tgz",
+      "integrity": "sha512-JWVKdNLpu1skqZQA//jKOcKdJC66TWKqa2FUFq70rKohvaSq47pmXlnabNO+B/BvLfmidfiaN35XakT5RyMl2Q==",
       "license": "Apache-2.0",
       "dependencies": {
         "@opentelemetry/core": "^1.8.0",
-        "@opentelemetry/instrumentation": "^0.53.0",
-        "@opentelemetry/semantic-conventions": "^1.27.0"
+        "@opentelemetry/instrumentation": "^0.53.0"
       },
       "engines": {
         "node": ">=14"
@@ -2927,30 +2929,28 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-express/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+    "node_modules/@opentelemetry/instrumentation-generic-pool": {
+      "version": "0.39.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.39.0.tgz",
+      "integrity": "sha512-y4v8Y+tSfRB3NNBvHjbjrn7rX/7sdARG7FuK6zR8PGb28CTa0kHpEGCJqvL9L8xkTNvTXo+lM36ajFGUaK1aNw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
+        "@opentelemetry/instrumentation": "^0.53.0"
       },
       "engines": {
         "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-express/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+    "node_modules/@opentelemetry/instrumentation-graphql": {
+      "version": "0.43.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.43.0.tgz",
+      "integrity": "sha512-aI3YMmC2McGd8KW5du1a2gBA0iOMOGLqg4s9YjzwbjFwjlmMNFSK1P3AIg374GWg823RPUGfVTIgZ/juk9CVOA==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
+        "@opentelemetry/instrumentation": "^0.53.0"
       },
       "engines": {
         "node": ">=14"
@@ -2959,10 +2959,10 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-fastify": {
-      "version": "0.39.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.39.0.tgz",
-      "integrity": "sha512-SS9uSlKcsWZabhBp2szErkeuuBDgxOUlllwkS92dVaWRnMmwysPhcEgHKB8rUe3BHg/GnZC1eo1hbTZv4YhfoA==",
+    "node_modules/@opentelemetry/instrumentation-hapi": {
+      "version": "0.41.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.41.0.tgz",
+      "integrity": "sha512-jKDrxPNXDByPlYcMdZjNPYCvw0SQJjN+B1A+QH+sx+sAHsKSAf9hwFiJSrI6C4XdOls43V/f/fkp9ITkHhKFbQ==",
       "license": "Apache-2.0",
       "dependencies": {
         "@opentelemetry/core": "^1.8.0",
@@ -2976,30 +2976,33 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-fastify/node_modules/@opentelemetry/api-logs": {
+    "node_modules/@opentelemetry/instrumentation-http": {
       "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.53.0.tgz",
+      "integrity": "sha512-H74ErMeDuZfj7KgYCTOFGWF5W9AfaPnqLQQxeFq85+D29wwV2yqHbz2IKLYpkOh7EI6QwDEl7rZCIxjJLyc/CQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
+        "@opentelemetry/core": "1.26.0",
+        "@opentelemetry/instrumentation": "0.53.0",
+        "@opentelemetry/semantic-conventions": "1.27.0",
+        "semver": "^7.5.2"
       },
       "engines": {
         "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-fastify/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+    "node_modules/@opentelemetry/instrumentation-ioredis": {
+      "version": "0.43.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.43.0.tgz",
+      "integrity": "sha512-i3Dke/LdhZbiUAEImmRG3i7Dimm/BD7t8pDDzwepSvIQ6s2X6FPia7561gw+64w+nx0+G9X14D7rEfaMEmmjig==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/redis-common": "^0.36.2",
+        "@opentelemetry/semantic-conventions": "^1.27.0"
       },
       "engines": {
         "node": ">=14"
@@ -3008,14 +3011,15 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-fs": {
-      "version": "0.15.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.15.0.tgz",
-      "integrity": "sha512-JWVKdNLpu1skqZQA//jKOcKdJC66TWKqa2FUFq70rKohvaSq47pmXlnabNO+B/BvLfmidfiaN35XakT5RyMl2Q==",
+    "node_modules/@opentelemetry/instrumentation-koa": {
+      "version": "0.43.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.43.0.tgz",
+      "integrity": "sha512-lDAhSnmoTIN6ELKmLJBplXzT/Jqs5jGZehuG22EdSMaTwgjMpxMDI1YtlKEhiWPWkrz5LUsd0aOO0ZRc9vn3AQ==",
       "license": "Apache-2.0",
       "dependencies": {
         "@opentelemetry/core": "^1.8.0",
-        "@opentelemetry/instrumentation": "^0.53.0"
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0"
       },
       "engines": {
         "node": ">=14"
@@ -3024,30 +3028,15 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-fs/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-fs/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+    "node_modules/@opentelemetry/instrumentation-mongodb": {
+      "version": "0.47.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.47.0.tgz",
+      "integrity": "sha512-yqyXRx2SulEURjgOQyJzhCECSh5i1uM49NUaq9TqLd6fA7g26OahyJfsr9NE38HFqGRHpi4loyrnfYGdrsoVjQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/sdk-metrics": "^1.9.1",
+        "@opentelemetry/semantic-conventions": "^1.27.0"
       },
       "engines": {
         "node": ">=14"
@@ -3056,13 +3045,15 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-generic-pool": {
-      "version": "0.39.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.39.0.tgz",
-      "integrity": "sha512-y4v8Y+tSfRB3NNBvHjbjrn7rX/7sdARG7FuK6zR8PGb28CTa0kHpEGCJqvL9L8xkTNvTXo+lM36ajFGUaK1aNw==",
+    "node_modules/@opentelemetry/instrumentation-mongoose": {
+      "version": "0.42.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.42.0.tgz",
+      "integrity": "sha512-AnWv+RaR86uG3qNEMwt3plKX1ueRM7AspfszJYVkvkehiicC3bHQA6vWdb6Zvy5HAE14RyFbu9+2hUUjR2NSyg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/instrumentation": "^0.53.0"
+        "@opentelemetry/core": "^1.8.0",
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0"
       },
       "engines": {
         "node": ">=14"
@@ -3071,30 +3062,15 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-generic-pool/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-generic-pool/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+    "node_modules/@opentelemetry/instrumentation-mysql": {
+      "version": "0.41.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.41.0.tgz",
+      "integrity": "sha512-jnvrV6BsQWyHS2qb2fkfbfSb1R/lmYwqEZITwufuRl37apTopswu9izc0b1CYRp/34tUG/4k/V39PND6eyiNvw==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0",
+        "@types/mysql": "2.15.26"
       },
       "engines": {
         "node": ">=14"
@@ -3103,13 +3079,15 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-graphql": {
-      "version": "0.43.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.43.0.tgz",
-      "integrity": "sha512-aI3YMmC2McGd8KW5du1a2gBA0iOMOGLqg4s9YjzwbjFwjlmMNFSK1P3AIg374GWg823RPUGfVTIgZ/juk9CVOA==",
+    "node_modules/@opentelemetry/instrumentation-mysql2": {
+      "version": "0.41.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.41.0.tgz",
+      "integrity": "sha512-REQB0x+IzVTpoNgVmy5b+UnH1/mDByrneimP6sbDHkp1j8QOl1HyWOrBH/6YWR0nrbU3l825Em5PlybjT3232g==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/instrumentation": "^0.53.0"
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0",
+        "@opentelemetry/sql-common": "^0.40.1"
       },
       "engines": {
         "node": ">=14"
@@ -3118,30 +3096,33 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-graphql/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
+    "node_modules/@opentelemetry/instrumentation-nestjs-core": {
+      "version": "0.40.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.40.0.tgz",
+      "integrity": "sha512-WF1hCUed07vKmf5BzEkL0wSPinqJgH7kGzOjjMAiTGacofNXjb/y4KQ8loj2sNsh5C/NN7s1zxQuCgbWbVTGKg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0"
       },
       "engines": {
         "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-graphql/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
+    "node_modules/@opentelemetry/instrumentation-pg": {
+      "version": "0.44.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.44.0.tgz",
+      "integrity": "sha512-oTWVyzKqXud1BYEGX1loo2o4k4vaU1elr3vPO8NZolrBtFvQ34nx4HgUaexUDuEog00qQt+MLR5gws/p+JXMLQ==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
+        "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/semantic-conventions": "^1.27.0",
+        "@opentelemetry/sql-common": "^0.40.1",
+        "@types/pg": "8.6.1",
+        "@types/pg-pool": "2.0.6"
       },
       "engines": {
         "node": ">=14"
@@ -3150,14 +3131,14 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-hapi": {
-      "version": "0.41.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.41.0.tgz",
-      "integrity": "sha512-jKDrxPNXDByPlYcMdZjNPYCvw0SQJjN+B1A+QH+sx+sAHsKSAf9hwFiJSrI6C4XdOls43V/f/fkp9ITkHhKFbQ==",
+    "node_modules/@opentelemetry/instrumentation-redis-4": {
+      "version": "0.42.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.42.0.tgz",
+      "integrity": "sha512-NaD+t2JNcOzX/Qa7kMy68JbmoVIV37fT/fJYzLKu2Wwd+0NCxt+K2OOsOakA8GVg8lSpFdbx4V/suzZZ2Pvdjg==",
       "license": "Apache-2.0",
       "dependencies": {
-        "@opentelemetry/core": "^1.8.0",
         "@opentelemetry/instrumentation": "^0.53.0",
+        "@opentelemetry/redis-common": "^0.36.2",
         "@opentelemetry/semantic-conventions": "^1.27.0"
       },
       "engines": {
@@ -3167,530 +3148,6 @@
         "@opentelemetry/api": "^1.3.0"
       }
     },
-    "node_modules/@opentelemetry/instrumentation-hapi/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-hapi/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-http": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.53.0.tgz",
-      "integrity": "sha512-H74ErMeDuZfj7KgYCTOFGWF5W9AfaPnqLQQxeFq85+D29wwV2yqHbz2IKLYpkOh7EI6QwDEl7rZCIxjJLyc/CQ==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/core": "1.26.0",
-        "@opentelemetry/instrumentation": "0.53.0",
-        "@opentelemetry/semantic-conventions": "1.27.0",
-        "semver": "^7.5.2"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-ioredis": {
-      "version": "0.43.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.43.0.tgz",
-      "integrity": "sha512-i3Dke/LdhZbiUAEImmRG3i7Dimm/BD7t8pDDzwepSvIQ6s2X6FPia7561gw+64w+nx0+G9X14D7rEfaMEmmjig==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/instrumentation": "^0.53.0",
-        "@opentelemetry/redis-common": "^0.36.2",
-        "@opentelemetry/semantic-conventions": "^1.27.0"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-ioredis/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-ioredis/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-koa": {
-      "version": "0.43.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.43.0.tgz",
-      "integrity": "sha512-lDAhSnmoTIN6ELKmLJBplXzT/Jqs5jGZehuG22EdSMaTwgjMpxMDI1YtlKEhiWPWkrz5LUsd0aOO0ZRc9vn3AQ==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/core": "^1.8.0",
-        "@opentelemetry/instrumentation": "^0.53.0",
-        "@opentelemetry/semantic-conventions": "^1.27.0"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-koa/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-koa/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-mongodb": {
-      "version": "0.47.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.47.0.tgz",
-      "integrity": "sha512-yqyXRx2SulEURjgOQyJzhCECSh5i1uM49NUaq9TqLd6fA7g26OahyJfsr9NE38HFqGRHpi4loyrnfYGdrsoVjQ==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/instrumentation": "^0.53.0",
-        "@opentelemetry/sdk-metrics": "^1.9.1",
-        "@opentelemetry/semantic-conventions": "^1.27.0"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-mongodb/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-mongodb/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-mongoose": {
-      "version": "0.42.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.42.0.tgz",
-      "integrity": "sha512-AnWv+RaR86uG3qNEMwt3plKX1ueRM7AspfszJYVkvkehiicC3bHQA6vWdb6Zvy5HAE14RyFbu9+2hUUjR2NSyg==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/core": "^1.8.0",
-        "@opentelemetry/instrumentation": "^0.53.0",
-        "@opentelemetry/semantic-conventions": "^1.27.0"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-mongoose/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-mongoose/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-mysql": {
-      "version": "0.41.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.41.0.tgz",
-      "integrity": "sha512-jnvrV6BsQWyHS2qb2fkfbfSb1R/lmYwqEZITwufuRl37apTopswu9izc0b1CYRp/34tUG/4k/V39PND6eyiNvw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/instrumentation": "^0.53.0",
-        "@opentelemetry/semantic-conventions": "^1.27.0",
-        "@types/mysql": "2.15.26"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-mysql/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-mysql/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-mysql2": {
-      "version": "0.41.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.41.0.tgz",
-      "integrity": "sha512-REQB0x+IzVTpoNgVmy5b+UnH1/mDByrneimP6sbDHkp1j8QOl1HyWOrBH/6YWR0nrbU3l825Em5PlybjT3232g==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/instrumentation": "^0.53.0",
-        "@opentelemetry/semantic-conventions": "^1.27.0",
-        "@opentelemetry/sql-common": "^0.40.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-mysql2/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-mysql2/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-nestjs-core": {
-      "version": "0.40.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.40.0.tgz",
-      "integrity": "sha512-WF1hCUed07vKmf5BzEkL0wSPinqJgH7kGzOjjMAiTGacofNXjb/y4KQ8loj2sNsh5C/NN7s1zxQuCgbWbVTGKg==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/instrumentation": "^0.53.0",
-        "@opentelemetry/semantic-conventions": "^1.27.0"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-nestjs-core/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-nestjs-core/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-pg": {
-      "version": "0.44.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.44.0.tgz",
-      "integrity": "sha512-oTWVyzKqXud1BYEGX1loo2o4k4vaU1elr3vPO8NZolrBtFvQ34nx4HgUaexUDuEog00qQt+MLR5gws/p+JXMLQ==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/instrumentation": "^0.53.0",
-        "@opentelemetry/semantic-conventions": "^1.27.0",
-        "@opentelemetry/sql-common": "^0.40.1",
-        "@types/pg": "8.6.1",
-        "@types/pg-pool": "2.0.6"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-pg/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-pg/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-redis-4": {
-      "version": "0.42.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.42.0.tgz",
-      "integrity": "sha512-NaD+t2JNcOzX/Qa7kMy68JbmoVIV37fT/fJYzLKu2Wwd+0NCxt+K2OOsOakA8GVg8lSpFdbx4V/suzZZ2Pvdjg==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/instrumentation": "^0.53.0",
-        "@opentelemetry/redis-common": "^0.36.2",
-        "@opentelemetry/semantic-conventions": "^1.27.0"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-redis-4/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@opentelemetry/instrumentation-redis-4/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
     "node_modules/@opentelemetry/redis-common": {
       "version": "0.36.2",
       "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz",
@@ -4142,6 +3599,38 @@
         "@opentelemetry/sdk-trace-base": "^1.22"
       }
     },
+    "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/api-logs": {
+      "version": "0.52.1",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz",
+      "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/instrumentation": {
+      "version": "0.52.1",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz",
+      "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==",
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@opentelemetry/api-logs": "0.52.1",
+        "@types/shimmer": "^1.0.2",
+        "import-in-the-middle": "^1.8.1",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.2",
+        "shimmer": "^1.2.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
     "node_modules/@puppeteer/browsers": {
       "version": "2.4.0",
       "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.4.0.tgz",
@@ -4731,38 +4220,6 @@
         "opentelemetry-instrumentation-fetch-node": "1.2.3"
       }
     },
-    "node_modules/@sentry/node/node_modules/@opentelemetry/api-logs": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz",
-      "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=14"
-      }
-    },
-    "node_modules/@sentry/node/node_modules/@opentelemetry/instrumentation": {
-      "version": "0.53.0",
-      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz",
-      "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@opentelemetry/api-logs": "0.53.0",
-        "@types/shimmer": "^1.2.0",
-        "import-in-the-middle": "^1.8.1",
-        "require-in-the-middle": "^7.1.1",
-        "semver": "^7.5.2",
-        "shimmer": "^1.2.1"
-      },
-      "engines": {
-        "node": ">=14"
-      },
-      "peerDependencies": {
-        "@opentelemetry/api": "^1.3.0"
-      }
-    },
     "node_modules/@sentry/opentelemetry": {
       "version": "8.29.0",
       "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-8.29.0.tgz",
@@ -4819,14 +4276,13 @@
       }
     },
     "node_modules/@stylistic/eslint-plugin": {
-      "version": "2.7.2",
-      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.7.2.tgz",
-      "integrity": "sha512-3DVLU5HEuk2pQoBmXJlzvrxbKNpu2mJ0SRqz5O/CJjyNCr12ZiPcYMEtuArTyPOk5i7bsAU44nywh1rGfe3gKQ==",
+      "version": "2.8.0",
+      "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.8.0.tgz",
+      "integrity": "sha512-Ufvk7hP+bf+pD35R/QfunF793XlSRIC7USr3/EdgduK9j13i2JjmsM0LUz3/foS+jDYp2fzyWZA9N44CPur0Ow==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@types/eslint": "^9.6.1",
-        "@typescript-eslint/utils": "^8.3.0",
+        "@typescript-eslint/utils": "^8.4.0",
         "eslint-visitor-keys": "^4.0.0",
         "espree": "^10.1.0",
         "estraverse": "^5.3.0",
@@ -4947,9 +4403,9 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.5.3",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.3.tgz",
-      "integrity": "sha512-njripolh85IA9SQGTAqbmnNZTdxv7X/4OYGPz8tgy5JDr8MP+uDBa921GpYEoDDnwm0Hmn5ZPeJgiiSTPoOzkQ==",
+      "version": "22.5.4",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz",
+      "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==",
       "license": "MIT",
       "dependencies": {
         "undici-types": "~6.19.2"
@@ -5045,170 +4501,18 @@
         }
       }
     },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz",
-      "integrity": "sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.5.0",
-        "@typescript-eslint/visitor-keys": "8.5.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
-      "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz",
-      "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz",
-      "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.5.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
     "node_modules/@typescript-eslint/parser": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.4.0.tgz",
-      "integrity": "sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "@typescript-eslint/scope-manager": "8.4.0",
-        "@typescript-eslint/types": "8.4.0",
-        "@typescript-eslint/typescript-estree": "8.4.0",
-        "@typescript-eslint/visitor-keys": "8.4.0",
-        "debug": "^4.3.4"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^8.57.0 || ^9.0.0"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.4.0.tgz",
-      "integrity": "sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.4.0",
-        "@typescript-eslint/visitor-keys": "8.4.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils": {
-      "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.5.0.tgz",
-      "integrity": "sha512-N1K8Ix+lUM+cIDhL2uekVn/ZD7TZW+9/rwz8DclQpcQ9rk4sIL5CAlBC0CugWKREmDjBzI/kQqU4wkg46jWLYA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/typescript-estree": "8.5.0",
-        "@typescript-eslint/utils": "8.5.0",
-        "debug": "^4.3.4",
-        "ts-api-utils": "^1.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
-      "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz",
-      "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
       "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz",
-      "integrity": "sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.5.0.tgz",
+      "integrity": "sha512-gF77eNv0Xz2UJg/NbpWJ0kqAm35UMsvZf1GHj8D9MRFTj/V3tAciIWXfmPLsAAF/vUlpWPvUDyH1jjsr0cMVWw==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
+        "@typescript-eslint/scope-manager": "8.5.0",
         "@typescript-eslint/types": "8.5.0",
+        "@typescript-eslint/typescript-estree": "8.5.0",
         "@typescript-eslint/visitor-keys": "8.5.0",
-        "debug": "^4.3.4",
-        "fast-glob": "^3.3.2",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^1.3.0"
+        "debug": "^4.3.4"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5217,21 +4521,24 @@
         "type": "opencollective",
         "url": "https://opencollective.com/typescript-eslint"
       },
+      "peerDependencies": {
+        "eslint": "^8.57.0 || ^9.0.0"
+      },
       "peerDependenciesMeta": {
         "typescript": {
           "optional": true
         }
       }
     },
-    "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
+    "node_modules/@typescript-eslint/scope-manager": {
       "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz",
-      "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz",
+      "integrity": "sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@typescript-eslint/types": "8.5.0",
-        "eslint-visitor-keys": "^3.4.3"
+        "@typescript-eslint/visitor-keys": "8.5.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -5241,49 +4548,35 @@
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+    "node_modules/@typescript-eslint/type-utils": {
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.5.0.tgz",
+      "integrity": "sha512-N1K8Ix+lUM+cIDhL2uekVn/ZD7TZW+9/rwz8DclQpcQ9rk4sIL5CAlBC0CugWKREmDjBzI/kQqU4wkg46jWLYA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
+        "@typescript-eslint/typescript-estree": "8.5.0",
+        "@typescript-eslint/utils": "8.5.0",
+        "debug": "^4.3.4",
+        "ts-api-utils": "^1.3.0"
       },
       "engines": {
-        "node": ">=16 || 14 >=14.17"
+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+        "type": "opencollective",
+        "url": "https://opencollective.com/typescript-eslint"
+      },
+      "peerDependenciesMeta": {
+        "typescript": {
+          "optional": true
+        }
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.4.0.tgz",
-      "integrity": "sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==",
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz",
+      "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -5295,14 +4588,14 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.4.0.tgz",
-      "integrity": "sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==",
+      "version": "8.5.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz",
+      "integrity": "sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
-        "@typescript-eslint/types": "8.4.0",
-        "@typescript-eslint/visitor-keys": "8.4.0",
+        "@typescript-eslint/types": "8.5.0",
+        "@typescript-eslint/visitor-keys": "8.5.0",
         "debug": "^4.3.4",
         "fast-glob": "^3.3.2",
         "is-glob": "^4.0.3",
@@ -5372,68 +4665,7 @@
         "eslint": "^8.57.0 || ^9.0.0"
       }
     },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz",
-      "integrity": "sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.5.0",
-        "@typescript-eslint/visitor-keys": "8.5.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
-      "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz",
-      "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz",
-      "integrity": "sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==",
-      "dev": true,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "@typescript-eslint/types": "8.5.0",
-        "@typescript-eslint/visitor-keys": "8.5.0",
-        "debug": "^4.3.4",
-        "fast-glob": "^3.3.2",
-        "is-glob": "^4.0.3",
-        "minimatch": "^9.0.4",
-        "semver": "^7.6.0",
-        "ts-api-utils": "^1.3.0"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      },
-      "peerDependenciesMeta": {
-        "typescript": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
+    "node_modules/@typescript-eslint/visitor-keys": {
       "version": "8.5.0",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz",
       "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==",
@@ -5451,63 +4683,6 @@
         "url": "https://opencollective.com/typescript-eslint"
       }
     },
-    "node_modules/@typescript-eslint/utils/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/eslint-visitor-keys": {
-      "version": "3.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
-      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      }
-    },
-    "node_modules/@typescript-eslint/utils/node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
-    "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.4.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz",
-      "integrity": "sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@typescript-eslint/types": "8.4.0",
-        "eslint-visitor-keys": "^3.4.3"
-      },
-      "engines": {
-        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/typescript-eslint"
-      }
-    },
     "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
       "version": "3.4.3",
       "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
@@ -5529,23 +4704,23 @@
       "license": "ISC"
     },
     "node_modules/@unhead/dom": {
-      "version": "1.10.4",
-      "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.10.4.tgz",
-      "integrity": "sha512-ehMy9k6efo4GTLmiP27wCtywWYdiggrP3m7h6kD/d1uhfORH3yCgsd4yXQnmDoSbsMyX6GlY5DBzy5bnYPp/Xw==",
+      "version": "1.11.2",
+      "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.11.2.tgz",
+      "integrity": "sha512-e5Ilqa1ktwGJGhFt3jEI78LywNuvqOR4GdEa+sV2OuKbldWBoS8DosCf7jzwEIPYgn2ubDQ0ygn9JH+m/x88gA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@unhead/schema": "1.10.4",
-        "@unhead/shared": "1.10.4"
+        "@unhead/schema": "1.11.2",
+        "@unhead/shared": "1.11.2"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
       }
     },
     "node_modules/@unhead/schema": {
-      "version": "1.10.4",
-      "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.10.4.tgz",
-      "integrity": "sha512-nX9sJgKPy2t4GHB9ky/vkMLbYqXl9Num5NZToTr0rKrIGkshzHhUrbn/EiHreIjcGI1eIpu+edniCDIwGTJgmw==",
+      "version": "1.11.2",
+      "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.11.2.tgz",
+      "integrity": "sha512-ALyIIA0084JjGQJD6tJetQdqVNw/V6d2LaCC06jSm+JUqxsRWRZcSbNZUg5xr0T4xQPrefZYrGp76PbOdotPbQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -5557,43 +4732,44 @@
       }
     },
     "node_modules/@unhead/shared": {
-      "version": "1.10.4",
-      "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.10.4.tgz",
-      "integrity": "sha512-C5wsps9i/XCBObMVQUrbXPvZG17a/e5yL0IsxpICaT4QSiZAj9v7JrNQ5WpM5JOZVMKRI5MYRdafNDw3iSmqZg==",
+      "version": "1.11.2",
+      "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.11.2.tgz",
+      "integrity": "sha512-Zg56xBrqkr9f9m3/+G/2CzbLba6g3/M2myWmyuZtn/ncUk3K2IXvXvlZAzMHx4yO++Xeik2QUWpHEdXRh+PxAA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@unhead/schema": "1.10.4"
+        "@unhead/schema": "1.11.2"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
       }
     },
     "node_modules/@unhead/ssr": {
-      "version": "1.10.4",
-      "resolved": "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.10.4.tgz",
-      "integrity": "sha512-2nDG08q9bTvMB24YGNJCXimAs1vuG9yVa01i/Et1B2y4P8qhweXOxnialGmt5j8xeXwPFUBCe36tC5kLCSuJoQ==",
+      "version": "1.11.2",
+      "resolved": "https://registry.npmjs.org/@unhead/ssr/-/ssr-1.11.2.tgz",
+      "integrity": "sha512-Ilc+QmG4foMBr+f4u1GMSQjybSPjqi3vXfLTlqOVbr1voSlGtblYxJbZDw6KSCvfXu/s2YOPW+gCvvDLSZl3vg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@unhead/schema": "1.10.4",
-        "@unhead/shared": "1.10.4"
+        "@unhead/schema": "1.11.2",
+        "@unhead/shared": "1.11.2"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
       }
     },
     "node_modules/@unhead/vue": {
-      "version": "1.10.4",
-      "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.10.4.tgz",
-      "integrity": "sha512-Q45F/KOvDeitc8GkfkPY45V8Dmw1m1b9A/aHM5A2BwRV8GyoRV+HRWVw5h02e0AO1TsICvcW8tI90qeCM2oGSA==",
+      "version": "1.11.2",
+      "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.11.2.tgz",
+      "integrity": "sha512-m4GnwOd1ltXiSxp4ahIT6lziVyg6dgqKyLyWxrRWuPjZ8nXsPcpIOCjVwYB1MK0UBKMuIlgeuzVeDrTY9+APbA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@unhead/schema": "1.10.4",
-        "@unhead/shared": "1.10.4",
+        "@unhead/schema": "1.11.2",
+        "@unhead/shared": "1.11.2",
+        "defu": "^6.1.4",
         "hookable": "^5.5.3",
-        "unhead": "1.10.4"
+        "unhead": "1.11.2"
       },
       "funding": {
         "url": "https://github.com/sponsors/harlan-zw"
@@ -5846,16 +5022,16 @@
       }
     },
     "node_modules/@vue-macros/common": {
-      "version": "1.12.2",
-      "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.12.2.tgz",
-      "integrity": "sha512-+NGfhrPvPNOb3Wg9PNPEXPe0HTXmVe6XJawL1gi3cIjOSGIhpOdvmMT2cRuWb265IpA/PeL5Sqo0+DQnEDxLvw==",
+      "version": "1.12.3",
+      "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.12.3.tgz",
+      "integrity": "sha512-dlSqrGdIDhqMOz92XtlMNyuHHeHe594O6f10XLtmlB0Jrq/Pl4Hj8rXAnVlRdjg+ptbZRSNL6MSgOPPoC82owg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.0",
+        "@babel/types": "^7.25.6",
         "@rollup/pluginutils": "^5.1.0",
-        "@vue/compiler-sfc": "^3.4.34",
-        "ast-kit": "^1.0.1",
+        "@vue/compiler-sfc": "^3.5.3",
+        "ast-kit": "^1.1.0",
         "local-pkg": "^0.5.0",
         "magic-string-ast": "^0.6.2"
       },
@@ -5872,28 +5048,27 @@
       }
     },
     "node_modules/@vue/babel-helper-vue-transform-on": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.2.tgz",
-      "integrity": "sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.4.tgz",
+      "integrity": "sha512-3L9zXWRN2jvmLjtSyw9vtcO5KTSCfKhCD5rEZM+024bc+4dKSzTjIABl/5b+uZ5nXe5y31uUMxxLo1PdXkYaig==",
       "dev": true,
       "license": "MIT"
     },
     "node_modules/@vue/babel-plugin-jsx": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.2.tgz",
-      "integrity": "sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.4.tgz",
+      "integrity": "sha512-jwAVtHUaDfOGGT1EmVKBi0anXOtPvsuKbImcdnHXluaJQ6GEJzshf1JMTtMRx2fPiG7BZjNmyMv+NdZY2OyZEA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/helper-module-imports": "~7.22.15",
-        "@babel/helper-plugin-utils": "^7.22.5",
-        "@babel/plugin-syntax-jsx": "^7.23.3",
-        "@babel/template": "^7.23.9",
-        "@babel/traverse": "^7.23.9",
-        "@babel/types": "^7.23.9",
-        "@vue/babel-helper-vue-transform-on": "1.2.2",
-        "@vue/babel-plugin-resolve-type": "1.2.2",
-        "camelcase": "^6.3.0",
+        "@babel/helper-module-imports": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/plugin-syntax-jsx": "^7.24.7",
+        "@babel/template": "^7.25.0",
+        "@babel/traverse": "^7.25.6",
+        "@babel/types": "^7.25.6",
+        "@vue/babel-helper-vue-transform-on": "1.2.4",
+        "@vue/babel-plugin-resolve-type": "1.2.4",
         "html-tags": "^3.3.1",
         "svg-tags": "^1.0.0"
       },
@@ -5906,49 +5081,23 @@
         }
       }
     },
-    "node_modules/@vue/babel-plugin-jsx/node_modules/@babel/helper-module-imports": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
-      "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/types": "^7.22.15"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@vue/babel-plugin-resolve-type": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.2.tgz",
-      "integrity": "sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.4.tgz",
+      "integrity": "sha512-jWcJAmfKvc/xT2XBC4JAmy2eezNjU3CLfeDecl2Ge3tSjJCTmKJWkEhHdzXyx9Nr6PbIcQrFKhCaEDobhSrPqw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/code-frame": "^7.23.5",
-        "@babel/helper-module-imports": "~7.22.15",
-        "@babel/helper-plugin-utils": "^7.22.5",
-        "@babel/parser": "^7.23.9",
-        "@vue/compiler-sfc": "^3.4.15"
+        "@babel/code-frame": "^7.24.7",
+        "@babel/helper-module-imports": "^7.24.7",
+        "@babel/helper-plugin-utils": "^7.24.8",
+        "@babel/parser": "^7.25.6",
+        "@vue/compiler-sfc": "^3.5.3"
       },
       "peerDependencies": {
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@vue/babel-plugin-resolve-type/node_modules/@babel/helper-module-imports": {
-      "version": "7.22.15",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
-      "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@babel/types": "^7.22.15"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@vue/compiler-core": {
       "version": "3.5.3",
       "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.3.tgz",
@@ -6012,9 +5161,9 @@
       }
     },
     "node_modules/@vue/devtools-api": {
-      "version": "6.6.3",
-      "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.3.tgz",
-      "integrity": "sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==",
+      "version": "6.6.4",
+      "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz",
+      "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==",
       "license": "MIT"
     },
     "node_modules/@vue/devtools-core": {
@@ -6919,19 +6068,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/camelcase": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
-      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/camelcase-css": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
@@ -6956,9 +6092,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001655",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz",
-      "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==",
+      "version": "1.0.30001659",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001659.tgz",
+      "integrity": "sha512-Qxxyfv3RdHAfJcXelgf0hU4DFUVXBGTjqrBUZLUh8AtlGnsDo+CnncYtTd95+ZKfnANUOzxyIQCuU/UeBZBYoA==",
       "dev": true,
       "funding": [
         {
@@ -7102,9 +6238,9 @@
       }
     },
     "node_modules/cjs-module-lexer": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.0.tgz",
-      "integrity": "sha512-N1NGmowPlGBLsOZLPvm48StN04V4YvQRL0i6b7ctrVY3epjP/ct7hFLOItz6pDIvRjwpfPxi52a2UWV2ziir8g==",
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz",
+      "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==",
       "license": "MIT"
     },
     "node_modules/clean-regexp": {
@@ -7818,23 +6954,17 @@
       "license": "CC0-1.0"
     },
     "node_modules/cssstyle": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz",
-      "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz",
+      "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==",
       "license": "MIT",
       "dependencies": {
-        "rrweb-cssom": "^0.6.0"
+        "rrweb-cssom": "^0.7.1"
       },
       "engines": {
         "node": ">=18"
       }
     },
-    "node_modules/cssstyle/node_modules/rrweb-cssom": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz",
-      "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==",
-      "license": "MIT"
-    },
     "node_modules/csstype": {
       "version": "3.1.3",
       "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
@@ -7893,12 +7023,12 @@
       }
     },
     "node_modules/debug": {
-      "version": "4.3.6",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz",
-      "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==",
+      "version": "4.3.7",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+      "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
       "license": "MIT",
       "dependencies": {
-        "ms": "2.1.2"
+        "ms": "^2.1.3"
       },
       "engines": {
         "node": ">=6.0"
@@ -8297,9 +7427,9 @@
       "license": "MIT"
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.5.13",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz",
-      "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==",
+      "version": "1.5.18",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz",
+      "integrity": "sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==",
       "dev": true,
       "license": "ISC"
     },
@@ -8881,13 +8011,12 @@
       }
     },
     "node_modules/eslint-typegen": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/eslint-typegen/-/eslint-typegen-0.3.1.tgz",
-      "integrity": "sha512-D1hMMOuQw+WmN1uMk5lDfc9XCgOZMRlvOWwQfME6dyAgJqxGJ/STEyN7YBmt3zMqKkN7XJJ+4mjB82JcR4s/UA==",
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/eslint-typegen/-/eslint-typegen-0.3.2.tgz",
+      "integrity": "sha512-YD/flDDDYoBszomo6wVAJ01HcEWTLfOb04+Mwir8/oR66t2bnajw+qUI6JfBoBQO3HbebcCmEtgjKgWVB67ggQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@types/eslint": "^9.6.0",
         "json-schema-to-typescript-lite": "^14.1.0",
         "ohash": "^1.1.3"
       },
@@ -9536,9 +8665,9 @@
       "license": "ISC"
     },
     "node_modules/follow-redirects": {
-      "version": "1.15.8",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.8.tgz",
-      "integrity": "sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==",
+      "version": "1.15.9",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+      "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
       "funding": [
         {
           "type": "individual",
@@ -9864,9 +8993,9 @@
       }
     },
     "node_modules/git-url-parse": {
-      "version": "14.1.0",
-      "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.1.0.tgz",
-      "integrity": "sha512-8xg65dTxGHST3+zGpycMMFZcoTzAdZ2dOtu4vmgIfkTFnVHBxHMzBC2L1k8To7EmrSiHesT8JgPLT91VKw1B5g==",
+      "version": "15.0.0",
+      "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-15.0.0.tgz",
+      "integrity": "sha512-5reeBufLi+i4QD3ZFftcJs9jC26aULFLBU23FeKM/b1rI0K6ofIeAblmDVO7Ht22zTDE9+CkJ3ZVb0CgJmz3UQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -11353,9 +10482,9 @@
       "license": "MIT"
     },
     "node_modules/launch-editor": {
-      "version": "2.8.2",
-      "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.2.tgz",
-      "integrity": "sha512-eF5slEUZXmi6WvFzI3dYcv+hA24/iKnROf24HztcURJpSz9RBmBgz5cNCVOeguouf1llrwy6Yctl4C4HM+xI8g==",
+      "version": "2.9.1",
+      "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz",
+      "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -11893,9 +11022,9 @@
       }
     },
     "node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
       "license": "MIT"
     },
     "node_modules/mz": {
@@ -13634,6 +12763,13 @@
       "dev": true,
       "license": "BlueOak-1.0.0"
     },
+    "node_modules/package-manager-detector": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.0.tgz",
+      "integrity": "sha512-E385OSk9qDcXhcM9LNSe4sdhx8a9mAPrZ4sMLW+tmxl5ZuGtPUcdFu+MPP2jbgiWAZ6Pfe5soGFMd+0Db5Vrog==",
+      "dev": true,
+      "license": "MIT"
+    },
     "node_modules/parent-module": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -15943,13 +15079,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/send/node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-      "dev": true,
-      "license": "MIT"
-    },
     "node_modules/serialize-javascript": {
       "version": "6.0.2",
       "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
@@ -16167,9 +15296,9 @@
       }
     },
     "node_modules/source-map-js": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
-      "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
       "license": "BSD-3-Clause",
       "engines": {
         "node": ">=0.10.0"
@@ -16365,9 +15494,9 @@
       "license": "MIT"
     },
     "node_modules/string-width/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -16969,9 +16098,9 @@
       "license": "ISC"
     },
     "node_modules/terser": {
-      "version": "5.31.6",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz",
-      "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==",
+      "version": "5.32.0",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.32.0.tgz",
+      "integrity": "sha512-v3Gtw3IzpBJ0ugkxEX8U0W6+TnPKRRCWGh1jC/iM/e3Ki5+qvO1L1EAZ56bZasc64aXHwRHNIQEzm6//i5cemQ==",
       "dev": true,
       "license": "BSD-2-Clause",
       "dependencies": {
@@ -17157,9 +16286,9 @@
       }
     },
     "node_modules/tinyspy": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz",
-      "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz",
+      "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==",
       "dev": true,
       "license": "MIT",
       "engines": {
@@ -17336,9 +16465,9 @@
       "license": "MIT"
     },
     "node_modules/typescript": {
-      "version": "5.5.4",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
-      "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
+      "version": "5.6.2",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz",
+      "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==",
       "devOptional": true,
       "license": "Apache-2.0",
       "peer": true,
@@ -17465,15 +16594,15 @@
       }
     },
     "node_modules/unhead": {
-      "version": "1.10.4",
-      "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.10.4.tgz",
-      "integrity": "sha512-qKiYhgZ4IuDbylP409cdwK/8WEIi5cOSIBei/OXzxFs4uxiTZHSSa8NC1qPu2kooxHqxyoXGBw8ARms9zOsbxw==",
+      "version": "1.11.2",
+      "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.11.2.tgz",
+      "integrity": "sha512-k/MA5yzPh5M4pksDzOXf2GBJn0XV4quWao1q173NF7NL3Ji4RQ3ZxvZcwA/nGr7wu3+twJIRoKti3Otc4JMNyw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@unhead/dom": "1.10.4",
-        "@unhead/schema": "1.10.4",
-        "@unhead/shared": "1.10.4",
+        "@unhead/dom": "1.11.2",
+        "@unhead/schema": "1.11.2",
+        "@unhead/shared": "1.11.2",
         "hookable": "^5.5.3"
       },
       "funding": {
@@ -17538,9 +16667,9 @@
       }
     },
     "node_modules/unplugin": {
-      "version": "1.13.1",
-      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.13.1.tgz",
-      "integrity": "sha512-6Kq1iSSwg7KyjcThRUks9LuqDAKvtnioxbL9iEtB9ctTyBA5OmrB8gZd/d225VJu1w3UpUsKV7eGrvf59J7+VA==",
+      "version": "1.14.0",
+      "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.14.0.tgz",
+      "integrity": "sha512-cfkZeALGyW7tKYjZbi0G+pn0XnUFa0QvLIeLJEUUlnU0R8YYsBQnt5+h9Eu1B7AB7KETld+UBFI5lOeBL+msoQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -17560,13 +16689,13 @@
       }
     },
     "node_modules/unplugin-vue-router": {
-      "version": "0.10.7",
-      "resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.10.7.tgz",
-      "integrity": "sha512-5KEh7Swc1L2Xh5WOD7yQLeB5bO3iTw+Hst7qMxwmwYcPm9qVrtrRTZUftn2Hj4is17oMKgqacyWadjQzwW5B/Q==",
+      "version": "0.10.8",
+      "resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.10.8.tgz",
+      "integrity": "sha512-xi+eLweYAqolIoTRSmumbi6Yx0z5M0PLvl+NFNVWHJgmE2ByJG1SZbrn+TqyuDtIyln20KKgq8tqmL7aLoiFjw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@babel/types": "^7.25.2",
+        "@babel/types": "^7.25.4",
         "@rollup/pluginutils": "^5.1.0",
         "@vue-macros/common": "^1.12.2",
         "ast-walker-scope": "^0.6.2",
@@ -17578,7 +16707,7 @@
         "mlly": "^1.7.1",
         "pathe": "^1.1.2",
         "scule": "^1.3.0",
-        "unplugin": "^1.12.1",
+        "unplugin": "^1.12.2",
         "yaml": "^2.5.0"
       },
       "peerDependencies": {
@@ -17591,9 +16720,9 @@
       }
     },
     "node_modules/unstorage": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.11.1.tgz",
-      "integrity": "sha512-3NVszU4MGlO21WWnkSq0xnPVMHnMyB5DdJQyGRAg/DUZVeQjWRinLOia89iw5KGpllRtoA5+N+xnq75MAsPAOA==",
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.12.0.tgz",
+      "integrity": "sha512-ARZYTXiC+e8z3lRM7/qY9oyaOkaozCeNd2xoz7sYK9fv7OLGhVsf+BZbmASqiK/HTZ7T6eAlnVq9JynZppyk3w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -17609,16 +16738,16 @@
         "ufo": "^1.5.4"
       },
       "peerDependencies": {
-        "@azure/app-configuration": "^1.6.0",
-        "@azure/cosmos": "^4.0.0",
+        "@azure/app-configuration": "^1.7.0",
+        "@azure/cosmos": "^4.1.1",
         "@azure/data-tables": "^13.2.2",
-        "@azure/identity": "^4.2.0",
+        "@azure/identity": "^4.4.1",
         "@azure/keyvault-secrets": "^4.8.0",
-        "@azure/storage-blob": "^12.18.0",
-        "@capacitor/preferences": "^6.0.0",
+        "@azure/storage-blob": "^12.24.0",
+        "@capacitor/preferences": "^6.0.2",
         "@netlify/blobs": "^6.5.0 || ^7.0.0",
-        "@planetscale/database": "^1.18.0",
-        "@upstash/redis": "^1.31.3",
+        "@planetscale/database": "^1.19.0",
+        "@upstash/redis": "^1.34.0",
         "@vercel/kv": "^1.0.1",
         "idb-keyval": "^6.2.1",
         "ioredis": "^5.4.1"
@@ -18660,9 +17789,9 @@
       }
     },
     "node_modules/wrap-ansi/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff --git a/translation/package-lock.json b/translation/package-lock.json
index 11f4afd6c7..c0db611dcf 100644
--- a/translation/package-lock.json
+++ b/translation/package-lock.json
@@ -10,9 +10,9 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "22.5.3",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.3.tgz",
-      "integrity": "sha512-njripolh85IA9SQGTAqbmnNZTdxv7X/4OYGPz8tgy5JDr8MP+uDBa921GpYEoDDnwm0Hmn5ZPeJgiiSTPoOzkQ==",
+      "version": "22.5.4",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz",
+      "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==",
       "license": "MIT",
       "dependencies": {
         "undici-types": "~6.19.2"
@@ -86,9 +86,9 @@
       }
     },
     "node_modules/follow-redirects": {
-      "version": "1.15.8",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.8.tgz",
-      "integrity": "sha512-xgrmBhBToVKay1q2Tao5LI26B83UhrB/vM1avwVSDzt8rx3rO6AizBAaF46EgksTVr+rFTQaqZZ9MVBfUe4nig==",
+      "version": "1.15.9",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+      "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
       "funding": [
         {
           "type": "individual",
@@ -120,9 +120,9 @@
       }
     },
     "node_modules/loglevel": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.1.tgz",
-      "integrity": "sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==",
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz",
+      "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==",
       "license": "MIT",
       "engines": {
         "node": ">= 0.6.0"

From a14e7a30c5fa621c136438c4de34aea32eb987d2 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 10 Sep 2024 09:30:36 +0000
Subject: [PATCH 272/273] chore(deps): update vue-minor-print-pdf to v3.5.4

---
 pdf/package-lock.json   | 118 ++++++++++++++++++++--------------------
 pdf/package.json        |  12 ++--
 print/package-lock.json | 118 ++++++++++++++++++++--------------------
 print/package.json      |  12 ++--
 4 files changed, 130 insertions(+), 130 deletions(-)

diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index e6e40a961f..1169ffc7e1 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -6,7 +6,7 @@
     "": {
       "name": "@ecamp3/client-pdf",
       "dependencies": {
-        "@vue/runtime-core": "3.5.3",
+        "@vue/runtime-core": "3.5.4",
         "html-entities": "2.5.2",
         "html-parse-stringify": "3.0.1"
       },
@@ -20,12 +20,12 @@
         "@vitejs/plugin-vue": "5.1.3",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/babel-preset-app": "5.0.8",
-        "@vue/compiler-dom": "3.5.3",
-        "@vue/compiler-sfc": "3.5.3",
+        "@vue/compiler-dom": "3.5.4",
+        "@vue/compiler-sfc": "3.5.4",
         "@vue/eslint-config-prettier": "9.0.0",
-        "@vue/runtime-dom": "3.5.3",
-        "@vue/server-renderer": "3.5.3",
-        "@vue/shared": "3.5.3",
+        "@vue/runtime-dom": "3.5.4",
+        "@vue/server-renderer": "3.5.4",
+        "@vue/shared": "3.5.4",
         "@vue/test-utils": "2.4.6",
         "css": "3.0.0",
         "dayjs": "1.11.13",
@@ -3537,42 +3537,42 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.3.tgz",
-      "integrity": "sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.4.tgz",
+      "integrity": "sha512-oNwn+BAt3n9dK9uAYvI+XGlutwuTq/wfj4xCBaZCqwwVIGtD7D6ViihEbyYZrDHIHTDE3Q6oL3/hqmAyFEy9DQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.3",
+        "@vue/shared": "3.5.4",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.3.tgz",
-      "integrity": "sha512-wnzFArg9zpvk/811CDOZOadJRugf1Bgl/TQ3RfV4nKfSPok4hi0w10ziYUQR6LnnBAUlEXYLUfZ71Oj9ds/+QA==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.4.tgz",
+      "integrity": "sha512-yP9RRs4BDLOLfldn6ah+AGCNovGjMbL9uHvhDHf5wan4dAHLnFGOkqtfE7PPe4HTXIqE7l/NILdYw53bo1C8jw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.3",
-        "@vue/shared": "3.5.3"
+        "@vue/compiler-core": "3.5.4",
+        "@vue/shared": "3.5.4"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.3.tgz",
-      "integrity": "sha512-P3uATLny2tfyvMB04OQFe7Sczteno7SLFxwrOA/dw01pBWQHB5HL15a8PosoNX2aG/EAMGqnXTu+1LnmzFhpTQ==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.4.tgz",
+      "integrity": "sha512-P+yiPhL+NYH7m0ZgCq7AQR2q7OIE+mpAEgtkqEeH9oHSdIRvUO+4X6MPvblJIWcoe4YC5a2Gdf/RsoyP8FFiPQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.3",
-        "@vue/compiler-dom": "3.5.3",
-        "@vue/compiler-ssr": "3.5.3",
-        "@vue/shared": "3.5.3",
+        "@vue/compiler-core": "3.5.4",
+        "@vue/compiler-dom": "3.5.4",
+        "@vue/compiler-ssr": "3.5.4",
+        "@vue/shared": "3.5.4",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.44",
@@ -3580,14 +3580,14 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.3.tgz",
-      "integrity": "sha512-F/5f+r2WzL/2YAPl7UlKcJWHrvoZN8XwEBLnT7S4BXwncH25iDOabhO2M2DWioyTguJAGavDOawejkFXj8EM1w==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.4.tgz",
+      "integrity": "sha512-acESdTXsxPnYr2C4Blv0ggx5zIFMgOzZmYU2UgvIff9POdRGbRNBHRyzHAnizcItvpgerSKQbllUc9USp3V7eg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.3",
-        "@vue/shared": "3.5.3"
+        "@vue/compiler-dom": "3.5.4",
+        "@vue/shared": "3.5.4"
       }
     },
     "node_modules/@vue/eslint-config-prettier": {
@@ -3606,55 +3606,55 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.3.tgz",
-      "integrity": "sha512-2w61UnRWTP7+rj1H/j6FH706gRBHdFVpIqEkSDAyIpafBXYH8xt4gttstbbCWdU3OlcSWO8/3mbKl/93/HSMpw==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.4.tgz",
+      "integrity": "sha512-HKKbEuP7tYSGCq4e4nK6ZW6l5hyG66OUetefBp4budUyjvAYsnQDf+bgFzg2RAgnH0CInyqXwD9y47jwJEHrQw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.5.3"
+        "@vue/shared": "3.5.4"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.3.tgz",
-      "integrity": "sha512-5b2AQw5OZlmCzSsSBWYoZOsy75N4UdMWenTfDdI5bAzXnuVR7iR8Q4AOzQm2OGoA41xjk53VQKrqQhOz2ktWaw==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.4.tgz",
+      "integrity": "sha512-f3ek2sTA0AFu0n+w+kCtz567Euqqa3eHewvo4klwS7mWfSj/A+UmYTwsnUFo35KeyAFY60JgrCGvEBsu1n/3LA==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.3",
-        "@vue/shared": "3.5.3"
+        "@vue/reactivity": "3.5.4",
+        "@vue/shared": "3.5.4"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.3.tgz",
-      "integrity": "sha512-wPR1DEGc3XnQ7yHbmkTt3GoY0cEnVGQnARRdAkDzZ8MbUKEs26gogCQo6AOvvgahfjIcnvWJzkZArQ1fmWjcSg==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.4.tgz",
+      "integrity": "sha512-ofyc0w6rbD5KtjhP1i9hGOKdxGpvmuB1jprP7Djlj0X7R5J/oLwuNuE98GJ8WW31Hu2VxQHtk/LYTAlW8xrJdw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.3",
-        "@vue/runtime-core": "3.5.3",
-        "@vue/shared": "3.5.3",
+        "@vue/reactivity": "3.5.4",
+        "@vue/runtime-core": "3.5.4",
+        "@vue/shared": "3.5.4",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.3.tgz",
-      "integrity": "sha512-28volmaZVG2PGO3V3+gBPKoSHvLlE8FGfG/GKXKkjjfxLuj/50B/0OQGakM/g6ehQeqCrZYM4eHC4Ks48eig1Q==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.4.tgz",
+      "integrity": "sha512-FbjV6DJLgKRetMYFBA1UXCroCiED/Ckr53/ba9wivyd7D/Xw9fpo0T6zXzCnxQwyvkyrL7y6plgYhWhNjGxY5g==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.5.3",
-        "@vue/shared": "3.5.3"
+        "@vue/compiler-ssr": "3.5.4",
+        "@vue/shared": "3.5.4"
       },
       "peerDependencies": {
-        "vue": "3.5.3"
+        "vue": "3.5.4"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.3.tgz",
-      "integrity": "sha512-Jp2v8nylKBT+PlOUjun2Wp/f++TfJVFjshLzNtJDdmFJabJa7noGMncqXRM1vXGX+Yo2V7WykQFNxusSim8SCA==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.4.tgz",
+      "integrity": "sha512-L2MCDD8l7yC62Te5UUyPVpmexhL9ipVnYRw9CsWfm/BGRL5FwDX4a25bcJ/OJSD3+Hx+k/a8LDKcG2AFdJV3BA==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -7888,18 +7888,18 @@
       }
     },
     "node_modules/vue": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.3.tgz",
-      "integrity": "sha512-xvRbd0HpuLovYbOHXRHlSBsSvmUJbo0pzbkKTApWnQGf3/cu5Z39mQeA5cZdLRVIoNf3zI6MSoOgHUT5i2jO+Q==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.4.tgz",
+      "integrity": "sha512-3yAj2gkmiY+i7+22A1PWM+kjOVXjU74UPINcTiN7grIVPyFFI0lpGwHlV/4xydDmobaBn7/xmi+YG8HeSlCTcg==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
-        "@vue/compiler-dom": "3.5.3",
-        "@vue/compiler-sfc": "3.5.3",
-        "@vue/runtime-dom": "3.5.3",
-        "@vue/server-renderer": "3.5.3",
-        "@vue/shared": "3.5.3"
+        "@vue/compiler-dom": "3.5.4",
+        "@vue/compiler-sfc": "3.5.4",
+        "@vue/runtime-dom": "3.5.4",
+        "@vue/server-renderer": "3.5.4",
+        "@vue/shared": "3.5.4"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/pdf/package.json b/pdf/package.json
index 519aea4bc8..ed24b1e437 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -17,7 +17,7 @@
     "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json,mjs}"
   },
   "dependencies": {
-    "@vue/runtime-core": "3.5.3",
+    "@vue/runtime-core": "3.5.4",
     "html-entities": "2.5.2",
     "html-parse-stringify": "3.0.1"
   },
@@ -40,12 +40,12 @@
     "@vitejs/plugin-vue": "5.1.3",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/babel-preset-app": "5.0.8",
-    "@vue/compiler-dom": "3.5.3",
-    "@vue/compiler-sfc": "3.5.3",
+    "@vue/compiler-dom": "3.5.4",
+    "@vue/compiler-sfc": "3.5.4",
     "@vue/eslint-config-prettier": "9.0.0",
-    "@vue/runtime-dom": "3.5.3",
-    "@vue/server-renderer": "3.5.3",
-    "@vue/shared": "3.5.3",
+    "@vue/runtime-dom": "3.5.4",
+    "@vue/server-renderer": "3.5.4",
+    "@vue/shared": "3.5.4",
     "@vue/test-utils": "2.4.6",
     "css": "3.0.0",
     "dayjs": "1.11.13",
diff --git a/print/package-lock.json b/print/package-lock.json
index f70022d91b..2309f3320f 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -31,11 +31,11 @@
         "@tailwindcss/typography": "0.5.15",
         "@typescript-eslint/eslint-plugin": "8.5.0",
         "@vitest/coverage-v8": "2.0.5",
-        "@vue/compiler-dom": "3.5.3",
-        "@vue/compiler-sfc": "3.5.3",
-        "@vue/runtime-dom": "3.5.3",
-        "@vue/server-renderer": "3.5.3",
-        "@vue/shared": "3.5.3",
+        "@vue/compiler-dom": "3.5.4",
+        "@vue/compiler-sfc": "3.5.4",
+        "@vue/runtime-dom": "3.5.4",
+        "@vue/server-renderer": "3.5.4",
+        "@vue/shared": "3.5.4",
         "@vue/test-utils": "2.4.6",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
@@ -50,7 +50,7 @@
         "vite-plugin-eslint2": "4.4.0",
         "vite-svg-loader": "5.1.0",
         "vitest": "2.0.5",
-        "vue": "3.5.3"
+        "vue": "3.5.4"
       }
     },
     "node_modules/@alloc/quick-lru": {
@@ -5099,13 +5099,13 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.3.tgz",
-      "integrity": "sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.4.tgz",
+      "integrity": "sha512-oNwn+BAt3n9dK9uAYvI+XGlutwuTq/wfj4xCBaZCqwwVIGtD7D6ViihEbyYZrDHIHTDE3Q6oL3/hqmAyFEy9DQ==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.3",
+        "@vue/shared": "3.5.4",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
@@ -5118,26 +5118,26 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.3.tgz",
-      "integrity": "sha512-wnzFArg9zpvk/811CDOZOadJRugf1Bgl/TQ3RfV4nKfSPok4hi0w10ziYUQR6LnnBAUlEXYLUfZ71Oj9ds/+QA==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.4.tgz",
+      "integrity": "sha512-yP9RRs4BDLOLfldn6ah+AGCNovGjMbL9uHvhDHf5wan4dAHLnFGOkqtfE7PPe4HTXIqE7l/NILdYw53bo1C8jw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.3",
-        "@vue/shared": "3.5.3"
+        "@vue/compiler-core": "3.5.4",
+        "@vue/shared": "3.5.4"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.3.tgz",
-      "integrity": "sha512-P3uATLny2tfyvMB04OQFe7Sczteno7SLFxwrOA/dw01pBWQHB5HL15a8PosoNX2aG/EAMGqnXTu+1LnmzFhpTQ==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.4.tgz",
+      "integrity": "sha512-P+yiPhL+NYH7m0ZgCq7AQR2q7OIE+mpAEgtkqEeH9oHSdIRvUO+4X6MPvblJIWcoe4YC5a2Gdf/RsoyP8FFiPQ==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.3",
-        "@vue/compiler-dom": "3.5.3",
-        "@vue/compiler-ssr": "3.5.3",
-        "@vue/shared": "3.5.3",
+        "@vue/compiler-core": "3.5.4",
+        "@vue/compiler-dom": "3.5.4",
+        "@vue/compiler-ssr": "3.5.4",
+        "@vue/shared": "3.5.4",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.44",
@@ -5151,13 +5151,13 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.3.tgz",
-      "integrity": "sha512-F/5f+r2WzL/2YAPl7UlKcJWHrvoZN8XwEBLnT7S4BXwncH25iDOabhO2M2DWioyTguJAGavDOawejkFXj8EM1w==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.4.tgz",
+      "integrity": "sha512-acESdTXsxPnYr2C4Blv0ggx5zIFMgOzZmYU2UgvIff9POdRGbRNBHRyzHAnizcItvpgerSKQbllUc9USp3V7eg==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.3",
-        "@vue/shared": "3.5.3"
+        "@vue/compiler-dom": "3.5.4",
+        "@vue/shared": "3.5.4"
       }
     },
     "node_modules/@vue/devtools-api": {
@@ -5227,53 +5227,53 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.3.tgz",
-      "integrity": "sha512-2w61UnRWTP7+rj1H/j6FH706gRBHdFVpIqEkSDAyIpafBXYH8xt4gttstbbCWdU3OlcSWO8/3mbKl/93/HSMpw==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.4.tgz",
+      "integrity": "sha512-HKKbEuP7tYSGCq4e4nK6ZW6l5hyG66OUetefBp4budUyjvAYsnQDf+bgFzg2RAgnH0CInyqXwD9y47jwJEHrQw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.5.3"
+        "@vue/shared": "3.5.4"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.3.tgz",
-      "integrity": "sha512-5b2AQw5OZlmCzSsSBWYoZOsy75N4UdMWenTfDdI5bAzXnuVR7iR8Q4AOzQm2OGoA41xjk53VQKrqQhOz2ktWaw==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.4.tgz",
+      "integrity": "sha512-f3ek2sTA0AFu0n+w+kCtz567Euqqa3eHewvo4klwS7mWfSj/A+UmYTwsnUFo35KeyAFY60JgrCGvEBsu1n/3LA==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.3",
-        "@vue/shared": "3.5.3"
+        "@vue/reactivity": "3.5.4",
+        "@vue/shared": "3.5.4"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.3.tgz",
-      "integrity": "sha512-wPR1DEGc3XnQ7yHbmkTt3GoY0cEnVGQnARRdAkDzZ8MbUKEs26gogCQo6AOvvgahfjIcnvWJzkZArQ1fmWjcSg==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.4.tgz",
+      "integrity": "sha512-ofyc0w6rbD5KtjhP1i9hGOKdxGpvmuB1jprP7Djlj0X7R5J/oLwuNuE98GJ8WW31Hu2VxQHtk/LYTAlW8xrJdw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.3",
-        "@vue/runtime-core": "3.5.3",
-        "@vue/shared": "3.5.3",
+        "@vue/reactivity": "3.5.4",
+        "@vue/runtime-core": "3.5.4",
+        "@vue/shared": "3.5.4",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.3.tgz",
-      "integrity": "sha512-28volmaZVG2PGO3V3+gBPKoSHvLlE8FGfG/GKXKkjjfxLuj/50B/0OQGakM/g6ehQeqCrZYM4eHC4Ks48eig1Q==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.4.tgz",
+      "integrity": "sha512-FbjV6DJLgKRetMYFBA1UXCroCiED/Ckr53/ba9wivyd7D/Xw9fpo0T6zXzCnxQwyvkyrL7y6plgYhWhNjGxY5g==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.5.3",
-        "@vue/shared": "3.5.3"
+        "@vue/compiler-ssr": "3.5.4",
+        "@vue/shared": "3.5.4"
       },
       "peerDependencies": {
-        "vue": "3.5.3"
+        "vue": "3.5.4"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.3.tgz",
-      "integrity": "sha512-Jp2v8nylKBT+PlOUjun2Wp/f++TfJVFjshLzNtJDdmFJabJa7noGMncqXRM1vXGX+Yo2V7WykQFNxusSim8SCA==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.4.tgz",
+      "integrity": "sha512-L2MCDD8l7yC62Te5UUyPVpmexhL9ipVnYRw9CsWfm/BGRL5FwDX4a25bcJ/OJSD3+Hx+k/a8LDKcG2AFdJV3BA==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -17434,16 +17434,16 @@
       "license": "MIT"
     },
     "node_modules/vue": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.3.tgz",
-      "integrity": "sha512-xvRbd0HpuLovYbOHXRHlSBsSvmUJbo0pzbkKTApWnQGf3/cu5Z39mQeA5cZdLRVIoNf3zI6MSoOgHUT5i2jO+Q==",
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.4.tgz",
+      "integrity": "sha512-3yAj2gkmiY+i7+22A1PWM+kjOVXjU74UPINcTiN7grIVPyFFI0lpGwHlV/4xydDmobaBn7/xmi+YG8HeSlCTcg==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.3",
-        "@vue/compiler-sfc": "3.5.3",
-        "@vue/runtime-dom": "3.5.3",
-        "@vue/server-renderer": "3.5.3",
-        "@vue/shared": "3.5.3"
+        "@vue/compiler-dom": "3.5.4",
+        "@vue/compiler-sfc": "3.5.4",
+        "@vue/runtime-dom": "3.5.4",
+        "@vue/server-renderer": "3.5.4",
+        "@vue/shared": "3.5.4"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/print/package.json b/print/package.json
index 8f4bd37fce..96c470a939 100644
--- a/print/package.json
+++ b/print/package.json
@@ -40,11 +40,11 @@
     "@tailwindcss/typography": "0.5.15",
     "@typescript-eslint/eslint-plugin": "8.5.0",
     "@vitest/coverage-v8": "2.0.5",
-    "@vue/compiler-dom": "3.5.3",
-    "@vue/compiler-sfc": "3.5.3",
-    "@vue/runtime-dom": "3.5.3",
-    "@vue/server-renderer": "3.5.3",
-    "@vue/shared": "3.5.3",
+    "@vue/compiler-dom": "3.5.4",
+    "@vue/compiler-sfc": "3.5.4",
+    "@vue/runtime-dom": "3.5.4",
+    "@vue/server-renderer": "3.5.4",
+    "@vue/shared": "3.5.4",
     "@vue/test-utils": "2.4.6",
     "eslint": "8.57.0",
     "eslint-config-prettier": "9.1.0",
@@ -59,6 +59,6 @@
     "vite-plugin-eslint2": "4.4.0",
     "vite-svg-loader": "5.1.0",
     "vitest": "2.0.5",
-    "vue": "3.5.3"
+    "vue": "3.5.4"
   }
 }

From eee4b6ce661a3154f39d2bc65df34f04bed5f1dc Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 10 Sep 2024 12:09:39 +0000
Subject: [PATCH 273/273] fix(deps): update dependency webonyx/graphql-php to
 v15.14.0

---
 api/composer.json       |   2 +-
 api/composer.lock       |  20 +++----
 pdf/package-lock.json   | 118 ++++++++++++++++++++--------------------
 pdf/package.json        |  12 ++--
 print/package-lock.json | 118 ++++++++++++++++++++--------------------
 print/package.json      |  12 ++--
 6 files changed, 141 insertions(+), 141 deletions(-)

diff --git a/api/composer.json b/api/composer.json
index 142bca9838..25397ebe78 100644
--- a/api/composer.json
+++ b/api/composer.json
@@ -48,7 +48,7 @@
         "symfony/yaml": "7.1.4",
         "twig/cssinliner-extra": "^3.4",
         "twig/extra-bundle": "^3.4",
-        "webonyx/graphql-php": "15.13.0"
+        "webonyx/graphql-php": "15.14.0"
     },
     "require-dev": {
         "brianium/paratest": "^7.4",
diff --git a/api/composer.lock b/api/composer.lock
index bd23767d39..b5d6d0fe77 100644
--- a/api/composer.lock
+++ b/api/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": "268893dd32f4f3cdade81373480c5396",
+    "content-hash": "0f236b943e855bf0fbd5cdd62bbdc7f0",
     "packages": [
         {
             "name": "api-platform/core",
@@ -10011,16 +10011,16 @@
         },
         {
             "name": "webonyx/graphql-php",
-            "version": "v15.13.0",
+            "version": "v15.14.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/webonyx/graphql-php.git",
-                "reference": "b3b8c5bba097b0db95098fadb63e8980e184a03b"
+                "reference": "87f956498895757f0808f22c193577ed090f7f3b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/b3b8c5bba097b0db95098fadb63e8980e184a03b",
-                "reference": "b3b8c5bba097b0db95098fadb63e8980e184a03b",
+                "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/87f956498895757f0808f22c193577ed090f7f3b",
+                "reference": "87f956498895757f0808f22c193577ed090f7f3b",
                 "shasum": ""
             },
             "require": {
@@ -10033,12 +10033,12 @@
                 "amphp/http-server": "^2.1",
                 "dms/phpunit-arraysubset-asserts": "dev-master",
                 "ergebnis/composer-normalize": "^2.28",
-                "friendsofphp/php-cs-fixer": "3.63.2",
-                "mll-lab/php-cs-fixer-config": "^5",
+                "friendsofphp/php-cs-fixer": "3.64.0",
+                "mll-lab/php-cs-fixer-config": "^5.9.2",
                 "nyholm/psr7": "^1.5",
                 "phpbench/phpbench": "^1.2",
                 "phpstan/extension-installer": "^1.1",
-                "phpstan/phpstan": "1.12.0",
+                "phpstan/phpstan": "1.12.3",
                 "phpstan/phpstan-phpunit": "1.4.0",
                 "phpstan/phpstan-strict-rules": "1.6.0",
                 "phpunit/phpunit": "^9.5 || ^10.5.21",
@@ -10073,7 +10073,7 @@
             ],
             "support": {
                 "issues": "https://github.com/webonyx/graphql-php/issues",
-                "source": "https://github.com/webonyx/graphql-php/tree/v15.13.0"
+                "source": "https://github.com/webonyx/graphql-php/tree/v15.14.0"
             },
             "funding": [
                 {
@@ -10081,7 +10081,7 @@
                     "type": "open_collective"
                 }
             ],
-            "time": "2024-08-29T10:55:21+00:00"
+            "time": "2024-09-10T10:36:37+00:00"
         },
         {
             "name": "willdurand/negotiation",
diff --git a/pdf/package-lock.json b/pdf/package-lock.json
index 1169ffc7e1..e6e40a961f 100644
--- a/pdf/package-lock.json
+++ b/pdf/package-lock.json
@@ -6,7 +6,7 @@
     "": {
       "name": "@ecamp3/client-pdf",
       "dependencies": {
-        "@vue/runtime-core": "3.5.4",
+        "@vue/runtime-core": "3.5.3",
         "html-entities": "2.5.2",
         "html-parse-stringify": "3.0.1"
       },
@@ -20,12 +20,12 @@
         "@vitejs/plugin-vue": "5.1.3",
         "@vitest/coverage-v8": "2.0.5",
         "@vue/babel-preset-app": "5.0.8",
-        "@vue/compiler-dom": "3.5.4",
-        "@vue/compiler-sfc": "3.5.4",
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/compiler-sfc": "3.5.3",
         "@vue/eslint-config-prettier": "9.0.0",
-        "@vue/runtime-dom": "3.5.4",
-        "@vue/server-renderer": "3.5.4",
-        "@vue/shared": "3.5.4",
+        "@vue/runtime-dom": "3.5.3",
+        "@vue/server-renderer": "3.5.3",
+        "@vue/shared": "3.5.3",
         "@vue/test-utils": "2.4.6",
         "css": "3.0.0",
         "dayjs": "1.11.13",
@@ -3537,42 +3537,42 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.4.tgz",
-      "integrity": "sha512-oNwn+BAt3n9dK9uAYvI+XGlutwuTq/wfj4xCBaZCqwwVIGtD7D6ViihEbyYZrDHIHTDE3Q6oL3/hqmAyFEy9DQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.3.tgz",
+      "integrity": "sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.4",
+        "@vue/shared": "3.5.3",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
       }
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.4.tgz",
-      "integrity": "sha512-yP9RRs4BDLOLfldn6ah+AGCNovGjMbL9uHvhDHf5wan4dAHLnFGOkqtfE7PPe4HTXIqE7l/NILdYw53bo1C8jw==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.3.tgz",
+      "integrity": "sha512-wnzFArg9zpvk/811CDOZOadJRugf1Bgl/TQ3RfV4nKfSPok4hi0w10ziYUQR6LnnBAUlEXYLUfZ71Oj9ds/+QA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.4",
-        "@vue/shared": "3.5.4"
+        "@vue/compiler-core": "3.5.3",
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.4.tgz",
-      "integrity": "sha512-P+yiPhL+NYH7m0ZgCq7AQR2q7OIE+mpAEgtkqEeH9oHSdIRvUO+4X6MPvblJIWcoe4YC5a2Gdf/RsoyP8FFiPQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.3.tgz",
+      "integrity": "sha512-P3uATLny2tfyvMB04OQFe7Sczteno7SLFxwrOA/dw01pBWQHB5HL15a8PosoNX2aG/EAMGqnXTu+1LnmzFhpTQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.4",
-        "@vue/compiler-dom": "3.5.4",
-        "@vue/compiler-ssr": "3.5.4",
-        "@vue/shared": "3.5.4",
+        "@vue/compiler-core": "3.5.3",
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/compiler-ssr": "3.5.3",
+        "@vue/shared": "3.5.3",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.44",
@@ -3580,14 +3580,14 @@
       }
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.4.tgz",
-      "integrity": "sha512-acESdTXsxPnYr2C4Blv0ggx5zIFMgOzZmYU2UgvIff9POdRGbRNBHRyzHAnizcItvpgerSKQbllUc9USp3V7eg==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.3.tgz",
+      "integrity": "sha512-F/5f+r2WzL/2YAPl7UlKcJWHrvoZN8XwEBLnT7S4BXwncH25iDOabhO2M2DWioyTguJAGavDOawejkFXj8EM1w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.4",
-        "@vue/shared": "3.5.4"
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/eslint-config-prettier": {
@@ -3606,55 +3606,55 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.4.tgz",
-      "integrity": "sha512-HKKbEuP7tYSGCq4e4nK6ZW6l5hyG66OUetefBp4budUyjvAYsnQDf+bgFzg2RAgnH0CInyqXwD9y47jwJEHrQw==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.3.tgz",
+      "integrity": "sha512-2w61UnRWTP7+rj1H/j6FH706gRBHdFVpIqEkSDAyIpafBXYH8xt4gttstbbCWdU3OlcSWO8/3mbKl/93/HSMpw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.5.4"
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.4.tgz",
-      "integrity": "sha512-f3ek2sTA0AFu0n+w+kCtz567Euqqa3eHewvo4klwS7mWfSj/A+UmYTwsnUFo35KeyAFY60JgrCGvEBsu1n/3LA==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.3.tgz",
+      "integrity": "sha512-5b2AQw5OZlmCzSsSBWYoZOsy75N4UdMWenTfDdI5bAzXnuVR7iR8Q4AOzQm2OGoA41xjk53VQKrqQhOz2ktWaw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.4",
-        "@vue/shared": "3.5.4"
+        "@vue/reactivity": "3.5.3",
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.4.tgz",
-      "integrity": "sha512-ofyc0w6rbD5KtjhP1i9hGOKdxGpvmuB1jprP7Djlj0X7R5J/oLwuNuE98GJ8WW31Hu2VxQHtk/LYTAlW8xrJdw==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.3.tgz",
+      "integrity": "sha512-wPR1DEGc3XnQ7yHbmkTt3GoY0cEnVGQnARRdAkDzZ8MbUKEs26gogCQo6AOvvgahfjIcnvWJzkZArQ1fmWjcSg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.4",
-        "@vue/runtime-core": "3.5.4",
-        "@vue/shared": "3.5.4",
+        "@vue/reactivity": "3.5.3",
+        "@vue/runtime-core": "3.5.3",
+        "@vue/shared": "3.5.3",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.4.tgz",
-      "integrity": "sha512-FbjV6DJLgKRetMYFBA1UXCroCiED/Ckr53/ba9wivyd7D/Xw9fpo0T6zXzCnxQwyvkyrL7y6plgYhWhNjGxY5g==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.3.tgz",
+      "integrity": "sha512-28volmaZVG2PGO3V3+gBPKoSHvLlE8FGfG/GKXKkjjfxLuj/50B/0OQGakM/g6ehQeqCrZYM4eHC4Ks48eig1Q==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.5.4",
-        "@vue/shared": "3.5.4"
+        "@vue/compiler-ssr": "3.5.3",
+        "@vue/shared": "3.5.3"
       },
       "peerDependencies": {
-        "vue": "3.5.4"
+        "vue": "3.5.3"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.4.tgz",
-      "integrity": "sha512-L2MCDD8l7yC62Te5UUyPVpmexhL9ipVnYRw9CsWfm/BGRL5FwDX4a25bcJ/OJSD3+Hx+k/a8LDKcG2AFdJV3BA==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.3.tgz",
+      "integrity": "sha512-Jp2v8nylKBT+PlOUjun2Wp/f++TfJVFjshLzNtJDdmFJabJa7noGMncqXRM1vXGX+Yo2V7WykQFNxusSim8SCA==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -7888,18 +7888,18 @@
       }
     },
     "node_modules/vue": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.4.tgz",
-      "integrity": "sha512-3yAj2gkmiY+i7+22A1PWM+kjOVXjU74UPINcTiN7grIVPyFFI0lpGwHlV/4xydDmobaBn7/xmi+YG8HeSlCTcg==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.3.tgz",
+      "integrity": "sha512-xvRbd0HpuLovYbOHXRHlSBsSvmUJbo0pzbkKTApWnQGf3/cu5Z39mQeA5cZdLRVIoNf3zI6MSoOgHUT5i2jO+Q==",
       "dev": true,
       "license": "MIT",
       "peer": true,
       "dependencies": {
-        "@vue/compiler-dom": "3.5.4",
-        "@vue/compiler-sfc": "3.5.4",
-        "@vue/runtime-dom": "3.5.4",
-        "@vue/server-renderer": "3.5.4",
-        "@vue/shared": "3.5.4"
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/compiler-sfc": "3.5.3",
+        "@vue/runtime-dom": "3.5.3",
+        "@vue/server-renderer": "3.5.3",
+        "@vue/shared": "3.5.3"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/pdf/package.json b/pdf/package.json
index ed24b1e437..519aea4bc8 100644
--- a/pdf/package.json
+++ b/pdf/package.json
@@ -17,7 +17,7 @@
     "lint:check:prettier": "prettier --check --ignore-path .prettierignore **/*.{css,scss,json,mjs}"
   },
   "dependencies": {
-    "@vue/runtime-core": "3.5.4",
+    "@vue/runtime-core": "3.5.3",
     "html-entities": "2.5.2",
     "html-parse-stringify": "3.0.1"
   },
@@ -40,12 +40,12 @@
     "@vitejs/plugin-vue": "5.1.3",
     "@vitest/coverage-v8": "2.0.5",
     "@vue/babel-preset-app": "5.0.8",
-    "@vue/compiler-dom": "3.5.4",
-    "@vue/compiler-sfc": "3.5.4",
+    "@vue/compiler-dom": "3.5.3",
+    "@vue/compiler-sfc": "3.5.3",
     "@vue/eslint-config-prettier": "9.0.0",
-    "@vue/runtime-dom": "3.5.4",
-    "@vue/server-renderer": "3.5.4",
-    "@vue/shared": "3.5.4",
+    "@vue/runtime-dom": "3.5.3",
+    "@vue/server-renderer": "3.5.3",
+    "@vue/shared": "3.5.3",
     "@vue/test-utils": "2.4.6",
     "css": "3.0.0",
     "dayjs": "1.11.13",
diff --git a/print/package-lock.json b/print/package-lock.json
index 2309f3320f..f70022d91b 100644
--- a/print/package-lock.json
+++ b/print/package-lock.json
@@ -31,11 +31,11 @@
         "@tailwindcss/typography": "0.5.15",
         "@typescript-eslint/eslint-plugin": "8.5.0",
         "@vitest/coverage-v8": "2.0.5",
-        "@vue/compiler-dom": "3.5.4",
-        "@vue/compiler-sfc": "3.5.4",
-        "@vue/runtime-dom": "3.5.4",
-        "@vue/server-renderer": "3.5.4",
-        "@vue/shared": "3.5.4",
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/compiler-sfc": "3.5.3",
+        "@vue/runtime-dom": "3.5.3",
+        "@vue/server-renderer": "3.5.3",
+        "@vue/shared": "3.5.3",
         "@vue/test-utils": "2.4.6",
         "eslint": "8.57.0",
         "eslint-config-prettier": "9.1.0",
@@ -50,7 +50,7 @@
         "vite-plugin-eslint2": "4.4.0",
         "vite-svg-loader": "5.1.0",
         "vitest": "2.0.5",
-        "vue": "3.5.4"
+        "vue": "3.5.3"
       }
     },
     "node_modules/@alloc/quick-lru": {
@@ -5099,13 +5099,13 @@
       }
     },
     "node_modules/@vue/compiler-core": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.4.tgz",
-      "integrity": "sha512-oNwn+BAt3n9dK9uAYvI+XGlutwuTq/wfj4xCBaZCqwwVIGtD7D6ViihEbyYZrDHIHTDE3Q6oL3/hqmAyFEy9DQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.3.tgz",
+      "integrity": "sha512-adAfy9boPkP233NTyvLbGEqVuIfK/R0ZsBsIOW4BZNfb4BRpRW41Do1u+ozJpsb+mdoy80O20IzAsHaihRb5qA==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/shared": "3.5.4",
+        "@vue/shared": "3.5.3",
         "entities": "^4.5.0",
         "estree-walker": "^2.0.2",
         "source-map-js": "^1.2.0"
@@ -5118,26 +5118,26 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-dom": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.4.tgz",
-      "integrity": "sha512-yP9RRs4BDLOLfldn6ah+AGCNovGjMbL9uHvhDHf5wan4dAHLnFGOkqtfE7PPe4HTXIqE7l/NILdYw53bo1C8jw==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.3.tgz",
+      "integrity": "sha512-wnzFArg9zpvk/811CDOZOadJRugf1Bgl/TQ3RfV4nKfSPok4hi0w10ziYUQR6LnnBAUlEXYLUfZ71Oj9ds/+QA==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-core": "3.5.4",
-        "@vue/shared": "3.5.4"
+        "@vue/compiler-core": "3.5.3",
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/compiler-sfc": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.4.tgz",
-      "integrity": "sha512-P+yiPhL+NYH7m0ZgCq7AQR2q7OIE+mpAEgtkqEeH9oHSdIRvUO+4X6MPvblJIWcoe4YC5a2Gdf/RsoyP8FFiPQ==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.3.tgz",
+      "integrity": "sha512-P3uATLny2tfyvMB04OQFe7Sczteno7SLFxwrOA/dw01pBWQHB5HL15a8PosoNX2aG/EAMGqnXTu+1LnmzFhpTQ==",
       "license": "MIT",
       "dependencies": {
         "@babel/parser": "^7.25.3",
-        "@vue/compiler-core": "3.5.4",
-        "@vue/compiler-dom": "3.5.4",
-        "@vue/compiler-ssr": "3.5.4",
-        "@vue/shared": "3.5.4",
+        "@vue/compiler-core": "3.5.3",
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/compiler-ssr": "3.5.3",
+        "@vue/shared": "3.5.3",
         "estree-walker": "^2.0.2",
         "magic-string": "^0.30.11",
         "postcss": "^8.4.44",
@@ -5151,13 +5151,13 @@
       "license": "MIT"
     },
     "node_modules/@vue/compiler-ssr": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.4.tgz",
-      "integrity": "sha512-acESdTXsxPnYr2C4Blv0ggx5zIFMgOzZmYU2UgvIff9POdRGbRNBHRyzHAnizcItvpgerSKQbllUc9USp3V7eg==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.3.tgz",
+      "integrity": "sha512-F/5f+r2WzL/2YAPl7UlKcJWHrvoZN8XwEBLnT7S4BXwncH25iDOabhO2M2DWioyTguJAGavDOawejkFXj8EM1w==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.4",
-        "@vue/shared": "3.5.4"
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/devtools-api": {
@@ -5227,53 +5227,53 @@
       }
     },
     "node_modules/@vue/reactivity": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.4.tgz",
-      "integrity": "sha512-HKKbEuP7tYSGCq4e4nK6ZW6l5hyG66OUetefBp4budUyjvAYsnQDf+bgFzg2RAgnH0CInyqXwD9y47jwJEHrQw==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.3.tgz",
+      "integrity": "sha512-2w61UnRWTP7+rj1H/j6FH706gRBHdFVpIqEkSDAyIpafBXYH8xt4gttstbbCWdU3OlcSWO8/3mbKl/93/HSMpw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/shared": "3.5.4"
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/runtime-core": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.4.tgz",
-      "integrity": "sha512-f3ek2sTA0AFu0n+w+kCtz567Euqqa3eHewvo4klwS7mWfSj/A+UmYTwsnUFo35KeyAFY60JgrCGvEBsu1n/3LA==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.3.tgz",
+      "integrity": "sha512-5b2AQw5OZlmCzSsSBWYoZOsy75N4UdMWenTfDdI5bAzXnuVR7iR8Q4AOzQm2OGoA41xjk53VQKrqQhOz2ktWaw==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.4",
-        "@vue/shared": "3.5.4"
+        "@vue/reactivity": "3.5.3",
+        "@vue/shared": "3.5.3"
       }
     },
     "node_modules/@vue/runtime-dom": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.4.tgz",
-      "integrity": "sha512-ofyc0w6rbD5KtjhP1i9hGOKdxGpvmuB1jprP7Djlj0X7R5J/oLwuNuE98GJ8WW31Hu2VxQHtk/LYTAlW8xrJdw==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.3.tgz",
+      "integrity": "sha512-wPR1DEGc3XnQ7yHbmkTt3GoY0cEnVGQnARRdAkDzZ8MbUKEs26gogCQo6AOvvgahfjIcnvWJzkZArQ1fmWjcSg==",
       "license": "MIT",
       "dependencies": {
-        "@vue/reactivity": "3.5.4",
-        "@vue/runtime-core": "3.5.4",
-        "@vue/shared": "3.5.4",
+        "@vue/reactivity": "3.5.3",
+        "@vue/runtime-core": "3.5.3",
+        "@vue/shared": "3.5.3",
         "csstype": "^3.1.3"
       }
     },
     "node_modules/@vue/server-renderer": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.4.tgz",
-      "integrity": "sha512-FbjV6DJLgKRetMYFBA1UXCroCiED/Ckr53/ba9wivyd7D/Xw9fpo0T6zXzCnxQwyvkyrL7y6plgYhWhNjGxY5g==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.3.tgz",
+      "integrity": "sha512-28volmaZVG2PGO3V3+gBPKoSHvLlE8FGfG/GKXKkjjfxLuj/50B/0OQGakM/g6ehQeqCrZYM4eHC4Ks48eig1Q==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-ssr": "3.5.4",
-        "@vue/shared": "3.5.4"
+        "@vue/compiler-ssr": "3.5.3",
+        "@vue/shared": "3.5.3"
       },
       "peerDependencies": {
-        "vue": "3.5.4"
+        "vue": "3.5.3"
       }
     },
     "node_modules/@vue/shared": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.4.tgz",
-      "integrity": "sha512-L2MCDD8l7yC62Te5UUyPVpmexhL9ipVnYRw9CsWfm/BGRL5FwDX4a25bcJ/OJSD3+Hx+k/a8LDKcG2AFdJV3BA==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.3.tgz",
+      "integrity": "sha512-Jp2v8nylKBT+PlOUjun2Wp/f++TfJVFjshLzNtJDdmFJabJa7noGMncqXRM1vXGX+Yo2V7WykQFNxusSim8SCA==",
       "license": "MIT"
     },
     "node_modules/@vue/test-utils": {
@@ -17434,16 +17434,16 @@
       "license": "MIT"
     },
     "node_modules/vue": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.4.tgz",
-      "integrity": "sha512-3yAj2gkmiY+i7+22A1PWM+kjOVXjU74UPINcTiN7grIVPyFFI0lpGwHlV/4xydDmobaBn7/xmi+YG8HeSlCTcg==",
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.3.tgz",
+      "integrity": "sha512-xvRbd0HpuLovYbOHXRHlSBsSvmUJbo0pzbkKTApWnQGf3/cu5Z39mQeA5cZdLRVIoNf3zI6MSoOgHUT5i2jO+Q==",
       "license": "MIT",
       "dependencies": {
-        "@vue/compiler-dom": "3.5.4",
-        "@vue/compiler-sfc": "3.5.4",
-        "@vue/runtime-dom": "3.5.4",
-        "@vue/server-renderer": "3.5.4",
-        "@vue/shared": "3.5.4"
+        "@vue/compiler-dom": "3.5.3",
+        "@vue/compiler-sfc": "3.5.3",
+        "@vue/runtime-dom": "3.5.3",
+        "@vue/server-renderer": "3.5.3",
+        "@vue/shared": "3.5.3"
       },
       "peerDependencies": {
         "typescript": "*"
diff --git a/print/package.json b/print/package.json
index 96c470a939..8f4bd37fce 100644
--- a/print/package.json
+++ b/print/package.json
@@ -40,11 +40,11 @@
     "@tailwindcss/typography": "0.5.15",
     "@typescript-eslint/eslint-plugin": "8.5.0",
     "@vitest/coverage-v8": "2.0.5",
-    "@vue/compiler-dom": "3.5.4",
-    "@vue/compiler-sfc": "3.5.4",
-    "@vue/runtime-dom": "3.5.4",
-    "@vue/server-renderer": "3.5.4",
-    "@vue/shared": "3.5.4",
+    "@vue/compiler-dom": "3.5.3",
+    "@vue/compiler-sfc": "3.5.3",
+    "@vue/runtime-dom": "3.5.3",
+    "@vue/server-renderer": "3.5.3",
+    "@vue/shared": "3.5.3",
     "@vue/test-utils": "2.4.6",
     "eslint": "8.57.0",
     "eslint-config-prettier": "9.1.0",
@@ -59,6 +59,6 @@
     "vite-plugin-eslint2": "4.4.0",
     "vite-svg-loader": "5.1.0",
     "vitest": "2.0.5",
-    "vue": "3.5.4"
+    "vue": "3.5.3"
   }
 }