From b3a7195cfe25c4dc981d766bda2a05754c9dcef2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Mar 2025 20:23:13 +0000 Subject: [PATCH 01/26] build(deps): bump typescript-eslint from 8.18.2 to 8.27.0 Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.18.2 to 8.27.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.27.0/packages/typescript-eslint) --- updated-dependencies: - dependency-name: typescript-eslint dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pnpm-workspace.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3b30ff8d..28183729 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,7 +6,7 @@ catalog: typescript: ^5.7.2 '@types/node': ^22.10.2 eslint: ^9.17.0 - typescript-eslint: ^8.18.2 + typescript-eslint: ^8.27.0 '@eslint/js': ^9.17.0 vue-tsc: ^2.2.0 # trpc From c4baa45ef6295ba60b782ce8fbc171007a1edf90 Mon Sep 17 00:00:00 2001 From: Axel Rindle Date: Sun, 23 Mar 2025 11:43:24 +0100 Subject: [PATCH 02/26] programm wip --- .../20250323092444_programm/migration.sql | 16 ++++++ apps/api/prisma/schema/ProgrammPunkt.prisma | 12 +++++ apps/api/prisma/schema/Veranstaltung.prisma | 1 + apps/api/src/services/index.ts | 2 + .../services/program/program.autocomplete.ts | 47 ++++++++++++++++++ apps/api/src/services/program/program.list.ts | 32 ++++++++++++ .../src/services/program/program.router.ts | 13 +++++ apps/api/src/types/defineProcedure.ts | 32 +++++------- .../components/UnterveranstaltungenTable.vue | 2 +- .../views/Verwaltung/Program/ProgramList.vue | 49 +++++++++++++++++++ .../Veranstaltungen/VeranstaltungDetail.vue | 18 +++++-- packages/helpers/src/group-by.ts | 2 +- 12 files changed, 199 insertions(+), 27 deletions(-) create mode 100644 apps/api/prisma/migrations/20250323092444_programm/migration.sql create mode 100644 apps/api/prisma/schema/ProgrammPunkt.prisma create mode 100644 apps/api/src/services/program/program.autocomplete.ts create mode 100644 apps/api/src/services/program/program.list.ts create mode 100644 apps/api/src/services/program/program.router.ts create mode 100644 apps/frontend/src/views/Verwaltung/Program/ProgramList.vue diff --git a/apps/api/prisma/migrations/20250323092444_programm/migration.sql b/apps/api/prisma/migrations/20250323092444_programm/migration.sql new file mode 100644 index 00000000..efa609ec --- /dev/null +++ b/apps/api/prisma/migrations/20250323092444_programm/migration.sql @@ -0,0 +1,16 @@ +-- CreateTable +CREATE TABLE "ProgrammPunkt" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "startingAt" TIMESTAMP(3) NOT NULL, + "endingAt" TIMESTAMP(3) NOT NULL, + "location" TEXT NOT NULL, + "responsible" TEXT NOT NULL, + "veranstaltungId" INTEGER NOT NULL, + + CONSTRAINT "ProgrammPunkt_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "ProgrammPunkt" ADD CONSTRAINT "ProgrammPunkt_veranstaltungId_fkey" FOREIGN KEY ("veranstaltungId") REFERENCES "Veranstaltung"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/apps/api/prisma/schema/ProgrammPunkt.prisma b/apps/api/prisma/schema/ProgrammPunkt.prisma new file mode 100644 index 00000000..279603c3 --- /dev/null +++ b/apps/api/prisma/schema/ProgrammPunkt.prisma @@ -0,0 +1,12 @@ +model ProgrammPunkt { + id Int @id @default(autoincrement()) + name String + description String? + startingAt DateTime + endingAt DateTime + location String + responsible String + + veranstaltungId Int + veranstaltung Veranstaltung @relation(fields: [veranstaltungId], references: [id]) +} diff --git a/apps/api/prisma/schema/Veranstaltung.prisma b/apps/api/prisma/schema/Veranstaltung.prisma index 6df0d30e..fd63f117 100644 --- a/apps/api/prisma/schema/Veranstaltung.prisma +++ b/apps/api/prisma/schema/Veranstaltung.prisma @@ -19,4 +19,5 @@ model Veranstaltung { hostnameId Int? hostname Hostname? @relation(fields: [hostnameId], references: [id]) customFields CustomField[] + programmPunkte ProgrammPunkt[] } diff --git a/apps/api/src/services/index.ts b/apps/api/src/services/index.ts index b8184e22..f3a51dfc 100644 --- a/apps/api/src/services/index.ts +++ b/apps/api/src/services/index.ts @@ -11,6 +11,7 @@ import { fileRouter } from './file/file.router.js' import { gliederungRouter } from './gliederung/gliederung.router.js' import { ortRouter } from './ort/ort.router.js' import { personRouter } from './person/person.router.js' +import { programRouter } from './program/program.router.js' import { searchRouter } from './search/search.router.js' import { systemRouter } from './system/system.router.js' import { unterveranstaltungRouter } from './unterveranstaltung/unterveranstaltung.router.js' @@ -33,5 +34,6 @@ export const serviceRouter = router({ file: fileRouter, address: addressRouter, faq: faqsRouter, + program: programRouter, // Add Routers here - do not delete this line }) diff --git a/apps/api/src/services/program/program.autocomplete.ts b/apps/api/src/services/program/program.autocomplete.ts new file mode 100644 index 00000000..1ee90fc4 --- /dev/null +++ b/apps/api/src/services/program/program.autocomplete.ts @@ -0,0 +1,47 @@ +import { z } from 'zod' +import { defineProtectedQueryProcedure } from '../../types/defineProcedure.js' +import prisma from '../../prisma.js' + +export const programSearchLocationProcedure = defineProtectedQueryProcedure({ + key: 'searchLocation', + roleIds: ['ADMIN', 'GLIEDERUNG_ADMIN'], + inputSchema: z.string(), + handler: async ({ input }) => { + const results = await prisma.programmPunkt.findMany({ + where: { + location: { + contains: input, + mode: 'insensitive', + }, + }, + distinct: ['location'], + select: { + location: true, + }, + }) + + return results.map((row) => row.location) + }, +}) + +export const programSearchResponsiblesProcedure = defineProtectedQueryProcedure({ + key: 'searchResponsibles', + roleIds: ['ADMIN', 'GLIEDERUNG_ADMIN'], + inputSchema: z.string(), + handler: async ({ input }) => { + const results = await prisma.programmPunkt.findMany({ + where: { + responsible: { + contains: input, + mode: 'insensitive', + }, + }, + distinct: ['responsible'], + select: { + responsible: true, + }, + }) + + return results.map((row) => row.responsible) + }, +}) diff --git a/apps/api/src/services/program/program.list.ts b/apps/api/src/services/program/program.list.ts new file mode 100644 index 00000000..b0fe03d1 --- /dev/null +++ b/apps/api/src/services/program/program.list.ts @@ -0,0 +1,32 @@ +import { groupBy } from '@codeanker/helpers' +import { z } from 'zod' +import prisma from '../../prisma.js' +import { definePublicQueryProcedure } from '../../types/defineProcedure.js' + +export const programListProcedure = definePublicQueryProcedure({ + key: 'list', + inputSchema: z.strictObject({ + veranstaltungId: z.number().int(), + }), + handler: async ({ input }) => { + const result = await prisma.programmPunkt.findMany({ + where: { + veranstaltungId: input.veranstaltungId, + }, + select: { + name: true, + description: true, + location: true, + responsible: true, + startingAt: true, + endingAt: true, + }, + orderBy: { + startingAt: 'asc', + }, + }) + + const grouped = groupBy(result, (row) => row.startingAt.getTime()) + return Object.entries(grouped).sort(([timestampA], [timestampB]) => timestampB.localeCompare(timestampA)) + }, +}) diff --git a/apps/api/src/services/program/program.router.ts b/apps/api/src/services/program/program.router.ts new file mode 100644 index 00000000..58be9cba --- /dev/null +++ b/apps/api/src/services/program/program.router.ts @@ -0,0 +1,13 @@ +// Prettier ignored is because this file is generated +import { mergeRouters } from '../../trpc.js' +import { programSearchLocationProcedure, programSearchResponsiblesProcedure } from './program.autocomplete.js' +import { programListProcedure } from './program.list.js' + +// Import Routes here - do not delete this line + +export const programRouter = mergeRouters( + programListProcedure, + programSearchLocationProcedure, + programSearchResponsiblesProcedure + // Add Routes here - do not delete this line +) diff --git a/apps/api/src/types/defineProcedure.ts b/apps/api/src/types/defineProcedure.ts index 2d0a2a45..dfb2d542 100644 --- a/apps/api/src/types/defineProcedure.ts +++ b/apps/api/src/types/defineProcedure.ts @@ -23,11 +23,9 @@ export function defineProtectedQueryProcedure< const procedure = protectedProcedure(config.roleIds) .input(config.inputSchema) .query((opts) => config.handler(opts)) - return { - router: router({ - [config.key]: procedure, - } as { [k in TProcedureKey]: typeof procedure }), - } + return router({ + [config.key]: procedure, + } as { [k in TProcedureKey]: typeof procedure }) } export function defineProtectedMutateProcedure< @@ -47,11 +45,9 @@ export function defineProtectedMutateProcedure< const procedure = protectedProcedure(config.roleIds) .input(config.inputSchema) .mutation((opts) => config.handler(opts)) - return { - router: router({ - [config.key]: procedure, - } as { [k in TProcedureKey]: typeof procedure }), - } + return router({ + [config.key]: procedure, + } as { [k in TProcedureKey]: typeof procedure }) } export function definePublicQueryProcedure< @@ -67,11 +63,9 @@ export function definePublicQueryProcedure< handler: (options: { ctx: Context; input: z.infer }) => MaybePromise }) { const procedure = publicProcedure.input(config.inputSchema).query((opts) => config.handler(opts)) - return { - router: router({ - [config.key]: procedure, - } as { [k in TProcedureKey]: typeof procedure }), - } + return router({ + [config.key]: procedure, + } as { [k in TProcedureKey]: typeof procedure }) } export function definePublicMutateProcedure< @@ -87,9 +81,7 @@ export function definePublicMutateProcedure< handler: (options: { ctx: Context; input: z.infer }) => MaybePromise }) { const procedure = publicProcedure.input(config.inputSchema).mutation((opts) => config.handler(opts)) - return { - router: router({ - [config.key]: procedure, - } as { [k in TProcedureKey]: typeof procedure }), - } + return router({ + [config.key]: procedure, + } as { [k in TProcedureKey]: typeof procedure }) } diff --git a/apps/frontend/src/components/UnterveranstaltungenTable.vue b/apps/frontend/src/components/UnterveranstaltungenTable.vue index 3a777639..ac85cc5d 100644 --- a/apps/frontend/src/components/UnterveranstaltungenTable.vue +++ b/apps/frontend/src/components/UnterveranstaltungenTable.vue @@ -101,7 +101,7 @@ async function fetchCount(filter: TUnterveranstaltungFilter): Promise { veranstaltungId: veranstaltungId, gliederungName: '', }" - :default-order-by="[['id', 'asc']]" + :default-order-by="[['gliederung.name', 'asc']]" no-data-message="Es gibt bisher keine Ausschreibungen." show-clickable @row-click=" diff --git a/apps/frontend/src/views/Verwaltung/Program/ProgramList.vue b/apps/frontend/src/views/Verwaltung/Program/ProgramList.vue new file mode 100644 index 00000000..5e55432a --- /dev/null +++ b/apps/frontend/src/views/Verwaltung/Program/ProgramList.vue @@ -0,0 +1,49 @@ + + + diff --git a/apps/frontend/src/views/Verwaltung/Veranstaltungen/VeranstaltungDetail.vue b/apps/frontend/src/views/Verwaltung/Veranstaltungen/VeranstaltungDetail.vue index 7c9cd6a5..bdf4cde2 100644 --- a/apps/frontend/src/views/Verwaltung/Veranstaltungen/VeranstaltungDetail.vue +++ b/apps/frontend/src/views/Verwaltung/Veranstaltungen/VeranstaltungDetail.vue @@ -22,6 +22,7 @@ import UnterveranstaltungenTable from '@/components/UnterveranstaltungenTable.vu import { useRouteTitle } from '@/composables/useRouteTitle' import { formatDate } from '@codeanker/helpers' import { PlusIcon } from '@heroicons/vue/24/solid' +import ProgramList from '../Program/ProgramList.vue' const { setTitle } = useRouteTitle() @@ -75,6 +76,7 @@ const tabs = computed(() => { { name: 'Allgemein', icon: WalletIcon }, { name: 'Dokumente', icon: DocumentIcon }, { name: 'Bedingungen', icon: ClipboardDocumentListIcon }, + { name: 'Programm', icon: ClipboardDocumentListIcon }, { name: 'Ausschreibungen', icon: MegaphoneIcon }, { name: 'Felder', icon: SquaresPlusIcon }, ] @@ -118,7 +120,7 @@ const files = [ content-space="4" :tabs="tabs" > - +
Veranstaltungsdaten
- +
Dokumente

Exports von Daten zu dieser Veranstaltung

- +
Öffentliche Teilnahmebedingungen Veranstaltung

@@ -189,7 +191,13 @@ const files = [

Keine Datenschutzhinweise hinterlegt

- + + + +
Unterveranstaltungen
@@ -212,7 +220,7 @@ const files = [ :hide-columns="['veranstaltung.name']" /> - +
Benutzerdefinierte Felder
diff --git a/packages/helpers/src/group-by.ts b/packages/helpers/src/group-by.ts index 9c1f4769..eb8eca44 100644 --- a/packages/helpers/src/group-by.ts +++ b/packages/helpers/src/group-by.ts @@ -1,4 +1,4 @@ -export function groupBy(arr: T[], key: (item: T) => K): Record { +export function groupBy(arr: T[], key: (item: T) => K): Record { const result = {} as Record for (const item of arr) { From ea8faebe62f7467c13ec5b8d3020bbd2641d9814 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 31 Mar 2025 21:22:39 +0000 Subject: [PATCH 03/26] build(deps-dev): bump vite from 6.1.0 to 6.2.4 Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.1.0 to 6.2.4. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/v6.2.4/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v6.2.4/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 6.2.4 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- apps/frontend/package.json | 2 +- pnpm-lock.yaml | 733 ++++++++++++++++++------------------- 2 files changed, 352 insertions(+), 383 deletions(-) diff --git a/apps/frontend/package.json b/apps/frontend/package.json index 9fda9fa3..7ff57068 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -60,7 +60,7 @@ "sass": "^1.69.5", "tailwindcss": "^3.3.5", "typescript": "catalog:", - "vite": "^6.1.0", + "vite": "^6.2.4", "vue-tsc": "catalog:" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e7ed0577..b5703628 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -248,7 +248,7 @@ importers: dependencies: vitepress: specifier: ^1.0.0-rc.31 - version: 1.6.3(@algolia/client-search@5.20.1)(@types/node@22.10.2)(axios@1.7.9)(postcss@8.5.1)(sass@1.83.0)(search-insights@2.17.3)(sortablejs@1.14.0)(typescript@5.7.2) + version: 1.6.3(@algolia/client-search@5.20.1)(@types/node@22.10.2)(axios@1.7.9)(postcss@8.5.3)(sass@1.83.0)(search-insights@2.17.3)(sortablejs@1.14.0)(typescript@5.7.2) optionalDependencies: '@rollup/rollup-linux-arm64-gnu': specifier: ^4.8.0 @@ -376,10 +376,10 @@ importers: version: 22.10.2 '@vitejs/plugin-basic-ssl': specifier: ^1.2.0 - version: 1.2.0(vite@6.1.0(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0)) + version: 1.2.0(vite@6.2.4(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0)) '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.1(vite@6.1.0(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) + version: 5.2.1(vite@6.2.4(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2)) autoprefixer: specifier: ^10.4.16 version: 10.4.20(postcss@8.5.1) @@ -399,8 +399,8 @@ importers: specifier: 'catalog:' version: 5.7.2 vite: - specifier: ^6.1.0 - version: 6.1.0(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0) + specifier: ^6.2.4 + version: 6.2.4(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0) vue-tsc: specifier: 'catalog:' version: 2.2.0(typescript@5.7.2) @@ -776,18 +776,12 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.24.2': - resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + '@esbuild/aix-ppc64@0.25.2': + resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.18.20': - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.21.5': resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} @@ -800,18 +794,12 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.24.2': - resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + '@esbuild/android-arm64@0.25.2': + resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.18.20': - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.21.5': resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} @@ -824,18 +812,12 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.24.2': - resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + '@esbuild/android-arm@0.25.2': + resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.18.20': - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.21.5': resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} @@ -848,18 +830,12 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.24.2': - resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + '@esbuild/android-x64@0.25.2': + resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.18.20': - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.21.5': resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} @@ -872,18 +848,12 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.24.2': - resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + '@esbuild/darwin-arm64@0.25.2': + resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.18.20': - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.21.5': resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} @@ -896,18 +866,12 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.24.2': - resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + '@esbuild/darwin-x64@0.25.2': + resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.18.20': - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.21.5': resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} @@ -920,18 +884,12 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.24.2': - resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + '@esbuild/freebsd-arm64@0.25.2': + resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.18.20': - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} @@ -944,18 +902,12 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.24.2': - resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + '@esbuild/freebsd-x64@0.25.2': + resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.18.20': - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.21.5': resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} @@ -968,18 +920,12 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.24.2': - resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + '@esbuild/linux-arm64@0.25.2': + resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.18.20': - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.21.5': resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} @@ -992,18 +938,12 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.24.2': - resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + '@esbuild/linux-arm@0.25.2': + resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.18.20': - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.21.5': resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} @@ -1016,18 +956,12 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.24.2': - resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + '@esbuild/linux-ia32@0.25.2': + resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.18.20': - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.21.5': resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} @@ -1040,18 +974,12 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.24.2': - resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + '@esbuild/linux-loong64@0.25.2': + resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.18.20': - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.21.5': resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} @@ -1064,18 +992,12 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.24.2': - resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + '@esbuild/linux-mips64el@0.25.2': + resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.18.20': - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.21.5': resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} @@ -1088,18 +1010,12 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.24.2': - resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + '@esbuild/linux-ppc64@0.25.2': + resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.18.20': - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.21.5': resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} @@ -1112,18 +1028,12 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.24.2': - resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + '@esbuild/linux-riscv64@0.25.2': + resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.18.20': - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.21.5': resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} @@ -1136,18 +1046,12 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.24.2': - resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + '@esbuild/linux-s390x@0.25.2': + resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.18.20': - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.21.5': resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} @@ -1160,24 +1064,18 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.24.2': - resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + '@esbuild/linux-x64@0.25.2': + resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.24.2': - resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + '@esbuild/netbsd-arm64@0.25.2': + resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.18.20': - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.21.5': resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} @@ -1190,8 +1088,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.24.2': - resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + '@esbuild/netbsd-x64@0.25.2': + resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -1202,18 +1100,12 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.24.2': - resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + '@esbuild/openbsd-arm64@0.25.2': + resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.18.20': - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.21.5': resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} @@ -1226,18 +1118,12 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.24.2': - resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + '@esbuild/openbsd-x64@0.25.2': + resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.18.20': - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.21.5': resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} @@ -1250,18 +1136,12 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.24.2': - resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + '@esbuild/sunos-x64@0.25.2': + resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.18.20': - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.21.5': resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} @@ -1274,18 +1154,12 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.24.2': - resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + '@esbuild/win32-arm64@0.25.2': + resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.18.20': - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.21.5': resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} @@ -1298,18 +1172,12 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.24.2': - resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + '@esbuild/win32-ia32@0.25.2': + resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.18.20': - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.21.5': resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} @@ -1322,8 +1190,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.24.2': - resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + '@esbuild/win32-x64@0.25.2': + resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -1750,96 +1618,196 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.38.0': + resolution: {integrity: sha512-ldomqc4/jDZu/xpYU+aRxo3V4mGCV9HeTgUBANI3oIQMOL+SsxB+S2lxMpkFp5UamSS3XuTMQVbsS24R4J4Qjg==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.34.4': resolution: {integrity: sha512-1aRlh1gqtF7vNPMnlf1vJKk72Yshw5zknR/ZAVh7zycRAGF2XBMVDAHmFQz/Zws5k++nux3LOq/Ejj1WrDR6xg==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.38.0': + resolution: {integrity: sha512-VUsgcy4GhhT7rokwzYQP+aV9XnSLkkhlEJ0St8pbasuWO/vwphhZQxYEKUP3ayeCYLhk6gEtacRpYP/cj3GjyQ==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.34.4': resolution: {integrity: sha512-drHl+4qhFj+PV/jrQ78p9ch6A0MfNVZScl/nBps5a7u01aGf/GuBRrHnRegA9bP222CBDfjYbFdjkIJ/FurvSQ==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.38.0': + resolution: {integrity: sha512-buA17AYXlW9Rn091sWMq1xGUvWQFOH4N1rqUxGJtEQzhChxWjldGCCup7r/wUnaI6Au8sKXpoh0xg58a7cgcpg==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.34.4': resolution: {integrity: sha512-hQqq/8QALU6t1+fbNmm6dwYsa0PDD4L5r3TpHx9dNl+aSEMnIksHZkSO3AVH+hBMvZhpumIGrTFj8XCOGuIXjw==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.38.0': + resolution: {integrity: sha512-Mgcmc78AjunP1SKXl624vVBOF2bzwNWFPMP4fpOu05vS0amnLcX8gHIge7q/lDAHy3T2HeR0TqrriZDQS2Woeg==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-freebsd-arm64@4.34.4': resolution: {integrity: sha512-/L0LixBmbefkec1JTeAQJP0ETzGjFtNml2gpQXA8rpLo7Md+iXQzo9kwEgzyat5Q+OG/C//2B9Fx52UxsOXbzw==} cpu: [arm64] os: [freebsd] + '@rollup/rollup-freebsd-arm64@4.38.0': + resolution: {integrity: sha512-zzJACgjLbQTsscxWqvrEQAEh28hqhebpRz5q/uUd1T7VTwUNZ4VIXQt5hE7ncs0GrF+s7d3S4on4TiXUY8KoQA==} + cpu: [arm64] + os: [freebsd] + '@rollup/rollup-freebsd-x64@4.34.4': resolution: {integrity: sha512-6Rk3PLRK+b8L/M6m/x6Mfj60LhAUcLJ34oPaxufA+CfqkUrDoUPQYFdRrhqyOvtOKXLJZJwxlOLbQjNYQcRQfw==} cpu: [x64] os: [freebsd] + '@rollup/rollup-freebsd-x64@4.38.0': + resolution: {integrity: sha512-hCY/KAeYMCyDpEE4pTETam0XZS4/5GXzlLgpi5f0IaPExw9kuB+PDTOTLuPtM10TlRG0U9OSmXJ+Wq9J39LvAg==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.34.4': resolution: {integrity: sha512-kmT3x0IPRuXY/tNoABp2nDvI9EvdiS2JZsd4I9yOcLCCViKsP0gB38mVHOhluzx+SSVnM1KNn9k6osyXZhLoCA==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.38.0': + resolution: {integrity: sha512-mimPH43mHl4JdOTD7bUMFhBdrg6f9HzMTOEnzRmXbOZqjijCw8LA5z8uL6LCjxSa67H2xiLFvvO67PT05PRKGg==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.34.4': resolution: {integrity: sha512-3iSA9tx+4PZcJH/Wnwsvx/BY4qHpit/u2YoZoXugWVfc36/4mRkgGEoRbRV7nzNBSCOgbWMeuQ27IQWgJ7tRzw==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.38.0': + resolution: {integrity: sha512-tPiJtiOoNuIH8XGG8sWoMMkAMm98PUwlriOFCCbZGc9WCax+GLeVRhmaxjJtz6WxrPKACgrwoZ5ia/uapq3ZVg==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.34.4': resolution: {integrity: sha512-7CwSJW+sEhM9sESEk+pEREF2JL0BmyCro8UyTq0Kyh0nu1v0QPNY3yfLPFKChzVoUmaKj8zbdgBxUhBRR+xGxg==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.38.0': + resolution: {integrity: sha512-wZco59rIVuB0tjQS0CSHTTUcEde+pXQWugZVxWaQFdQQ1VYub/sTrNdY76D1MKdN2NB48JDuGABP6o6fqos8mA==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.34.4': resolution: {integrity: sha512-GZdafB41/4s12j8Ss2izofjeFXRAAM7sHCb+S4JsI9vaONX/zQ8cXd87B9MRU/igGAJkKvmFmJJBeeT9jJ5Cbw==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.38.0': + resolution: {integrity: sha512-fQgqwKmW0REM4LomQ+87PP8w8xvU9LZfeLBKybeli+0yHT7VKILINzFEuggvnV9M3x1Ed4gUBmGUzCo/ikmFbQ==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-loongarch64-gnu@4.34.4': resolution: {integrity: sha512-uuphLuw1X6ur11675c2twC6YxbzyLSpWggvdawTUamlsoUv81aAXRMPBC1uvQllnBGls0Qt5Siw8reSIBnbdqQ==} cpu: [loong64] os: [linux] + '@rollup/rollup-linux-loongarch64-gnu@4.38.0': + resolution: {integrity: sha512-hz5oqQLXTB3SbXpfkKHKXLdIp02/w3M+ajp8p4yWOWwQRtHWiEOCKtc9U+YXahrwdk+3qHdFMDWR5k+4dIlddg==} + cpu: [loong64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.34.4': resolution: {integrity: sha512-KvLEw1os2gSmD6k6QPCQMm2T9P2GYvsMZMRpMz78QpSoEevHbV/KOUbI/46/JRalhtSAYZBYLAnT9YE4i/l4vg==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.38.0': + resolution: {integrity: sha512-NXqygK/dTSibQ+0pzxsL3r4Xl8oPqVoWbZV9niqOnIHV/J92fe65pOir0xjkUZDRSPyFRvu+4YOpJF9BZHQImw==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.34.4': resolution: {integrity: sha512-wcpCLHGM9yv+3Dql/CI4zrY2mpQ4WFergD3c9cpRowltEh5I84pRT/EuHZsG0In4eBPPYthXnuR++HrFkeqwkA==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.38.0': + resolution: {integrity: sha512-GEAIabR1uFyvf/jW/5jfu8gjM06/4kZ1W+j1nWTSSB3w6moZEBm7iBtzwQ3a1Pxos2F7Gz+58aVEnZHU295QTg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.38.0': + resolution: {integrity: sha512-9EYTX+Gus2EGPbfs+fh7l95wVADtSQyYw4DfSBcYdUEAmP2lqSZY0Y17yX/3m5VKGGJ4UmIH5LHLkMJft3bYoA==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.34.4': resolution: {integrity: sha512-nLbfQp2lbJYU8obhRQusXKbuiqm4jSJteLwfjnunDT5ugBKdxqw1X9KWwk8xp1OMC6P5d0WbzxzhWoznuVK6XA==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.38.0': + resolution: {integrity: sha512-Mpp6+Z5VhB9VDk7RwZXoG2qMdERm3Jw07RNlXHE0bOnEeX+l7Fy4bg+NxfyN15ruuY3/7Vrbpm75J9QHFqj5+Q==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.34.4': resolution: {integrity: sha512-JGejzEfVzqc/XNiCKZj14eb6s5w8DdWlnQ5tWUbs99kkdvfq9btxxVX97AaxiUX7xJTKFA0LwoS0KU8C2faZRg==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.38.0': + resolution: {integrity: sha512-vPvNgFlZRAgO7rwncMeE0+8c4Hmc+qixnp00/Uv3ht2x7KYrJ6ERVd3/R0nUtlE6/hu7/HiiNHJ/rP6knRFt1w==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.34.4': resolution: {integrity: sha512-/iFIbhzeyZZy49ozAWJ1ZR2KW6ZdYUbQXLT4O5n1cRZRoTpwExnHLjlurDXXPKEGxiAg0ujaR9JDYKljpr2fDg==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.38.0': + resolution: {integrity: sha512-q5Zv+goWvQUGCaL7fU8NuTw8aydIL/C9abAVGCzRReuj5h30TPx4LumBtAidrVOtXnlB+RZkBtExMsfqkMfb8g==} + cpu: [x64] + os: [linux] + '@rollup/rollup-win32-arm64-msvc@4.34.4': resolution: {integrity: sha512-qORc3UzoD5UUTneiP2Afg5n5Ti1GAW9Gp5vHPxzvAFFA3FBaum9WqGvYXGf+c7beFdOKNos31/41PRMUwh1tpA==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.38.0': + resolution: {integrity: sha512-u/Jbm1BU89Vftqyqbmxdq14nBaQjQX1HhmsdBWqSdGClNaKwhjsg5TpW+5Ibs1mb8Es9wJiMdl86BcmtUVXNZg==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.34.4': resolution: {integrity: sha512-5g7E2PHNK2uvoD5bASBD9aelm44nf1w4I5FEI7MPHLWcCSrR8JragXZWgKPXk5i2FU3JFfa6CGZLw2RrGBHs2Q==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.38.0': + resolution: {integrity: sha512-mqu4PzTrlpNHHbu5qleGvXJoGgHpChBlrBx/mEhTPpnAL1ZAYFlvHD7rLK839LLKQzqEQMFJfGrrOHItN4ZQqA==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.34.4': resolution: {integrity: sha512-p0scwGkR4kZ242xLPBuhSckrJ734frz6v9xZzD+kHVYRAkSUmdSLCIJRfql6H5//aF8Q10K+i7q8DiPfZp0b7A==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.38.0': + resolution: {integrity: sha512-jjqy3uWlecfB98Psxb5cD6Fny9Fupv9LrDSPTQZUROqjvZmcCqNu4UMl7qqhlUUGpwiAkotj6GYu4SZdcr/nLw==} + cpu: [x64] + os: [win32] + '@sendgrid/client@8.1.4': resolution: {integrity: sha512-VxZoQ82MpxmjSXLR3ZAE2OWxvQIW2k2G24UeRPr/SYX8HqWLV/8UBN15T2WmjjnEb5XSmFImTJOKDzzSeKr9YQ==} engines: {node: '>=12.*'} @@ -2088,6 +2056,9 @@ packages: '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/express-serve-static-core@5.0.6': resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} @@ -2979,11 +2950,6 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -2994,8 +2960,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.24.2: - resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + esbuild@0.25.2: + resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} engines: {node: '>=18'} hasBin: true @@ -3857,6 +3823,11 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + nanoid@3.3.8: resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4096,6 +4067,10 @@ packages: resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + preact@10.25.4: resolution: {integrity: sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==} @@ -4288,16 +4263,16 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@3.29.5: - resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - rollup@4.34.4: resolution: {integrity: sha512-spF66xoyD7rz3o08sHP7wogp1gZ6itSq22SGa/IZTcUDXDlOyrShwMwkVSB+BUxFRZZCUYqdb3KWDEOMVQZxuw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.38.0: + resolution: {integrity: sha512-5SsIRtJy9bf1ErAOiFMFzl64Ex9X5V7bnJ+WlFMb+zmP459OSWCEG7b0ERZ+PEU7xPt4OG3RHbrp1LJlXxYTrw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + rope-sequence@1.3.4: resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} @@ -4718,15 +4693,16 @@ packages: engines: {node: '>=v14.18.0'} hasBin: true - vite@4.5.6: - resolution: {integrity: sha512-ElBNuVvJKslxcfY2gMmae5IjaKGqCYGicCNZ+8R56sAznobeE3pI9ctzI17cBS/6OJh5YuQNMSN4BP4dRjugBg==} - engines: {node: ^14.18.0 || >=16.0.0} + vite@5.4.14: + resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} + engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - '@types/node': '>= 14' + '@types/node': ^18.0.0 || >=20.0.0 less: '*' lightningcss: ^1.21.0 sass: '*' + sass-embedded: '*' stylus: '*' sugarss: '*' terser: ^5.4.0 @@ -4739,6 +4715,8 @@ packages: optional: true sass: optional: true + sass-embedded: + optional: true stylus: optional: true sugarss: @@ -4746,8 +4724,8 @@ packages: terser: optional: true - vite@5.4.14: - resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} + vite@5.4.16: + resolution: {integrity: sha512-Y5gnfp4NemVfgOTDQAunSD4346fal44L9mszGGY/e+qxsRT5y1sMlS/8tiQ8AFAp+MFgYNSINdfEchJiPm41vQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -4777,8 +4755,8 @@ packages: terser: optional: true - vite@6.1.0: - resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==} + vite@6.2.4: + resolution: {integrity: sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: @@ -5293,10 +5271,7 @@ snapshots: '@esbuild/aix-ppc64@0.23.1': optional: true - '@esbuild/aix-ppc64@0.24.2': - optional: true - - '@esbuild/android-arm64@0.18.20': + '@esbuild/aix-ppc64@0.25.2': optional: true '@esbuild/android-arm64@0.21.5': @@ -5305,10 +5280,7 @@ snapshots: '@esbuild/android-arm64@0.23.1': optional: true - '@esbuild/android-arm64@0.24.2': - optional: true - - '@esbuild/android-arm@0.18.20': + '@esbuild/android-arm64@0.25.2': optional: true '@esbuild/android-arm@0.21.5': @@ -5317,10 +5289,7 @@ snapshots: '@esbuild/android-arm@0.23.1': optional: true - '@esbuild/android-arm@0.24.2': - optional: true - - '@esbuild/android-x64@0.18.20': + '@esbuild/android-arm@0.25.2': optional: true '@esbuild/android-x64@0.21.5': @@ -5329,10 +5298,7 @@ snapshots: '@esbuild/android-x64@0.23.1': optional: true - '@esbuild/android-x64@0.24.2': - optional: true - - '@esbuild/darwin-arm64@0.18.20': + '@esbuild/android-x64@0.25.2': optional: true '@esbuild/darwin-arm64@0.21.5': @@ -5341,10 +5307,7 @@ snapshots: '@esbuild/darwin-arm64@0.23.1': optional: true - '@esbuild/darwin-arm64@0.24.2': - optional: true - - '@esbuild/darwin-x64@0.18.20': + '@esbuild/darwin-arm64@0.25.2': optional: true '@esbuild/darwin-x64@0.21.5': @@ -5353,10 +5316,7 @@ snapshots: '@esbuild/darwin-x64@0.23.1': optional: true - '@esbuild/darwin-x64@0.24.2': - optional: true - - '@esbuild/freebsd-arm64@0.18.20': + '@esbuild/darwin-x64@0.25.2': optional: true '@esbuild/freebsd-arm64@0.21.5': @@ -5365,10 +5325,7 @@ snapshots: '@esbuild/freebsd-arm64@0.23.1': optional: true - '@esbuild/freebsd-arm64@0.24.2': - optional: true - - '@esbuild/freebsd-x64@0.18.20': + '@esbuild/freebsd-arm64@0.25.2': optional: true '@esbuild/freebsd-x64@0.21.5': @@ -5377,10 +5334,7 @@ snapshots: '@esbuild/freebsd-x64@0.23.1': optional: true - '@esbuild/freebsd-x64@0.24.2': - optional: true - - '@esbuild/linux-arm64@0.18.20': + '@esbuild/freebsd-x64@0.25.2': optional: true '@esbuild/linux-arm64@0.21.5': @@ -5389,10 +5343,7 @@ snapshots: '@esbuild/linux-arm64@0.23.1': optional: true - '@esbuild/linux-arm64@0.24.2': - optional: true - - '@esbuild/linux-arm@0.18.20': + '@esbuild/linux-arm64@0.25.2': optional: true '@esbuild/linux-arm@0.21.5': @@ -5401,10 +5352,7 @@ snapshots: '@esbuild/linux-arm@0.23.1': optional: true - '@esbuild/linux-arm@0.24.2': - optional: true - - '@esbuild/linux-ia32@0.18.20': + '@esbuild/linux-arm@0.25.2': optional: true '@esbuild/linux-ia32@0.21.5': @@ -5413,10 +5361,7 @@ snapshots: '@esbuild/linux-ia32@0.23.1': optional: true - '@esbuild/linux-ia32@0.24.2': - optional: true - - '@esbuild/linux-loong64@0.18.20': + '@esbuild/linux-ia32@0.25.2': optional: true '@esbuild/linux-loong64@0.21.5': @@ -5425,10 +5370,7 @@ snapshots: '@esbuild/linux-loong64@0.23.1': optional: true - '@esbuild/linux-loong64@0.24.2': - optional: true - - '@esbuild/linux-mips64el@0.18.20': + '@esbuild/linux-loong64@0.25.2': optional: true '@esbuild/linux-mips64el@0.21.5': @@ -5437,10 +5379,7 @@ snapshots: '@esbuild/linux-mips64el@0.23.1': optional: true - '@esbuild/linux-mips64el@0.24.2': - optional: true - - '@esbuild/linux-ppc64@0.18.20': + '@esbuild/linux-mips64el@0.25.2': optional: true '@esbuild/linux-ppc64@0.21.5': @@ -5449,10 +5388,7 @@ snapshots: '@esbuild/linux-ppc64@0.23.1': optional: true - '@esbuild/linux-ppc64@0.24.2': - optional: true - - '@esbuild/linux-riscv64@0.18.20': + '@esbuild/linux-ppc64@0.25.2': optional: true '@esbuild/linux-riscv64@0.21.5': @@ -5461,10 +5397,7 @@ snapshots: '@esbuild/linux-riscv64@0.23.1': optional: true - '@esbuild/linux-riscv64@0.24.2': - optional: true - - '@esbuild/linux-s390x@0.18.20': + '@esbuild/linux-riscv64@0.25.2': optional: true '@esbuild/linux-s390x@0.21.5': @@ -5473,10 +5406,7 @@ snapshots: '@esbuild/linux-s390x@0.23.1': optional: true - '@esbuild/linux-s390x@0.24.2': - optional: true - - '@esbuild/linux-x64@0.18.20': + '@esbuild/linux-s390x@0.25.2': optional: true '@esbuild/linux-x64@0.21.5': @@ -5485,13 +5415,10 @@ snapshots: '@esbuild/linux-x64@0.23.1': optional: true - '@esbuild/linux-x64@0.24.2': + '@esbuild/linux-x64@0.25.2': optional: true - '@esbuild/netbsd-arm64@0.24.2': - optional: true - - '@esbuild/netbsd-x64@0.18.20': + '@esbuild/netbsd-arm64@0.25.2': optional: true '@esbuild/netbsd-x64@0.21.5': @@ -5500,16 +5427,13 @@ snapshots: '@esbuild/netbsd-x64@0.23.1': optional: true - '@esbuild/netbsd-x64@0.24.2': + '@esbuild/netbsd-x64@0.25.2': optional: true '@esbuild/openbsd-arm64@0.23.1': optional: true - '@esbuild/openbsd-arm64@0.24.2': - optional: true - - '@esbuild/openbsd-x64@0.18.20': + '@esbuild/openbsd-arm64@0.25.2': optional: true '@esbuild/openbsd-x64@0.21.5': @@ -5518,10 +5442,7 @@ snapshots: '@esbuild/openbsd-x64@0.23.1': optional: true - '@esbuild/openbsd-x64@0.24.2': - optional: true - - '@esbuild/sunos-x64@0.18.20': + '@esbuild/openbsd-x64@0.25.2': optional: true '@esbuild/sunos-x64@0.21.5': @@ -5530,10 +5451,7 @@ snapshots: '@esbuild/sunos-x64@0.23.1': optional: true - '@esbuild/sunos-x64@0.24.2': - optional: true - - '@esbuild/win32-arm64@0.18.20': + '@esbuild/sunos-x64@0.25.2': optional: true '@esbuild/win32-arm64@0.21.5': @@ -5542,10 +5460,7 @@ snapshots: '@esbuild/win32-arm64@0.23.1': optional: true - '@esbuild/win32-arm64@0.24.2': - optional: true - - '@esbuild/win32-ia32@0.18.20': + '@esbuild/win32-arm64@0.25.2': optional: true '@esbuild/win32-ia32@0.21.5': @@ -5554,10 +5469,7 @@ snapshots: '@esbuild/win32-ia32@0.23.1': optional: true - '@esbuild/win32-ia32@0.24.2': - optional: true - - '@esbuild/win32-x64@0.18.20': + '@esbuild/win32-ia32@0.25.2': optional: true '@esbuild/win32-x64@0.21.5': @@ -5566,7 +5478,7 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@esbuild/win32-x64@0.24.2': + '@esbuild/win32-x64@0.25.2': optional: true '@eslint-community/eslint-utils@4.4.1(eslint@9.19.0(jiti@1.21.7))': @@ -5983,60 +5895,120 @@ snapshots: '@rollup/rollup-android-arm-eabi@4.34.4': optional: true + '@rollup/rollup-android-arm-eabi@4.38.0': + optional: true + '@rollup/rollup-android-arm64@4.34.4': optional: true + '@rollup/rollup-android-arm64@4.38.0': + optional: true + '@rollup/rollup-darwin-arm64@4.34.4': optional: true + '@rollup/rollup-darwin-arm64@4.38.0': + optional: true + '@rollup/rollup-darwin-x64@4.34.4': optional: true + '@rollup/rollup-darwin-x64@4.38.0': + optional: true + '@rollup/rollup-freebsd-arm64@4.34.4': optional: true + '@rollup/rollup-freebsd-arm64@4.38.0': + optional: true + '@rollup/rollup-freebsd-x64@4.34.4': optional: true + '@rollup/rollup-freebsd-x64@4.38.0': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.34.4': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.38.0': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.34.4': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.38.0': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.34.4': optional: true + '@rollup/rollup-linux-arm64-gnu@4.38.0': + optional: true + '@rollup/rollup-linux-arm64-musl@4.34.4': optional: true + '@rollup/rollup-linux-arm64-musl@4.38.0': + optional: true + '@rollup/rollup-linux-loongarch64-gnu@4.34.4': optional: true + '@rollup/rollup-linux-loongarch64-gnu@4.38.0': + optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.34.4': optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.38.0': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.34.4': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.38.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.38.0': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.34.4': optional: true + '@rollup/rollup-linux-s390x-gnu@4.38.0': + optional: true + '@rollup/rollup-linux-x64-gnu@4.34.4': optional: true + '@rollup/rollup-linux-x64-gnu@4.38.0': + optional: true + '@rollup/rollup-linux-x64-musl@4.34.4': optional: true + '@rollup/rollup-linux-x64-musl@4.38.0': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.34.4': optional: true + '@rollup/rollup-win32-arm64-msvc@4.38.0': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.34.4': optional: true + '@rollup/rollup-win32-ia32-msvc@4.38.0': + optional: true + '@rollup/rollup-win32-x64-msvc@4.34.4': optional: true + '@rollup/rollup-win32-x64-msvc@4.38.0': + optional: true + '@sendgrid/client@8.1.4': dependencies: '@sendgrid/helpers': 8.0.0 @@ -6331,6 +6303,8 @@ snapshots: '@types/estree@1.0.6': {} + '@types/estree@1.0.7': {} + '@types/express-serve-static-core@5.0.6': dependencies: '@types/node': 22.10.2 @@ -6524,18 +6498,18 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-basic-ssl@1.2.0(vite@6.1.0(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0))': + '@vitejs/plugin-basic-ssl@1.2.0(vite@6.2.4(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0))': dependencies: - vite: 6.1.0(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.2.4(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0) '@vitejs/plugin-vue@5.2.1(vite@5.4.14(@types/node@22.10.2)(sass@1.83.0))(vue@3.5.13(typescript@5.7.2))': dependencies: vite: 5.4.14(@types/node@22.10.2)(sass@1.83.0) vue: 3.5.13(typescript@5.7.2) - '@vitejs/plugin-vue@5.2.1(vite@6.1.0(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': + '@vitejs/plugin-vue@5.2.1(vite@6.2.4(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0))(vue@3.5.13(typescript@5.7.2))': dependencies: - vite: 6.1.0(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0) + vite: 6.2.4(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0) vue: 3.5.13(typescript@5.7.2) '@vitest/expect@0.34.6': @@ -6600,7 +6574,7 @@ snapshots: '@vue/shared': 3.5.13 estree-walker: 2.0.2 magic-string: 0.30.17 - postcss: 8.5.1 + postcss: 8.5.3 source-map-js: 1.2.1 '@vue/compiler-ssr@3.5.13': @@ -7323,31 +7297,6 @@ snapshots: dependencies: es-errors: 1.3.0 - esbuild@0.18.20: - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -7401,33 +7350,33 @@ snapshots: '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 - esbuild@0.24.2: + esbuild@0.25.2: optionalDependencies: - '@esbuild/aix-ppc64': 0.24.2 - '@esbuild/android-arm': 0.24.2 - '@esbuild/android-arm64': 0.24.2 - '@esbuild/android-x64': 0.24.2 - '@esbuild/darwin-arm64': 0.24.2 - '@esbuild/darwin-x64': 0.24.2 - '@esbuild/freebsd-arm64': 0.24.2 - '@esbuild/freebsd-x64': 0.24.2 - '@esbuild/linux-arm': 0.24.2 - '@esbuild/linux-arm64': 0.24.2 - '@esbuild/linux-ia32': 0.24.2 - '@esbuild/linux-loong64': 0.24.2 - '@esbuild/linux-mips64el': 0.24.2 - '@esbuild/linux-ppc64': 0.24.2 - '@esbuild/linux-riscv64': 0.24.2 - '@esbuild/linux-s390x': 0.24.2 - '@esbuild/linux-x64': 0.24.2 - '@esbuild/netbsd-arm64': 0.24.2 - '@esbuild/netbsd-x64': 0.24.2 - '@esbuild/openbsd-arm64': 0.24.2 - '@esbuild/openbsd-x64': 0.24.2 - '@esbuild/sunos-x64': 0.24.2 - '@esbuild/win32-arm64': 0.24.2 - '@esbuild/win32-ia32': 0.24.2 - '@esbuild/win32-x64': 0.24.2 + '@esbuild/aix-ppc64': 0.25.2 + '@esbuild/android-arm': 0.25.2 + '@esbuild/android-arm64': 0.25.2 + '@esbuild/android-x64': 0.25.2 + '@esbuild/darwin-arm64': 0.25.2 + '@esbuild/darwin-x64': 0.25.2 + '@esbuild/freebsd-arm64': 0.25.2 + '@esbuild/freebsd-x64': 0.25.2 + '@esbuild/linux-arm': 0.25.2 + '@esbuild/linux-arm64': 0.25.2 + '@esbuild/linux-ia32': 0.25.2 + '@esbuild/linux-loong64': 0.25.2 + '@esbuild/linux-mips64el': 0.25.2 + '@esbuild/linux-ppc64': 0.25.2 + '@esbuild/linux-riscv64': 0.25.2 + '@esbuild/linux-s390x': 0.25.2 + '@esbuild/linux-x64': 0.25.2 + '@esbuild/netbsd-arm64': 0.25.2 + '@esbuild/netbsd-x64': 0.25.2 + '@esbuild/openbsd-arm64': 0.25.2 + '@esbuild/openbsd-x64': 0.25.2 + '@esbuild/sunos-x64': 0.25.2 + '@esbuild/win32-arm64': 0.25.2 + '@esbuild/win32-ia32': 0.25.2 + '@esbuild/win32-x64': 0.25.2 escalade@3.2.0: {} @@ -8596,6 +8545,8 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 + nanoid@3.3.11: {} + nanoid@3.3.8: {} nanoid@5.0.9: {} @@ -8796,6 +8747,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.3: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + preact@10.25.4: {} prelude-ls@1.2.1: {} @@ -9034,10 +8991,6 @@ snapshots: rfdc@1.4.1: {} - rollup@3.29.5: - optionalDependencies: - fsevents: 2.3.3 - rollup@4.34.4: dependencies: '@types/estree': 1.0.6 @@ -9063,6 +9016,32 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.34.4 fsevents: 2.3.3 + rollup@4.38.0: + dependencies: + '@types/estree': 1.0.7 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.38.0 + '@rollup/rollup-android-arm64': 4.38.0 + '@rollup/rollup-darwin-arm64': 4.38.0 + '@rollup/rollup-darwin-x64': 4.38.0 + '@rollup/rollup-freebsd-arm64': 4.38.0 + '@rollup/rollup-freebsd-x64': 4.38.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.38.0 + '@rollup/rollup-linux-arm-musleabihf': 4.38.0 + '@rollup/rollup-linux-arm64-gnu': 4.38.0 + '@rollup/rollup-linux-arm64-musl': 4.38.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.38.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.38.0 + '@rollup/rollup-linux-riscv64-gnu': 4.38.0 + '@rollup/rollup-linux-riscv64-musl': 4.38.0 + '@rollup/rollup-linux-s390x-gnu': 4.38.0 + '@rollup/rollup-linux-x64-gnu': 4.38.0 + '@rollup/rollup-linux-x64-musl': 4.38.0 + '@rollup/rollup-win32-arm64-msvc': 4.38.0 + '@rollup/rollup-win32-ia32-msvc': 4.38.0 + '@rollup/rollup-win32-x64-msvc': 4.38.0 + fsevents: 2.3.3 + rope-sequence@1.3.4: {} run-async@3.0.0: {} @@ -9472,7 +9451,7 @@ snapshots: mlly: 1.7.3 pathe: 1.1.2 picocolors: 1.1.1 - vite: 5.4.14(@types/node@20.17.10)(sass@1.83.0) + vite: 5.4.16(@types/node@20.17.10)(sass@1.83.0) transitivePeerDependencies: - '@types/node' - less @@ -9484,41 +9463,31 @@ snapshots: - supports-color - terser - vite@4.5.6(@types/node@20.17.10)(sass@1.83.0): - dependencies: - esbuild: 0.18.20 - postcss: 8.5.1 - rollup: 3.29.5 - optionalDependencies: - '@types/node': 20.17.10 - fsevents: 2.3.3 - sass: 1.83.0 - - vite@5.4.14(@types/node@20.17.10)(sass@1.83.0): + vite@5.4.14(@types/node@22.10.2)(sass@1.83.0): dependencies: esbuild: 0.21.5 postcss: 8.5.1 rollup: 4.34.4 optionalDependencies: - '@types/node': 20.17.10 + '@types/node': 22.10.2 fsevents: 2.3.3 sass: 1.83.0 - vite@5.4.14(@types/node@22.10.2)(sass@1.83.0): + vite@5.4.16(@types/node@20.17.10)(sass@1.83.0): dependencies: esbuild: 0.21.5 - postcss: 8.5.1 - rollup: 4.34.4 + postcss: 8.5.3 + rollup: 4.38.0 optionalDependencies: - '@types/node': 22.10.2 + '@types/node': 20.17.10 fsevents: 2.3.3 sass: 1.83.0 - vite@6.1.0(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0): + vite@6.2.4(@types/node@22.10.2)(jiti@1.21.7)(sass@1.83.0)(tsx@4.19.2)(yaml@2.7.0): dependencies: - esbuild: 0.24.2 - postcss: 8.5.1 - rollup: 4.34.4 + esbuild: 0.25.2 + postcss: 8.5.3 + rollup: 4.38.0 optionalDependencies: '@types/node': 22.10.2 fsevents: 2.3.3 @@ -9527,7 +9496,7 @@ snapshots: tsx: 4.19.2 yaml: 2.7.0 - vitepress@1.6.3(@algolia/client-search@5.20.1)(@types/node@22.10.2)(axios@1.7.9)(postcss@8.5.1)(sass@1.83.0)(search-insights@2.17.3)(sortablejs@1.14.0)(typescript@5.7.2): + vitepress@1.6.3(@algolia/client-search@5.20.1)(@types/node@22.10.2)(axios@1.7.9)(postcss@8.5.3)(sass@1.83.0)(search-insights@2.17.3)(sortablejs@1.14.0)(typescript@5.7.2): dependencies: '@docsearch/css': 3.8.2 '@docsearch/js': 3.8.2(@algolia/client-search@5.20.1)(search-insights@2.17.3) @@ -9548,7 +9517,7 @@ snapshots: vite: 5.4.14(@types/node@22.10.2)(sass@1.83.0) vue: 3.5.13(typescript@5.7.2) optionalDependencies: - postcss: 8.5.1 + postcss: 8.5.3 transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -9599,7 +9568,7 @@ snapshots: strip-literal: 1.3.0 tinybench: 2.9.0 tinypool: 0.7.0 - vite: 4.5.6(@types/node@20.17.10)(sass@1.83.0) + vite: 5.4.16(@types/node@20.17.10)(sass@1.83.0) vite-node: 0.34.6(@types/node@20.17.10)(sass@1.83.0) why-is-node-running: 2.3.0 optionalDependencies: From 0ecbcb62a3d011f6cd1cf971cf32584e0caf079f Mon Sep 17 00:00:00 2001 From: Axel Rindle Date: Sat, 5 Apr 2025 17:03:40 +0200 Subject: [PATCH 04/26] group program in frontend --- apps/api/src/services/program/program.list.ts | 11 +-- .../views/Verwaltung/Program/ProgramList.vue | 83 +++++++++++++------ .../Veranstaltungen/VeranstaltungDetail.vue | 9 ++ 3 files changed, 69 insertions(+), 34 deletions(-) diff --git a/apps/api/src/services/program/program.list.ts b/apps/api/src/services/program/program.list.ts index b0fe03d1..447704f5 100644 --- a/apps/api/src/services/program/program.list.ts +++ b/apps/api/src/services/program/program.list.ts @@ -1,4 +1,3 @@ -import { groupBy } from '@codeanker/helpers' import { z } from 'zod' import prisma from '../../prisma.js' import { definePublicQueryProcedure } from '../../types/defineProcedure.js' @@ -8,8 +7,8 @@ export const programListProcedure = definePublicQueryProcedure({ inputSchema: z.strictObject({ veranstaltungId: z.number().int(), }), - handler: async ({ input }) => { - const result = await prisma.programmPunkt.findMany({ + handler: ({ input }) => + prisma.programmPunkt.findMany({ where: { veranstaltungId: input.veranstaltungId, }, @@ -24,9 +23,5 @@ export const programListProcedure = definePublicQueryProcedure({ orderBy: { startingAt: 'asc', }, - }) - - const grouped = groupBy(result, (row) => row.startingAt.getTime()) - return Object.entries(grouped).sort(([timestampA], [timestampB]) => timestampB.localeCompare(timestampA)) - }, + }), }) diff --git a/apps/frontend/src/views/Verwaltung/Program/ProgramList.vue b/apps/frontend/src/views/Verwaltung/Program/ProgramList.vue index 5e55432a..a7ddb1dd 100644 --- a/apps/frontend/src/views/Verwaltung/Program/ProgramList.vue +++ b/apps/frontend/src/views/Verwaltung/Program/ProgramList.vue @@ -1,7 +1,9 @@ diff --git a/apps/frontend/src/views/Verwaltung/Veranstaltungen/VeranstaltungDetail.vue b/apps/frontend/src/views/Verwaltung/Veranstaltungen/VeranstaltungDetail.vue index bdf4cde2..59daf35f 100644 --- a/apps/frontend/src/views/Verwaltung/Veranstaltungen/VeranstaltungDetail.vue +++ b/apps/frontend/src/views/Verwaltung/Veranstaltungen/VeranstaltungDetail.vue @@ -192,6 +192,15 @@ const files = [
+
+
+
Programmpunkte
+

+ Hier kann eine Übersicht über Programmpunkte der Veranstaltung angelegt werden. +

+
+
+ Date: Mon, 7 Apr 2025 21:08:48 +0200 Subject: [PATCH 05/26] program create form --- .../src/services/program/program.create.ts | 30 +++ .../src/services/program/program.router.ts | 2 + apps/frontend/package.json | 2 +- apps/frontend/src/assets/datepicker.scss | 240 ------------------ apps/frontend/src/assets/main.scss | 2 - .../BasicInputs/BasicDatepicker.vue | 22 +- .../Verwaltung/Program/ProgramCreate.vue | 128 ++++++++++ .../Veranstaltungen/VeranstaltungDetail.vue | 7 + .../Verwaltung/Veranstaltungen/routes.ts | 12 + pnpm-lock.yaml | 35 +-- 10 files changed, 211 insertions(+), 269 deletions(-) create mode 100644 apps/api/src/services/program/program.create.ts delete mode 100644 apps/frontend/src/assets/datepicker.scss create mode 100644 apps/frontend/src/views/Verwaltung/Program/ProgramCreate.vue diff --git a/apps/api/src/services/program/program.create.ts b/apps/api/src/services/program/program.create.ts new file mode 100644 index 00000000..7f6068c3 --- /dev/null +++ b/apps/api/src/services/program/program.create.ts @@ -0,0 +1,30 @@ +import { TRPCError } from '@trpc/server' +import dayjs from 'dayjs' +import { z } from 'zod' +import client from '../../prisma.js' +import { definePublicMutateProcedure } from '../../types/defineProcedure.js' + +export const programCreateProcedure = definePublicMutateProcedure({ + key: 'create', + inputSchema: z.strictObject({ + veranstaltungId: z.number().int(), + name: z.string(), + description: z.string(), + location: z.string(), + responsible: z.string(), + startingAt: z.date(), + endingAt: z.date(), + }), + handler: async ({ input }) => { + if (dayjs(input.endingAt).isBefore(input.startingAt)) { + throw new TRPCError({ + code: 'BAD_REQUEST', + message: 'Das Enddatum kann nicht vor dem Startdatum liegen.', + }) + } + + await client.programmPunkt.create({ + data: input, + }) + }, +}) diff --git a/apps/api/src/services/program/program.router.ts b/apps/api/src/services/program/program.router.ts index 58be9cba..68404965 100644 --- a/apps/api/src/services/program/program.router.ts +++ b/apps/api/src/services/program/program.router.ts @@ -1,12 +1,14 @@ // Prettier ignored is because this file is generated import { mergeRouters } from '../../trpc.js' import { programSearchLocationProcedure, programSearchResponsiblesProcedure } from './program.autocomplete.js' +import { programCreateProcedure } from './program.create.js' import { programListProcedure } from './program.list.js' // Import Routes here - do not delete this line export const programRouter = mergeRouters( programListProcedure, + programCreateProcedure, programSearchLocationProcedure, programSearchResponsiblesProcedure // Add Routes here - do not delete this line diff --git a/apps/frontend/package.json b/apps/frontend/package.json index 9fda9fa3..779ab545 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -32,7 +32,7 @@ "@tiptap/starter-kit": "catalog:", "@tiptap/vue-3": "catalog:", "@trpc/client": "catalog:", - "@vuepic/vue-datepicker": "^4.5.1", + "@vuepic/vue-datepicker": "^11.0.2", "@vueuse/core": "^12.5.0", "@vueuse/router": "^12.3.0", "clsx": "^2.1.1", diff --git a/apps/frontend/src/assets/datepicker.scss b/apps/frontend/src/assets/datepicker.scss deleted file mode 100644 index 359c3065..00000000 --- a/apps/frontend/src/assets/datepicker.scss +++ /dev/null @@ -1,240 +0,0 @@ -.dp__main { - @apply relative w-full; - .dp__input_wrap { - input { - @apply cursor-pointer; - } - @apply relative w-full; - .dp__icon.dp__input_icon { - @apply cursor-pointer absolute top-1/2 right-0 -translate-y-1/2 text-gray-500 w-4 h-4 mr-3 inline-block text-base; - } - .dp__icon.dp__clear_icon { - @apply cursor-pointer absolute top-1/2 right-6 -translate-y-1/2 text-gray-500 w-4 h-4 mr-3 inline-block text-base; - } - } - .dp__menu_index { - @apply z-dropdown; - } - // Ausgeklapptes Menü - .dp__menu { - @apply shadow rounded-lg bg-white absolute min-w-[260px] z-dropdown; - .dp__menu_content_wrapper { - @apply flex; - } - .dp__flex_display { - @apply flex w-full; - } - .dp__preset_ranges { - @apply border-r p-4 px-3; - .dp__preset_range { - @apply hover:bg-gray-100 rounded-lg flex items-center justify-center cursor-pointer py-2 px-3 whitespace-nowrap; - } - } - .dp__instance_calendar { - @apply w-full relative pt-0 px-0; - } - .dp__instance_calendar:not(:has(.dp__instance_calendar)) { - @apply w-full relative pt-4 px-4; - } - .dp__overlay { - @apply absolute w-full h-full bg-white rounded-lg transition-opacity top-0 left-0 z-dropdown px-4; - .dp__time_picker_overlay_container, - .dp__overlay_container { - @apply h-full flex flex-col overflow-y-auto pt-4; - &::-webkit-scrollbar { - @apply w-1 bg-white; - } - &::-webkit-scrollbar-thumb { - @apply rounded-lg bg-gray-300; - } - .dp__overlay_row { - @apply max-w-full w-full flex items-center justify-center flex-1 flex-wrap; - .dp__time_input { - @apply flex justify-center max-w-full w-full items-center; - .dp__time_col.dp__time_col_reg { - @apply text-3xl flex flex-col items-center justify-center px-4; - .dp__inc_dec_button { - @apply w-8 hover:bg-gray-100 cursor-pointer rounded-lg p-2; - } - .dp__time_display { - @apply hover:bg-gray-100 cursor-pointer rounded-lg p-2; - } - } - } - .dp__overlay_col { - @apply w-1/3 text-center; - .dp__overlay_cell { - @apply py-2 hover:bg-gray-100 cursor-pointer rounded-lg; - } - } - } - } - } - // Obere Leiste mit Jahren und Buttons - .dp__month_year_row, - .dp__month_picker_header { - @apply flex items-center w-full mb-4; - //Navigation der Monate - .dp__month_year_col_nav { - @apply order-2; - .dp__inner_nav { - @apply flex items-center justify-center cursor-pointer rounded-md transition-all hover:bg-gray-100 p-2; - .dp__icon { - @apply h-6 text-gray-400; - } - } - } - .dp__month_picker_header { - @apply justify-center; - } - // Monat und Jahr - .dp__month_year_wrap { - @apply flex w-full order-1; - } - .dp__month_year_select { - @apply text-lg px-0 hover:px-3 py-1 transition-all hover:bg-gray-100 rounded-md; - } - .dp__month_year_select:nth-of-type(1) { - @apply font-bold text-gray-900 mr-2; - } - .dp__month_year_select:nth-of-type(2) { - @apply text-gray-400; - } - // Monat / Jahr Select - .dp__overlay { - @apply absolute w-full h-full bg-white rounded-lg transition-opacity top-0 left-0 z-dropdown px-4; - .dp__overlay_container { - @apply flex flex-col overflow-y-auto pt-4; - &::-webkit-scrollbar { - @apply w-1 bg-white; - } - &::-webkit-scrollbar-thumb { - @apply rounded-lg bg-gray-300; - } - .dp__overlay_row { - @apply grid grid-cols-3 max-w-full w-full items-center; - .dp__overlay_col { - @apply w-full mb-2; - .dp__overlay_cell { - @apply cursor-pointer rounded-md text-center hover:bg-gray-100 transition-colors py-2; - } - .dp__overlay_cell_active { - @apply cursor-pointer rounded-md text-center bg-primary-500 text-white py-2; - } - } - } - } - } - } - // Kalender - .dp__calendar { - @apply w-full mb-2; - & > div { - @apply w-full; - } - .dp__calendar_wrap { - @apply w-full; - // Wochentage - .dp__calendar_header { - @apply flex relative whitespace-nowrap text-xs font-bold w-full; - .dp__calendar_header_item { - @apply w-full flex items-center justify-center rounded-full aspect-square text-gray-700 p-2; - } - } - .dp__calendar_header_separator { - } - // Tage - .dp__calendar { - @apply relative; - .dp__calendar_row { - @apply grid grid-cols-7 relative whitespace-nowrap; - .dp__calendar_item { - @apply w-full flex items-center justify-center aspect-square text-base; - .dp__cell_inner { - @apply text-gray-900 relative w-full h-full flex items-center justify-center hover:bg-gray-100 transition-colors cursor-pointer rounded-lg; - &.dp__cell_offset { - @apply text-gray-400; - } - &.dp__today { - @apply bg-primary-100 rounded-lg; - } - &.dp__date_hover_start { - @apply rounded-r-none; - } - &.dp__date_hover_end { - @apply rounded-l-none; - } - &.dp__cell_auto_range { - @apply border-gray-500 border-dashed rounded-none border-y; - } - &.dp__cell_auto_range_start { - @apply border-gray-500 border-dashed border-y border-l rounded-r-none; - } - &.dp__cell_auto_range_end { - @apply border-gray-500 border-dashed border-y border-r rounded-l-none; - } - &.dp__range_between, - &.dp__range_between_week { - @apply bg-gray-100 rounded-none; - } - &.dp__range_start { - @apply bg-primary-500 text-white rounded-r-none; - } - &.dp__range_end { - @apply bg-primary-500 text-white rounded-l-none; - } - &.dp__active_date { - @apply bg-primary-500 text-white; - } - &.dp__cell_disabled { - @apply text-gray-400 cursor-not-allowed; - } - .dp__marker_dot { - @apply w-1.5 h-1.5 rounded-full bottom-0 absolute left-1/2 -translate-x-1/2 bg-danger-400; - } - .dp__marker_line { - @apply w-full h-1.5 rounded-full bottom-0 absolute left-1/2 -translate-x-1/2 bg-danger-400; - } - .dp__marker_tooltip { - @apply absolute rounded cursor-default bg-white shadow-md p-2 px-4; - } - .dp__tooltip_content { - @apply whitespace-nowrap; - } - .dp__tooltip_text { - @apply text-gray-900 flex items-center; - } - .dp__tooltip_mark { - @apply text-gray-900 w-2 h-2 rounded-full mr-2; - } - } - } - } - } - } - } - // Zeit Button - .dp__button { - @apply hover:bg-gray-100 rounded-lg flex items-center justify-center p-2; - .dp__icon { - @apply h-6 fill-gray-400; - } - } - // select und cancel - .dp__action_row { - @apply pb-4 px-4; - .dp__selection_preview { - @apply font-bold text-center; - } - .dp__action_buttons { - @apply flex justify-end; - .dp__action.dp__cancel { - @apply px-2 py-1 cursor-pointer transition-colors hover:bg-gray-100 rounded-md text-gray-500; - } - .dp__action.dp__select { - @apply px-2 py-1 cursor-pointer transition-colors hover:bg-gray-100 rounded-md text-primary-500; - } - } - } - } -} diff --git a/apps/frontend/src/assets/main.scss b/apps/frontend/src/assets/main.scss index 9ac61135..fa7862e0 100644 --- a/apps/frontend/src/assets/main.scss +++ b/apps/frontend/src/assets/main.scss @@ -1,8 +1,6 @@ @use './animations.scss'; @use './tailwind.scss'; -// @import "@vuepic/vue-datepicker/dist/main.css"; @use './baseFormStyle.scss'; -@use './datepicker.scss'; @use './fonts.scss'; html { diff --git a/apps/frontend/src/components/BasicInputs/BasicDatepicker.vue b/apps/frontend/src/components/BasicInputs/BasicDatepicker.vue index 3965196d..f5542940 100644 --- a/apps/frontend/src/components/BasicInputs/BasicDatepicker.vue +++ b/apps/frontend/src/components/BasicInputs/BasicDatepicker.vue @@ -1,8 +1,9 @@ @@ -83,7 +95,7 @@ const { model, errorMessage } = useValidationModel(props, emit) v-model="model" :name="id || name || label" :placeholder="placeholder || label || name" - input-class-name="input-style" + :ui="{ input: 'input-style' }" :range="range" :auto-range="autoRange" :multi-calendars="multiCalendars" @@ -104,13 +116,19 @@ const { model, errorMessage } = useValidationModel(props, emit) :auto-apply="autoApply" :markers="markers" :enable-time-picker="timePicker || enableTimePicker" + :time-picker-inline="timePicker || enableTimePicker" :format="format" :model-type="modelType" :required="required" :min-date="disabledDates?.to" :max-date="disabledDates?.from" + :min-time="minTime" locale="de" />
+ + diff --git a/apps/frontend/src/views/Verwaltung/Program/ProgramCreate.vue b/apps/frontend/src/views/Verwaltung/Program/ProgramCreate.vue new file mode 100644 index 00000000..4aa6760d --- /dev/null +++ b/apps/frontend/src/views/Verwaltung/Program/ProgramCreate.vue @@ -0,0 +1,128 @@ + + + diff --git a/apps/frontend/src/views/Verwaltung/Veranstaltungen/VeranstaltungDetail.vue b/apps/frontend/src/views/Verwaltung/Veranstaltungen/VeranstaltungDetail.vue index 59daf35f..84e8227f 100644 --- a/apps/frontend/src/views/Verwaltung/Veranstaltungen/VeranstaltungDetail.vue +++ b/apps/frontend/src/views/Verwaltung/Veranstaltungen/VeranstaltungDetail.vue @@ -199,6 +199,13 @@ const files = [ Hier kann eine Übersicht über Programmpunkte der Veranstaltung angelegt werden.

+ + + Programmpunkt erstellen +
import('../Program/ProgramCreate.vue'), + meta: { + breadcrumbs: [ + { + text: 'Programmpunkt anlegen', + }, + ], + }, + }, ], }, ] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e7ed0577..75824629 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -320,8 +320,8 @@ importers: specifier: 'catalog:' version: 11.0.0-rc.682(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(typescript@5.7.2) '@vuepic/vue-datepicker': - specifier: ^4.5.1 - version: 4.5.1(vue@3.5.13(typescript@5.7.2)) + specifier: ^11.0.2 + version: 11.0.2(vue@3.5.13(typescript@5.7.2)) '@vueuse/core': specifier: ^12.5.0 version: 12.5.0(typescript@5.7.2) @@ -2330,11 +2330,11 @@ packages: '@vue/shared@3.5.13': resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} - '@vuepic/vue-datepicker@4.5.1': - resolution: {integrity: sha512-zdG37Q8iuwTPWnQEI9/WvabqmrDDfDLgdXUTW08FXHSbiHuNN2S+bVeN1Wm9yeD+onHgzEn6DiW6J3fYXEfa0Q==} - engines: {node: '>=14'} + '@vuepic/vue-datepicker@11.0.2': + resolution: {integrity: sha512-uHh78mVBXCEjam1uVfTzZ/HkyDwut/H6b2djSN9YTF+l/EA+XONfdCnOVSi1g+qVGSy65DcQAwyBNidAssnudQ==} + engines: {node: '>=18.12.0'} peerDependencies: - vue: '>=3.2.0' + vue: '>=3.3.0' '@vueuse/core@10.11.1': resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} @@ -2793,14 +2793,8 @@ packages: csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - date-fns-tz@1.3.8: - resolution: {integrity: sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ==} - peerDependencies: - date-fns: '>=2.0.0' - - date-fns@2.30.0: - resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} - engines: {node: '>=0.11'} + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} dayjs@1.11.13: resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} @@ -6688,10 +6682,9 @@ snapshots: '@vue/shared@3.5.13': {} - '@vuepic/vue-datepicker@4.5.1(vue@3.5.13(typescript@5.7.2))': + '@vuepic/vue-datepicker@11.0.2(vue@3.5.13(typescript@5.7.2))': dependencies: - date-fns: 2.30.0 - date-fns-tz: 1.3.8(date-fns@2.30.0) + date-fns: 4.1.0 vue: 3.5.13(typescript@5.7.2) '@vueuse/core@10.11.1(vue@3.5.13(typescript@5.7.2))': @@ -7161,13 +7154,7 @@ snapshots: csstype@3.1.3: {} - date-fns-tz@1.3.8(date-fns@2.30.0): - dependencies: - date-fns: 2.30.0 - - date-fns@2.30.0: - dependencies: - '@babel/runtime': 7.26.7 + date-fns@4.1.0: {} dayjs@1.11.13: {} From ad6fa0960af3a897f3e38d7860d0be99cdfe7d9b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 19:58:59 +0000 Subject: [PATCH 06/26] build(deps): bump axios from 1.7.9 to 1.8.2 Bumps [axios](https://github.com/axios/axios) from 1.7.9 to 1.8.2. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.7.9...v1.8.2) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- apps/api/package.json | 2 +- pnpm-lock.yaml | 44 +++++++++++++++++++++++++++---------------- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/apps/api/package.json b/apps/api/package.json index b78471ca..ef89e9c4 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -41,7 +41,7 @@ "@sendgrid/mail": "^8.1.0", "@trpc/server": "catalog:", "archiver": "^7.0.1", - "axios": "^1.7.7", + "axios": "^1.8.2", "config": "^3.3.9", "dayjs": "^1.11.10", "dot-prop": "^9.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 473b090d..328aec92 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -123,8 +123,8 @@ importers: specifier: ^7.0.1 version: 7.0.1 axios: - specifier: ^1.7.7 - version: 1.7.9 + specifier: ^1.8.2 + version: 1.8.2 config: specifier: ^3.3.9 version: 3.3.12 @@ -251,7 +251,7 @@ importers: dependencies: vitepress: specifier: ^1.0.0-rc.31 - version: 1.6.3(@algolia/client-search@5.20.1)(@types/node@22.10.2)(axios@1.7.9)(postcss@8.5.3)(sass@1.83.0)(search-insights@2.17.3)(sortablejs@1.14.0)(typescript@5.7.2) + version: 1.6.3(@algolia/client-search@5.20.1)(@types/node@22.10.2)(axios@1.8.2)(postcss@8.5.3)(sass@1.83.0)(search-insights@2.17.3)(sortablejs@1.14.0)(typescript@5.7.2) optionalDependencies: '@rollup/rollup-linux-arm64-gnu': specifier: ^4.8.0 @@ -2645,8 +2645,8 @@ packages: peerDependencies: postcss: ^8.1.0 - axios@1.7.9: - resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + axios@1.8.2: + resolution: {integrity: sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==} b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} @@ -3130,6 +3130,10 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + esbuild@0.21.5: resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} @@ -3317,8 +3321,8 @@ packages: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} - form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} engines: {node: '>= 6'} formidable@2.1.2: @@ -6295,7 +6299,7 @@ snapshots: '@sendgrid/client@8.1.4': dependencies: '@sendgrid/helpers': 8.0.0 - axios: 1.7.9 + axios: 1.8.2 transitivePeerDependencies: - debug @@ -6978,13 +6982,13 @@ snapshots: transitivePeerDependencies: - typescript - '@vueuse/integrations@12.5.0(axios@1.7.9)(focus-trap@7.6.4)(sortablejs@1.14.0)(typescript@5.7.2)': + '@vueuse/integrations@12.5.0(axios@1.8.2)(focus-trap@7.6.4)(sortablejs@1.14.0)(typescript@5.7.2)': dependencies: '@vueuse/core': 12.5.0(typescript@5.7.2) '@vueuse/shared': 12.5.0(typescript@5.7.2) vue: 3.5.13(typescript@5.7.2) optionalDependencies: - axios: 1.7.9 + axios: 1.8.2 focus-trap: 7.6.4 sortablejs: 1.14.0 transitivePeerDependencies: @@ -7147,10 +7151,10 @@ snapshots: postcss: 8.5.1 postcss-value-parser: 4.2.0 - axios@1.7.9: + axios@1.8.2: dependencies: follow-redirects: 1.15.9 - form-data: 4.0.1 + form-data: 4.0.2 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -7333,7 +7337,7 @@ snapshots: codeanker-sms-service@file:vendor/codeanker-service-sms-0.0.2.tar.gz: dependencies: - axios: 1.7.9 + axios: 1.8.2 transitivePeerDependencies: - debug @@ -7623,6 +7627,13 @@ snapshots: dependencies: es-errors: 1.3.0 + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + esbuild@0.21.5: optionalDependencies: '@esbuild/aix-ppc64': 0.21.5 @@ -7919,10 +7930,11 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - form-data@4.0.1: + form-data@4.0.2: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 mime-types: 2.1.35 formidable@2.1.2: @@ -9878,7 +9890,7 @@ snapshots: tsx: 4.19.2 yaml: 2.7.0 - vitepress@1.6.3(@algolia/client-search@5.20.1)(@types/node@22.10.2)(axios@1.7.9)(postcss@8.5.3)(sass@1.83.0)(search-insights@2.17.3)(sortablejs@1.14.0)(typescript@5.7.2): + vitepress@1.6.3(@algolia/client-search@5.20.1)(@types/node@22.10.2)(axios@1.8.2)(postcss@8.5.3)(sass@1.83.0)(search-insights@2.17.3)(sortablejs@1.14.0)(typescript@5.7.2): dependencies: '@docsearch/css': 3.8.2 '@docsearch/js': 3.8.2(@algolia/client-search@5.20.1)(search-insights@2.17.3) @@ -9891,7 +9903,7 @@ snapshots: '@vue/devtools-api': 7.7.1 '@vue/shared': 3.5.13 '@vueuse/core': 12.5.0(typescript@5.7.2) - '@vueuse/integrations': 12.5.0(axios@1.7.9)(focus-trap@7.6.4)(sortablejs@1.14.0)(typescript@5.7.2) + '@vueuse/integrations': 12.5.0(axios@1.8.2)(focus-trap@7.6.4)(sortablejs@1.14.0)(typescript@5.7.2) focus-trap: 7.6.4 mark.js: 8.11.1 minisearch: 7.1.1 From 765ce399ab01a9246abe1d756ecf56e1697357b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 19 Apr 2025 12:39:40 +0000 Subject: [PATCH 07/26] build(deps): bump koa from 2.16.0 to 2.16.1 Bumps [koa](https://github.com/koajs/koa) from 2.16.0 to 2.16.1. - [Release notes](https://github.com/koajs/koa/releases) - [Changelog](https://github.com/koajs/koa/blob/master/History.md) - [Commits](https://github.com/koajs/koa/compare/2.16.0...v2.16.1) --- updated-dependencies: - dependency-name: koa dependency-version: 2.16.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- apps/api/package.json | 2 +- pnpm-lock.yaml | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/apps/api/package.json b/apps/api/package.json index b78471ca..7bc63d0f 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -49,7 +49,7 @@ "grant": "^5.4.22", "handlebars": "^4.7.8", "jsonwebtoken": "^9.0.2", - "koa": "^2.16.0", + "koa": "^2.16.1", "koa-body": "^6.0.1", "koa-helmet": "^7.0.2", "koa-router": "^13.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 884aad23..4b17666c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -150,8 +150,8 @@ importers: specifier: ^9.0.2 version: 9.0.2 koa: - specifier: ^2.16.0 - version: 2.16.0 + specifier: ^2.16.1 + version: 2.16.1 koa-body: specifier: ^6.0.1 version: 6.0.1 @@ -184,7 +184,7 @@ importers: version: 2.2.2 trpc-koa-adapter: specifier: ^1.1.3 - version: 1.2.2(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(koa@2.16.0) + version: 1.2.2(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(koa@2.16.1) uuid: specifier: ^11.0.5 version: 11.0.5 @@ -3346,6 +3346,7 @@ packages: formidable@2.1.2: resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} + deprecated: 'ACTION REQUIRED: SWITCH TO v3 - v1 and v2 are VULNERABLE! v1 is DEPRECATED FOR OVER 2 YEARS! Use formidable@latest or try formidable-mini for fresh projects' frac@1.1.2: resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==} @@ -3724,8 +3725,8 @@ packages: resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} engines: {node: '>= 7.6.0'} - koa@2.16.0: - resolution: {integrity: sha512-Afhqq0Vq3W7C+/rW6IqHVBDLzqObwZ07JaUNUEF8yCQ6afiyFE3RAy+i7V0E46XOWlH7vPWn/x0vsZwNy6PWxw==} + koa@2.16.1: + resolution: {integrity: sha512-umfX9d3iuSxTQP4pnzLOz0HKnPg0FaUUIKcye2lOiz3KPu1Y3M3xlz76dISdFPQs37P9eJz1wUpcTS6KDPn9fA==} engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} kuler@2.0.0: @@ -8432,7 +8433,7 @@ snapshots: transitivePeerDependencies: - supports-color - koa@2.16.0: + koa@2.16.1: dependencies: accepts: 1.3.8 cache-content-type: 1.0.1 @@ -9742,10 +9743,10 @@ snapshots: triple-beam@1.4.1: {} - trpc-koa-adapter@1.2.2(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(koa@2.16.0): + trpc-koa-adapter@1.2.2(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(koa@2.16.1): dependencies: '@trpc/server': 11.0.0-rc.682(typescript@5.7.2) - koa: 2.16.0 + koa: 2.16.1 ts-api-utils@1.4.3(typescript@5.7.2): dependencies: From ab87bf0a0f7a52939bc6151ddf65ff908d7e410e Mon Sep 17 00:00:00 2001 From: Axel Rindle Date: Tue, 22 Apr 2025 13:37:06 +0200 Subject: [PATCH 08/26] delete old views --- .../Programm/ProgrammCreate.vue | 1 - .../Programm/ProgrammDetail.vue | 1 - .../Veranstaltungen/Programm/ProgrammList.vue | 1 - .../views/Veranstaltungen/Programm/routes.ts | 56 ------------------- .../src/views/Veranstaltungen/routes.ts | 2 - 5 files changed, 61 deletions(-) delete mode 100644 apps/frontend/src/views/Veranstaltungen/Programm/ProgrammCreate.vue delete mode 100644 apps/frontend/src/views/Veranstaltungen/Programm/ProgrammDetail.vue delete mode 100644 apps/frontend/src/views/Veranstaltungen/Programm/ProgrammList.vue delete mode 100644 apps/frontend/src/views/Veranstaltungen/Programm/routes.ts diff --git a/apps/frontend/src/views/Veranstaltungen/Programm/ProgrammCreate.vue b/apps/frontend/src/views/Veranstaltungen/Programm/ProgrammCreate.vue deleted file mode 100644 index 373b0b8b..00000000 --- a/apps/frontend/src/views/Veranstaltungen/Programm/ProgrammCreate.vue +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/frontend/src/views/Veranstaltungen/Programm/ProgrammDetail.vue b/apps/frontend/src/views/Veranstaltungen/Programm/ProgrammDetail.vue deleted file mode 100644 index 095aedd4..00000000 --- a/apps/frontend/src/views/Veranstaltungen/Programm/ProgrammDetail.vue +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/frontend/src/views/Veranstaltungen/Programm/ProgrammList.vue b/apps/frontend/src/views/Veranstaltungen/Programm/ProgrammList.vue deleted file mode 100644 index d87f663d..00000000 --- a/apps/frontend/src/views/Veranstaltungen/Programm/ProgrammList.vue +++ /dev/null @@ -1 +0,0 @@ - diff --git a/apps/frontend/src/views/Veranstaltungen/Programm/routes.ts b/apps/frontend/src/views/Veranstaltungen/Programm/routes.ts deleted file mode 100644 index c310b93e..00000000 --- a/apps/frontend/src/views/Veranstaltungen/Programm/routes.ts +++ /dev/null @@ -1,56 +0,0 @@ -import type { Route } from '@/router' - -const programmRoutes: Route[] = [ - { - name: 'VeranstaltungProgramm', - path: 'programm', - redirect: { name: 'VeranstaltungProgrammListe' }, - meta: { - breadcrumbs: [ - { - text: 'Programm', - }, - ], - }, - children: [ - { - name: 'VeranstaltungProgrammListe', - path: 'list', - component: () => import('./ProgrammList.vue'), - meta: { - breadcrumbs: [ - { - text: 'Übersicht', - }, - ], - }, - }, - { - name: 'VeranstaltungProgrammDetail', - path: ':programmId', - component: () => import('./ProgrammDetail.vue'), - meta: { - breadcrumbs: [ - { - text: 'Detail', - }, - ], - }, - }, - { - name: 'VeranstaltungProgrammErstellen', - path: 'erstellen', - component: () => import('./ProgrammCreate.vue'), - meta: { - breadcrumbs: [ - { - text: 'Erstellen', - }, - ], - }, - }, - ], - }, -] - -export default programmRoutes diff --git a/apps/frontend/src/views/Veranstaltungen/routes.ts b/apps/frontend/src/views/Veranstaltungen/routes.ts index fa658058..30c97f0f 100644 --- a/apps/frontend/src/views/Veranstaltungen/routes.ts +++ b/apps/frontend/src/views/Veranstaltungen/routes.ts @@ -1,6 +1,5 @@ import anmeldungenRoutes from './Anmeldungen/routes' import auswertungRoutes from './Auswertung/routes' -import programmRoutes from './Programm/routes' import type { Route } from '@/router' @@ -43,7 +42,6 @@ const routesVeranstaltungen: Route[] = [ }, ...anmeldungenRoutes, ...auswertungRoutes, - ...programmRoutes, ], }, ] From afc7ae31203e20b648955be9b53ab380ea1c7639 Mon Sep 17 00:00:00 2001 From: Axel Rindle Date: Tue, 22 Apr 2025 13:37:14 +0200 Subject: [PATCH 09/26] add program seeder --- apps/api/prisma/seeders/index.ts | 3 +- apps/api/prisma/seeders/programm.ts | 72 +++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 apps/api/prisma/seeders/programm.ts diff --git a/apps/api/prisma/seeders/index.ts b/apps/api/prisma/seeders/index.ts index 4d82b3a4..c4d319f1 100644 --- a/apps/api/prisma/seeders/index.ts +++ b/apps/api/prisma/seeders/index.ts @@ -8,6 +8,7 @@ import createAccount from './account.js' import createAnmeldung from './anmeldungen.js' import importGliederungen from './gliederungen.js' import createVeranstaltung from './veranstaltung.js' +import createProgramm from './programm.js' export type Seeder = (prisma: PrismaClient) => Promise @@ -17,7 +18,7 @@ const seeders: Seeder[] = (() => { return [importGliederungen] } - return [importGliederungen, createAccount, createVeranstaltung, createAnmeldung] + return [importGliederungen, createAccount, createVeranstaltung, createAnmeldung, createProgramm] })() const prisma = new PrismaClient() diff --git a/apps/api/prisma/seeders/programm.ts b/apps/api/prisma/seeders/programm.ts new file mode 100644 index 00000000..96795e98 --- /dev/null +++ b/apps/api/prisma/seeders/programm.ts @@ -0,0 +1,72 @@ +import { PrismaClient } from '@prisma/client' + +import { isProduction } from '../../src/util/is-production.js' + +import type { Seeder } from './index.js' + +import dayjs from 'dayjs' + +const createProgramm: Seeder = async (prisma: PrismaClient) => { + // create default user in development + if (isProduction()) { + return + } + + const veranstaltung = await prisma.veranstaltung.findFirst() + if (!veranstaltung) { + return + } + + await prisma.programmPunkt.createMany({ + data: [ + { + veranstaltungId: veranstaltung.id, + name: 'Eröffnungsveranstaltung', + description: 'Wir freuen uns auf die Eröffnungsveranstaltung!', + location: 'Sahara', + responsible: 'Crew', + startingAt: dayjs(veranstaltung.beginn).hour(18).minute(0).toDate(), + endingAt: dayjs(veranstaltung.beginn).hour(20).minute(0).toDate(), + }, + + { + veranstaltungId: veranstaltung.id, + name: 'Punkt 1', + location: 'Tippi', + responsible: 'AK JuKi', + startingAt: dayjs(veranstaltung.beginn).add(1, 'day').hour(8).minute(0).toDate(), + endingAt: dayjs(veranstaltung.beginn).add(1, 'day').hour(10).minute(0).toDate(), + }, + + { + veranstaltungId: veranstaltung.id, + name: 'Punkt 2', + location: 'Strand', + responsible: 'Crew', + startingAt: dayjs(veranstaltung.beginn).add(1, 'day').hour(13).minute(0).toDate(), + endingAt: dayjs(veranstaltung.beginn).add(1, 'day').hour(16).minute(0).toDate(), + }, + + { + veranstaltungId: veranstaltung.id, + name: 'Punkt 3', + location: 'Haus der Stille', + responsible: 'Adventure Camp', + startingAt: dayjs(veranstaltung.beginn).add(1, 'day').hour(8).minute(0).toDate(), + endingAt: dayjs(veranstaltung.beginn).add(1, 'day').hour(18).minute(0).toDate(), + }, + + { + veranstaltungId: veranstaltung.id, + name: 'Abschlussveranstaltung', + description: 'Wir freuen uns auf die Abschlussveranstaltung!', + location: 'Sahara', + responsible: 'Crew', + startingAt: dayjs(veranstaltung.beginn).add(2, 'day').hour(18).minute(0).toDate(), + endingAt: dayjs(veranstaltung.beginn).add(2, 'day').hour(20).minute(0).toDate(), + }, + ], + }) +} + +export default createProgramm From e1cdcf44463347803a65821c91b3d1a54e67de42 Mon Sep 17 00:00:00 2001 From: Axel Rindle Date: Tue, 22 Apr 2025 13:39:28 +0200 Subject: [PATCH 10/26] update --- .../src/services/program/program.create.ts | 5 +- .../views/Anmeldung/PublicProgrammView.vue | 24 ++++++ apps/frontend/src/views/Anmeldung/routes.ts | 10 +++ .../views/Verwaltung/Program/ProgramList.vue | 75 ++++++++++++------- 4 files changed, 84 insertions(+), 30 deletions(-) create mode 100644 apps/frontend/src/views/Anmeldung/PublicProgrammView.vue diff --git a/apps/api/src/services/program/program.create.ts b/apps/api/src/services/program/program.create.ts index 7f6068c3..c83c30d4 100644 --- a/apps/api/src/services/program/program.create.ts +++ b/apps/api/src/services/program/program.create.ts @@ -2,10 +2,11 @@ import { TRPCError } from '@trpc/server' import dayjs from 'dayjs' import { z } from 'zod' import client from '../../prisma.js' -import { definePublicMutateProcedure } from '../../types/defineProcedure.js' +import { defineProtectedMutateProcedure } from '../../types/defineProcedure.js' -export const programCreateProcedure = definePublicMutateProcedure({ +export const programCreateProcedure = defineProtectedMutateProcedure({ key: 'create', + roleIds: ['ADMIN'], inputSchema: z.strictObject({ veranstaltungId: z.number().int(), name: z.string(), diff --git a/apps/frontend/src/views/Anmeldung/PublicProgrammView.vue b/apps/frontend/src/views/Anmeldung/PublicProgrammView.vue new file mode 100644 index 00000000..e522842a --- /dev/null +++ b/apps/frontend/src/views/Anmeldung/PublicProgrammView.vue @@ -0,0 +1,24 @@ + + + diff --git a/apps/frontend/src/views/Anmeldung/routes.ts b/apps/frontend/src/views/Anmeldung/routes.ts index 97f68068..b8153a94 100644 --- a/apps/frontend/src/views/Anmeldung/routes.ts +++ b/apps/frontend/src/views/Anmeldung/routes.ts @@ -43,6 +43,16 @@ const routesAusschreibungen: Route[] = [ useFullheight: true, }, }, + { + name: 'Public Anmeldung Programm', + path: 'programm', + component: () => import('./PublicProgrammView.vue'), + meta: { + public: true, + hidePublicHeaderBgOnMobile: true, + useFullheight: true, + }, + }, ], }, ] diff --git a/apps/frontend/src/views/Verwaltung/Program/ProgramList.vue b/apps/frontend/src/views/Verwaltung/Program/ProgramList.vue index a7ddb1dd..67511f5b 100644 --- a/apps/frontend/src/views/Verwaltung/Program/ProgramList.vue +++ b/apps/frontend/src/views/Verwaltung/Program/ProgramList.vue @@ -9,10 +9,16 @@ const { veranstaltungId } = defineProps<{ veranstaltungId: number }>() +const emit = defineEmits<{ + dblclick: [] +}>() + const { state: programm } = useAsyncState(() => apiClient.program.list.query({ veranstaltungId }), undefined, { immediate: true, }) +const hasData = computed(() => (programm.value?.length ?? 0) > 0) + const programmGroups = computed(() => groupBy(programm.value ?? [], (item) => dayjs(item.startingAt).format('dddd, DD. MMMM')) ) @@ -41,38 +47,51 @@ function toggleHighlight(name: string) { -