diff --git a/.env.template b/.env.template index 270d955e9..e95404fbd 100644 --- a/.env.template +++ b/.env.template @@ -76,7 +76,8 @@ PLAYGROUND_DEV_SERVER_PORT=3750 GATEWAY_DEV_SERVER_PORT=3500 # The port to use for the Vite (full web app) development server WEB_DEV_SERVER_PORT=3000 - +# Set an arbitrary delay (in milliseconds) for all responses (useful for testing suspense) +API_RESPONSE_DELAY= # If set to 'true' and NODE_ENV === 'development', then login is automated VITE_DEV_BYPASS_AUTH=false # The username to use if VITE_DEV_BYPASS_AUTH is set to true @@ -87,6 +88,8 @@ VITE_DEV_PASSWORD=Password12345678 API_BASE_URL=http://localhost:5500 # The number of miliseconds to delay the result of HTTP requests in development VITE_DEV_NETWORK_LATENCY=0 +# Whether to force clear queries when the pathname changes +VITE_DEV_FORCE_CLEAR_QUERY_CACHE=false # Plausable analytics config (optional, set both to an empty string to disable) PLAUSIBLE_BASE_URL= PLAUSIBLE_WEB_DATA_DOMAIN= diff --git a/apps/api/Dockerfile b/apps/api/Dockerfile index 01b3d6fb2..a2c18fdbe 100644 --- a/apps/api/Dockerfile +++ b/apps/api/Dockerfile @@ -1,4 +1,4 @@ -FROM node:iron-alpine AS base +FROM node:iron AS base WORKDIR /app ARG RELEASE_VERSION ENV GATEWAY_DATABASE_URL="file:/dev/null" diff --git a/apps/api/package.json b/apps/api/package.json index 5f3579707..3fd961548 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -26,17 +26,17 @@ "@douglasneuroinformatics/libnest": "catalog:", "@douglasneuroinformatics/libpasswd": "catalog:", "@douglasneuroinformatics/libstats": "catalog:", - "@faker-js/faker": "^9.0.0", + "@faker-js/faker": "^9.4.0", "@nestjs/axios": "^3.0.3", "@nestjs/common": "^10.4.1", "@nestjs/config": "^3.2.3", "@nestjs/core": "^10.4.1", "@nestjs/jwt": "^10.2.0", - "@nestjs/mapped-types": "2.0.5", + "@nestjs/mapped-types": "2.1.0", "@nestjs/passport": "^10.0.3", "@nestjs/platform-express": "^10.4.1", "@nestjs/swagger": "^7.4.0", - "@nestjs/throttler": "^6.2.1", + "@nestjs/throttler": "^6.3.0", "@opendatacapture/demo": "workspace:*", "@opendatacapture/instrument-library": "workspace:*", "@opendatacapture/instrument-utils": "workspace:*", @@ -47,9 +47,9 @@ "@opendatacapture/subject-utils": "workspace:*", "@prisma/client": "catalog:", "axios": "catalog:", - "express": "^4.19.2", + "express": "^4.21.2", "lodash-es": "workspace:lodash-es__4.x@*", - "mongodb": "^6.8.1", + "mongodb": "^6.12.0", "passport": "^0.7.0", "passport-jwt": "4.0.1", "reflect-metadata": "^0.1.14", @@ -62,15 +62,15 @@ "@nestjs/testing": "^10.4.1", "@opendatacapture/instrument-stubs": "workspace:*", "@types/express": "^4.17.21", - "@types/passport": "^1.0.16", + "@types/passport": "^1.0.17", "@types/passport-jwt": "^4.0.1", "@types/supertest": "^6.0.2", - "concurrently": "^9.0.0", + "concurrently": "^9.1.2", "esbuild": "catalog:", "esbuild-plugin-tsc": "^0.4.0", "nodemon": "catalog:", "prisma": "catalog:", - "prisma-json-types-generator": "^3.0.4", + "prisma-json-types-generator": "^3.2.2", "supertest": "^7.0.0", "type-fest": "workspace:type-fest__4.x@*" }, diff --git a/apps/api/src/app.module.ts b/apps/api/src/app.module.ts index c7d4a6f0d..191385f48 100644 --- a/apps/api/src/app.module.ts +++ b/apps/api/src/app.module.ts @@ -1,6 +1,7 @@ import { CryptoModule } from '@douglasneuroinformatics/libnest/crypto'; import { LoggingModule } from '@douglasneuroinformatics/libnest/logging'; import { Module } from '@nestjs/common'; +import type { MiddlewareConsumer, NestModule } from '@nestjs/common'; import { APP_GUARD } from '@nestjs/core'; import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler'; @@ -10,6 +11,7 @@ import { AuthenticationGuard } from './auth/guards/authentication.guard'; import { AuthorizationGuard } from './auth/guards/authorization.guard'; import { ConfigurationModule } from './configuration/configuration.module'; import { ConfigurationService } from './configuration/configuration.service'; +import { DelayMiddleware } from './core/middleware/delay.middleware'; import { GatewayModule } from './gateway/gateway.module'; import { GroupsModule } from './groups/groups.module'; import { InstrumentsModule } from './instruments/instruments.module'; @@ -93,4 +95,13 @@ import { UsersModule } from './users/users.module'; } ] }) -export class AppModule {} +export class AppModule implements NestModule { + constructor(private readonly configurationService: ConfigurationService) {} + + configure(consumer: MiddlewareConsumer) { + const isDev = this.configurationService.get('NODE_ENV') === 'development'; + if (isDev) { + consumer.apply(DelayMiddleware).forRoutes('*'); + } + } +} diff --git a/apps/api/src/configuration/configuration.schema.ts b/apps/api/src/configuration/configuration.schema.ts index 216670f4b..93e4f8f5c 100644 --- a/apps/api/src/configuration/configuration.schema.ts +++ b/apps/api/src/configuration/configuration.schema.ts @@ -1,3 +1,4 @@ +import { isNumberLike, parseNumber } from '@douglasneuroinformatics/libjs'; import { $BooleanString } from '@opendatacapture/schemas/core'; import { z } from 'zod'; @@ -10,17 +11,27 @@ const $OptionalURL = z.preprocess( .transform((arg) => (arg ? new URL(arg) : undefined)) ); +const $ParsedNumber = (schema: TSchema) => { + return z.preprocess((arg) => { + if (!isNumberLike(arg)) { + return undefined; + } + return parseNumber(arg); + }, schema); +}; + export const $Configuration = z .object({ - API_DEV_SERVER_PORT: z.coerce.number().positive().int().optional(), - API_PROD_SERVER_PORT: z.coerce.number().positive().int().default(80), + API_DEV_SERVER_PORT: $ParsedNumber(z.number().positive().int().optional()), + API_PROD_SERVER_PORT: $ParsedNumber(z.number().positive().int().default(80)), + API_RESPONSE_DELAY: $ParsedNumber(z.number().positive().int().optional()), DANGEROUSLY_DISABLE_PBKDF2_ITERATION: $BooleanString.default(false), DEBUG: $BooleanString, GATEWAY_API_KEY: z.string().min(32), - GATEWAY_DEV_SERVER_PORT: z.coerce.number().positive().int().optional(), + GATEWAY_DEV_SERVER_PORT: $ParsedNumber(z.number().positive().int().optional()), GATEWAY_ENABLED: $BooleanString, GATEWAY_INTERNAL_NETWORK_URL: $OptionalURL, - GATEWAY_REFRESH_INTERVAL: z.coerce.number().positive().int(), + GATEWAY_REFRESH_INTERVAL: $ParsedNumber(z.number().positive().int()), GATEWAY_SITE_ADDRESS: $OptionalURL, MONGO_DIRECT_CONNECTION: z.string().optional(), MONGO_REPLICA_SET: z.string().optional(), diff --git a/apps/api/src/core/middleware/delay.middleware.ts b/apps/api/src/core/middleware/delay.middleware.ts new file mode 100644 index 000000000..b28f4e678 --- /dev/null +++ b/apps/api/src/core/middleware/delay.middleware.ts @@ -0,0 +1,18 @@ +import { Injectable, type NestMiddleware } from '@nestjs/common'; + +import { ConfigurationService } from '@/configuration/configuration.service'; + +@Injectable() +export class DelayMiddleware implements NestMiddleware { + constructor(private readonly configurationService: ConfigurationService) {} + + use(_req: any, _res: any, next: (error?: any) => void) { + const responseDelay = this.configurationService.get('API_RESPONSE_DELAY'); + if (!responseDelay) { + return next(); + } + setTimeout(() => { + next(); + }, responseDelay); + } +} diff --git a/apps/api/src/instrument-records/instrument-records.service.ts b/apps/api/src/instrument-records/instrument-records.service.ts index 0392f2533..252464952 100644 --- a/apps/api/src/instrument-records/instrument-records.service.ts +++ b/apps/api/src/instrument-records/instrument-records.service.ts @@ -11,7 +11,7 @@ import type { LinearRegressionResults, UploadInstrumentRecordsData } from '@opendatacapture/schemas/instrument-records'; -import type { InstrumentRecordModel, Prisma, SessionModel } from '@prisma/generated-client'; +import { type InstrumentRecordModel, Prisma, type SessionModel } from '@prisma/generated-client'; import { isNumber, pickBy } from 'lodash-es'; import { accessibleQuery } from '@/ability/ability.utils'; @@ -274,91 +274,84 @@ export class InstrumentRecordsService { ); } - const createdRecordsArray: InstrumentRecordModel[] = []; const createdSessionsArray: SessionModel[] = []; try { - for (let i = 0; i < records.length; i++) { - const { data: rawData, date, subjectId } = records[i]!; - await this.createSubjectIfNotFound(subjectId); - - const session = await this.sessionsService.create({ - date: date, - groupId: groupId ? groupId : null, - subjectData: { - id: subjectId - }, - type: 'RETROSPECTIVE' - }); + const preProcessedRecords = await Promise.all( + records.map(async (record) => { + const { data: rawData, date, subjectId } = record; + + // Validate data + const parseResult = instrument.validationSchema.safeParse(this.parseJson(rawData)); + if (!parseResult.success) { + console.error(parseResult.error.issues); + throw new UnprocessableEntityException( + `Data received for record does not pass validation schema of instrument '${instrument.id}'` + ); + } - createdSessionsArray.push(session); + // Ensure subject exists + await this.createSubjectIfNotFound(subjectId); - const sessionId = session.id; + const session = await this.sessionsService.create({ + date: date, + groupId: groupId ?? null, + subjectData: { id: subjectId }, + type: 'RETROSPECTIVE' + }); - const parseResult = instrument.validationSchema.safeParse(this.parseJson(rawData)); - if (!parseResult.success) { - console.error(parseResult.error.issues); - throw new UnprocessableEntityException( - `Data received for record at index '${i}' does not pass validation schema of instrument '${instrument.id}'` - ); - } + createdSessionsArray.push(session); - const createdRecord = await this.instrumentRecordModel.create({ - data: { - computedMeasures: instrument.measures - ? this.instrumentMeasuresService.computeMeasures(instrument.measures, parseResult.data) - : null, + const computedMeasures = instrument.measures + ? this.instrumentMeasuresService.computeMeasures(instrument.measures, parseResult.data) + : null; + + return { + computedMeasures, data: this.serializeData(parseResult.data), date, - group: groupId - ? { - connect: { id: groupId } - } - : undefined, - instrument: { - connect: { - id: instrumentId - } - }, - session: { - connect: { - id: sessionId - } - }, - subject: { - connect: { - id: subjectId - } - } - } - }); + groupId, + instrumentId, + sessionId: session.id, + subjectId + }; + }) + ); - createdRecordsArray.push(createdRecord); - } - } catch (err) { - await this.instrumentRecordModel.deleteMany({ + await this.instrumentRecordModel.createMany({ + data: preProcessedRecords + }); + + return this.instrumentRecordModel.findMany({ where: { - id: { - in: createdRecordsArray.map((record) => record.id) - } + groupId, + instrumentId } }); + } catch (err) { await this.sessionsService.deleteByIds(createdSessionsArray.map((session) => session.id)); throw err; } - - return createdRecordsArray; } private async createSubjectIfNotFound(subjectId: string) { try { - await this.subjectsService.findById(subjectId); + return await this.subjectsService.findById(subjectId); } catch (exception) { if (exception instanceof NotFoundException) { const addedSubject: CreateSubjectDto = { id: subjectId }; - await this.subjectsService.create(addedSubject); + try { + return await this.subjectsService.create(addedSubject); + } catch (prismaError) { + if (prismaError instanceof Prisma.PrismaClientKnownRequestError && prismaError.code === 'P2002') { + console.error(prismaError); + return await this.subjectsService.findById(subjectId); + } else { + throw prismaError; + } + } } else { throw exception; } diff --git a/apps/api/src/users/users.service.ts b/apps/api/src/users/users.service.ts index d191d5eb9..3ab00c728 100644 --- a/apps/api/src/users/users.service.ts +++ b/apps/api/src/users/users.service.ts @@ -107,9 +107,14 @@ export class UsersService { return user; } - async updateById(id: string, data: UpdateUserDto, { ability }: EntityOperationOptions = {}) { + async updateById(id: string, { groupIds, ...data }: UpdateUserDto, { ability }: EntityOperationOptions = {}) { return this.userModel.update({ - data, + data: { + ...data, + groups: { + connect: groupIds?.map((id) => ({ id })) + } + }, where: { AND: [accessibleQuery(ability, 'update', 'User')], id } }); } diff --git a/apps/gateway/Dockerfile b/apps/gateway/Dockerfile index 4fb544249..4070e2aaa 100644 --- a/apps/gateway/Dockerfile +++ b/apps/gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM node:iron-alpine AS base +FROM node:iron AS base WORKDIR /app ARG RELEASE_VERSION ENV GATEWAY_DATABASE_URL=file:/app/sqlite/gateway.db diff --git a/apps/gateway/package.json b/apps/gateway/package.json index a3fa40d6a..92c126eb7 100644 --- a/apps/gateway/package.json +++ b/apps/gateway/package.json @@ -25,10 +25,10 @@ "@opendatacapture/schemas": "workspace:*", "@prisma/client": "catalog:", "axios": "catalog:", - "compression": "^1.7.4", - "express": "^4.19.2", + "compression": "^1.7.5", + "express": "^4.21.2", "lodash-es": "workspace:lodash-es__4.x@*", - "pino-http": "^10.3.0", + "pino-http": "^10.4.0", "pino-pretty": "^11.2.2", "react": "workspace:react__18.x@*", "react-dom": "workspace:react-dom__18.x@*", @@ -42,15 +42,15 @@ "@opendatacapture/vite-plugin-runtime": "workspace:*", "@types/compression": "^1.7.5", "@types/express": "^4.17.21", - "@vitejs/plugin-react-swc": "^3.7.0", + "@vitejs/plugin-react-swc": "^3.7.2", "autoprefixer": "^10.4.20", "esbuild": "catalog:", "nodemon": "catalog:", - "postcss": "^8.4.45", + "postcss": "^8.5.1", "prisma": "catalog:", - "tailwindcss": "^3.4.10", + "tailwindcss": "^3.4.17", "type-fest": "workspace:type-fest__4.x@*", - "vite": "^5.4.3" + "vite": "catalog:" }, "trustedDependencies": [ "prisma", diff --git a/apps/outreach/package.json b/apps/outreach/package.json index afb0562fb..8f9f0c9c9 100644 --- a/apps/outreach/package.json +++ b/apps/outreach/package.json @@ -17,22 +17,22 @@ "lodash-es": "workspace:lodash-es__4.x@*", "mdast-util-to-string": "^4.0.0", "reading-time": "^1.5.0", - "tailwind-merge": "^2.5.2" + "tailwind-merge": "^2.6.0" }, "devDependencies": { - "@astrojs/check": "^0.9.3", - "@astrojs/sitemap": "^3.1.6", - "@astrojs/starlight": "^0.27.1", - "@astrojs/starlight-tailwind": "^2.0.3", - "@astrojs/tailwind": "^5.1.0", + "@astrojs/check": "^0.9.4", + "@astrojs/sitemap": "^3.2.1", + "@astrojs/starlight": "^0.31.1", + "@astrojs/starlight-tailwind": "^3.0.0", + "@astrojs/tailwind": "^5.1.5", "@opendatacapture/runtime-core": "workspace:*", - "@tailwindcss/typography": "^0.5.15", - "astro": "^4.16.1", + "@tailwindcss/typography": "^0.5.16", + "astro": "^5.1.8", "github-slugger": "^2.0.0", "sharp": "^0.33.5", - "tailwindcss": "^3.4.10", + "tailwindcss": "^3.4.17", "type-fest": "workspace:type-fest__4.x@*", - "typedoc": "^0.26.7", - "typedoc-plugin-markdown": "^4.2.7" + "typedoc": "^0.27.6", + "typedoc-plugin-markdown": "^4.4.1" } } diff --git a/apps/outreach/src/plugins/astro-plugin-symlink.ts b/apps/outreach/src/plugins/astro-plugin-symlink.ts index c447f2465..65e135b86 100644 --- a/apps/outreach/src/plugins/astro-plugin-symlink.ts +++ b/apps/outreach/src/plugins/astro-plugin-symlink.ts @@ -2,7 +2,7 @@ import fs from 'fs'; import path from 'path'; import url from 'url'; -import type { ViteUserConfig } from 'astro/config'; +import type { ViteUserConfig } from 'astro'; type PluginOption = NonNullable[number]; type Plugin = Extract; diff --git a/apps/playground/.storybook/main.cts b/apps/playground/.storybook/main.ts similarity index 91% rename from apps/playground/.storybook/main.cts rename to apps/playground/.storybook/main.ts index 2f63b0759..dd2e2fbb5 100644 --- a/apps/playground/.storybook/main.cts +++ b/apps/playground/.storybook/main.ts @@ -1,10 +1,9 @@ -import type { StorybookConfig } from '@storybook/react-vite'; - import path from 'node:path'; +import type { StorybookConfig } from '@storybook/react-vite'; import autoprefixer from 'autoprefixer'; import tailwindcss from 'tailwindcss'; -import vite from 'vite'; +import { mergeConfig } from 'vite'; const config: StorybookConfig = { addons: [ @@ -22,7 +21,7 @@ const config: StorybookConfig = { }, stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'], viteFinal(config) { - return vite.mergeConfig(config, { + return mergeConfig(config, { css: { postcss: { plugins: [autoprefixer(), tailwindcss()] diff --git a/apps/playground/package.json b/apps/playground/package.json index a36448318..5d41b6352 100644 --- a/apps/playground/package.json +++ b/apps/playground/package.json @@ -25,31 +25,31 @@ "@opendatacapture/schemas": "workspace:*", "axios": "catalog:", "esbuild-wasm": "catalog:", - "framer-motion": "^11.5.4", "immer": "^10.1.1", "jszip": "^3.10.1", "lodash-es": "workspace:lodash-es__4.x@*", - "lucide-react": "^0.439.0", + "lucide-react": "^0.473.0", "lz-string": "^1.5.0", - "monaco-editor": "^0.51.0", - "prettier": "^3.3.3", + "monaco-editor": "^0.52.2", + "motion": "^11.15.0", + "prettier": "^3.4.2", "react": "workspace:react__18.x@*", "react-dom": "workspace:react-dom__18.x@*", - "react-dropzone": "^14.2.3", + "react-dropzone": "^14.3.5", "react-error-boundary": "^4.0.13", "stacktrace-parser": "^0.1.10", "ts-pattern": "workspace:ts-pattern__5.x@*", "zod": "workspace:zod__3.23.x@*", - "zod-validation-error": "^3.3.1", + "zod-validation-error": "^3.4.0", "zustand": "^4.5.5" }, "devDependencies": { "@opendatacapture/vite-plugin-runtime": "workspace:*", - "@vitejs/plugin-react-swc": "^3.7.0", + "@vitejs/plugin-react-swc": "^3.7.2", "autoprefixer": "^10.4.20", - "postcss": "^8.4.45", - "tailwindcss": "^3.4.10", + "postcss": "^8.5.1", + "tailwindcss": "^3.4.17", "type-fest": "workspace:type-fest__4.x@*", - "vite": "^5.4.3" + "vite": "catalog:" } } diff --git a/apps/playground/src/components/Editor/Editor.tsx b/apps/playground/src/components/Editor/Editor.tsx index 29ade58a9..bb4d41d3a 100644 --- a/apps/playground/src/components/Editor/Editor.tsx +++ b/apps/playground/src/components/Editor/Editor.tsx @@ -1,8 +1,8 @@ import { useEffect, useRef, useState } from 'react'; import { extractInputFileExtension } from '@opendatacapture/instrument-bundler'; -import { motion } from 'framer-motion'; import { Columns3Icon, FilePlusIcon, FileUpIcon } from 'lucide-react'; +import { motion } from 'motion/react'; import { useShallow } from 'zustand/react/shallow'; import { useAppStore } from '@/store'; @@ -145,12 +145,14 @@ export const Editor = () => { /> { /> )) + .with('.mp4', () => ( + + + + )) .with('.html', () => ( { /> )) + .with('.json', () => ( + + + + )) .otherwise(() => ( ))} diff --git a/apps/playground/src/components/Editor/EditorPane.tsx b/apps/playground/src/components/Editor/EditorPane.tsx index ddfe85ecd..a79eee243 100644 --- a/apps/playground/src/components/Editor/EditorPane.tsx +++ b/apps/playground/src/components/Editor/EditorPane.tsx @@ -54,6 +54,7 @@ export const EditorPane = React.forwardRef(funct Object.keys(libs).forEach((filename) => { const uri = monaco.Uri.parse(filename); if (!monaco.editor.getModel(uri)) { + monaco.languages.typescript.javascriptDefaults.addExtraLib(libs[filename]!, filename); monaco.languages.typescript.typescriptDefaults.addExtraLib(libs[filename]!, filename); monaco.editor.createModel(libs[filename]!, 'typescript', uri); } @@ -135,7 +136,7 @@ export const EditorPane = React.forwardRef(funct return ( { const instruments = useAppStore((store) => store.instruments); const handleSubmit = async (files: File[]) => { - const zip = new JSZip() as JSZip & { comment?: unknown }; - await zip.loadAsync(files[0]!); - let label: string; try { - const comment = JSON.parse(String(zip.comment)) as unknown; - if (isPlainObject(comment) && typeof comment.label === 'string') { - label = comment.label; - } else { + const zip = new JSZip() as JSZip & { comment?: unknown }; + await zip.loadAsync(files[0]!); + let label: string; + try { + const comment = JSON.parse(String(zip.comment)) as unknown; + if (isPlainObject(comment) && typeof comment.label === 'string') { + label = comment.label; + } else { + label = 'Unlabeled'; + } + } catch { label = 'Unlabeled'; } - } catch { - label = 'Unlabeled'; - } - let suffixNumber = 1; - let uniqueLabel = label; - while (instruments.find((instrument) => instrument.label === uniqueLabel)) { - uniqueLabel = `${label} (${suffixNumber})`; - suffixNumber++; + let suffixNumber = 1; + let uniqueLabel = label; + while (instruments.find((instrument) => instrument.label === uniqueLabel)) { + uniqueLabel = `${label} (${suffixNumber})`; + suffixNumber++; + } + const item: InstrumentRepository = { + category: 'Saved', + files: await loadEditorFilesFromZip(zip), + id: crypto.randomUUID(), + kind: null, + label: uniqueLabel + }; + addInstrument(item); + setSelectedInstrument(item.id); + addNotification({ type: 'success' }); + } catch (err) { + console.error(err); + addNotification({ + message: 'Please refer to browser console for details', + title: 'Upload Failed', + type: 'error' + }); + } finally { + setIsDialogOpen(false); } - const item: InstrumentRepository = { - category: 'Saved', - files: await loadEditorFilesFromZip(zip), - id: crypto.randomUUID(), - kind: null, - label: uniqueLabel - }; - addInstrument(item); - setSelectedInstrument(item.id); - setIsDialogOpen(false); - addNotification({ type: 'success' }); }; return ( diff --git a/apps/playground/src/components/Viewer/ViewerErrorFallback/ToggledContent.tsx b/apps/playground/src/components/Viewer/ViewerErrorFallback/ToggledContent.tsx index 552c08a08..6f1b7188a 100644 --- a/apps/playground/src/components/Viewer/ViewerErrorFallback/ToggledContent.tsx +++ b/apps/playground/src/components/Viewer/ViewerErrorFallback/ToggledContent.tsx @@ -1,8 +1,8 @@ import React, { useState } from 'react'; import { cn } from '@douglasneuroinformatics/libui/utils'; -import { motion } from 'framer-motion'; import { ChevronUpIcon } from 'lucide-react'; +import { motion } from 'motion/react'; export const ToggledContent: React.FC<{ children: React.ReactNode; label: string }> = ({ children, label }) => { const [isOpen, setIsOpen] = useState(false); diff --git a/apps/playground/src/instruments/examples/interactive/Interactive-With-Embedded-Video/cat-video.mp4 b/apps/playground/src/instruments/examples/interactive/Interactive-With-Embedded-Video/cat-video.mp4 new file mode 100644 index 000000000..b81e0c48b Binary files /dev/null and b/apps/playground/src/instruments/examples/interactive/Interactive-With-Embedded-Video/cat-video.mp4 differ diff --git a/apps/playground/src/instruments/examples/interactive/Interactive-With-Embedded-Video/config.json b/apps/playground/src/instruments/examples/interactive/Interactive-With-Embedded-Video/config.json new file mode 100644 index 000000000..22d236862 --- /dev/null +++ b/apps/playground/src/instruments/examples/interactive/Interactive-With-Embedded-Video/config.json @@ -0,0 +1,3 @@ +{ + "timeLimit": 15 +} diff --git a/apps/playground/src/instruments/examples/interactive/Interactive-With-Embedded-Video/index.tsx b/apps/playground/src/instruments/examples/interactive/Interactive-With-Embedded-Video/index.tsx new file mode 100644 index 000000000..e4394d507 --- /dev/null +++ b/apps/playground/src/instruments/examples/interactive/Interactive-With-Embedded-Video/index.tsx @@ -0,0 +1,93 @@ +import { defineInstrument } from '/runtime/v1/@opendatacapture/runtime-core'; +import { useEffect, useState } from '/runtime/v1/react@18.x'; +import { createRoot } from '/runtime/v1/react-dom@18.x/client.js'; +import { z } from '/runtime/v1/zod@3.23.x'; + +import catVideo from './cat-video.mp4'; +import config from './config.json'; + +const Task: React.FC<{ done: (data: { success: boolean }) => void }> = ({ done }) => { + const [secondsRemaining, setSecondsRemaining] = useState(config.timeLimit); + const [value, setValue] = useState(''); + + useEffect(() => { + const interval = setInterval(() => { + setSecondsRemaining((value) => value && value - 1); + }, 1000); + return () => clearInterval(interval); + }, []); + + useEffect(() => { + if (!secondsRemaining) { + done({ success: false }); + } + }, [done, secondsRemaining]); + + useEffect(() => { + if (value.toLowerCase() === 'cat') { + done({ success: true }); + } + }, [value]); + + return ( +
+

Which animal is in the video?

+
+ + setValue(event.target.value)} /> +
+
+ Time Remaining: {secondsRemaining} +
+ +
+ ); +}; + +export default defineInstrument({ + clientDetails: { + estimatedDuration: 1, + instructions: ['Please watch the video and then answer the question.'] + }, + content: { + render(done) { + const rootElement = document.createElement('div'); + document.body.appendChild(rootElement); + const root = createRoot(rootElement); + root.render(); + } + }, + details: { + authors: ['Joshua Unrau'], + description: 'This test assesses whether a person knows what a cat is', + license: 'Apache-2.0', + title: 'Interactive With Embedded Video' + }, + internal: { + edition: 1, + name: 'CAT_VIDEO_TASK' + }, + kind: 'INTERACTIVE', + language: 'en', + measures: { + success: { + kind: 'const', + ref: 'success' + } + }, + tags: ['Interactive', 'React'], + validationSchema: z.object({ + success: z.boolean() + }) +}); diff --git a/apps/playground/src/instruments/index.ts b/apps/playground/src/instruments/index.ts index 3f406a901..78d4861e9 100644 --- a/apps/playground/src/instruments/index.ts +++ b/apps/playground/src/instruments/index.ts @@ -7,13 +7,13 @@ import { loadAssetAsBase64 } from '@/utils/load'; // Instruments in development const EXCLUDED_LABELS: string[] = []; -const textFiles: { [key: string]: string } = import.meta.glob('./**/*.{css,js,jsx,ts,tsx,svg}', { +const textFiles: { [key: string]: string } = import.meta.glob('./**/*.{css,js,jsx,json,ts,tsx,svg}', { eager: true, import: 'default', query: '?raw' }); -const binaryFiles: { [key: string]: string } = import.meta.glob('./**/*.{jpg,jpeg,png,webp}', { +const binaryFiles: { [key: string]: string } = import.meta.glob('./**/*.{jpg,jpeg,png,webp,mp4}', { eager: true, import: 'default', query: '?url' diff --git a/apps/playground/src/store/index.ts b/apps/playground/src/store/index.ts index 02bd85e28..d3321d9cf 100644 --- a/apps/playground/src/store/index.ts +++ b/apps/playground/src/store/index.ts @@ -27,6 +27,22 @@ export const useAppStore = create( })) ), { + merge: (_persistedState, currentState) => { + const persistedState = _persistedState as + | Partial> + | undefined; + const instruments = [ + ...currentState.instruments, + ...(persistedState?.instruments ?? []).filter((instrument) => { + return instrument.category === 'Saved'; + }) + ]; + const selectedInstrument = + instruments.find(({ id }) => id === persistedState?.selectedInstrument?.id) ?? + currentState.selectedInstrument; + const settings = persistedState?.settings ?? currentState.settings; + return { ...currentState, instruments, selectedInstrument, settings }; + }, name: 'app', partialize: (state) => pick(state, ['instruments', 'selectedInstrument', 'settings']), storage: createJSONStorage(() => localStorage), diff --git a/apps/playground/src/utils/file.ts b/apps/playground/src/utils/file.ts index b2272390c..6ec1c9d7e 100644 --- a/apps/playground/src/utils/file.ts +++ b/apps/playground/src/utils/file.ts @@ -4,15 +4,16 @@ import { match, P } from 'ts-pattern'; import type { EditorFile } from '@/models/editor-file.model'; -export type FileType = 'asset' | 'css' | 'html' | 'javascript' | 'typescript'; +export type FileType = 'asset' | 'css' | 'html' | 'javascript' | 'json' | 'typescript'; export function inferFileType(filename: string): FileType | null { return match(extractInputFileExtension(filename)) .with('.css', () => 'css' as const) .with(P.union('.js', '.jsx'), () => 'javascript' as const) .with(P.union('.ts', '.tsx'), () => 'typescript' as const) - .with(P.union('.jpeg', '.jpg', '.png', '.webp'), () => 'asset' as const) + .with(P.union('.jpeg', '.jpg', '.png', '.webp', '.mp4'), () => 'asset' as const) .with(P.union('.html', '.svg'), () => 'html' as const) + .with('.json', () => 'json' as const) .with(null, () => null) .exhaustive(); } @@ -30,7 +31,7 @@ export function editorFileToInput(file: EditorFile): BundlerInput { } export function isBase64EncodedFileType(filename: string) { - return ['.jpeg', '.jpg', '.png', '.webp'].includes(extractInputFileExtension(filename)!); + return ['.jpeg', '.jpg', '.mp4', '.png', '.webp'].includes(extractInputFileExtension(filename)!); } export function resolveIndexFile(files: EditorFile[]) { diff --git a/apps/playground/src/utils/load.ts b/apps/playground/src/utils/load.ts index 65b03ef81..5f670e959 100644 --- a/apps/playground/src/utils/load.ts +++ b/apps/playground/src/utils/load.ts @@ -50,9 +50,22 @@ export async function loadEditorFilesFromNative(files: File[]) { export async function loadEditorFilesFromZip(zip: JSZip) { const editorFiles: EditorFile[] = []; + + const dirs = zip.filter((_, file) => file.dir); + + if (dirs.length > 1) { + throw new Error(`Archive contains more than one directory: ${dirs.map(({ name }) => name).join(', ')}`); + } + + const basename = dirs.length ? dirs[0]!.name : ''; + for (const file of Object.values(zip.files)) { + if (file.dir) { + continue; + } + const filename = file.name.slice(basename.length, file.name.length); let content: string; - const isBase64 = isBase64EncodedFileType(file.name); + const isBase64 = isBase64EncodedFileType(filename); if (isBase64) { content = await file.async('base64'); } else { @@ -60,7 +73,7 @@ export async function loadEditorFilesFromZip(zip: JSZip) { } editorFiles.push({ content, - name: file.name + name: filename }); } return editorFiles; diff --git a/apps/web/.storybook/main.cts b/apps/web/.storybook/main.ts similarity index 90% rename from apps/web/.storybook/main.cts rename to apps/web/.storybook/main.ts index 92e20f178..04fe8e1d8 100644 --- a/apps/web/.storybook/main.cts +++ b/apps/web/.storybook/main.ts @@ -1,10 +1,9 @@ -import type { StorybookConfig } from '@storybook/react-vite'; - import path from 'node:path'; +import type { StorybookConfig } from '@storybook/react-vite'; import autoprefixer from 'autoprefixer'; import tailwindcss from 'tailwindcss'; -import vite from 'vite'; +import { mergeConfig } from 'vite'; const config: StorybookConfig = { addons: [ @@ -26,6 +25,11 @@ const config: StorybookConfig = { files: '**/*.stories.@(js|jsx|ts|tsx)', titlePrefix: 'Components' }, + { + directory: '../src/features/admin/components', + files: '**/*.stories.@(js|jsx|ts|tsx)', + titlePrefix: 'Admin' + }, { directory: '../src/features/auth/components', files: '**/*.stories.@(js|jsx|ts|tsx)', @@ -68,7 +72,7 @@ const config: StorybookConfig = { } ], viteFinal(config) { - return vite.mergeConfig(config, { + return mergeConfig(config, { css: { postcss: { plugins: [autoprefixer(), tailwindcss()] diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index d5a40accb..4c29f8d42 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -1,4 +1,4 @@ -FROM node:iron-alpine AS base +FROM node:iron AS base ARG RELEASE_VERSION WORKDIR /app ENV PNPM_HOME="/pnpm" diff --git a/apps/web/package.json b/apps/web/package.json index f4f8d2604..7bbf22719 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -20,9 +20,9 @@ "@douglasneuroinformatics/libjs": "catalog:", "@douglasneuroinformatics/libpasswd": "catalog:", "@douglasneuroinformatics/libui": "catalog:", - "@heroicons/react": "^2.1.5", - "@import-meta-env/cli": "^0.7.0", - "@import-meta-env/unplugin": "^0.6.0", + "@heroicons/react": "^2.2.0", + "@import-meta-env/cli": "^0.7.2", + "@import-meta-env/unplugin": "^0.6.2", "@opendatacapture/demo": "workspace:*", "@opendatacapture/instrument-interpreter": "workspace:*", "@opendatacapture/instrument-renderer": "workspace:*", @@ -34,23 +34,23 @@ "@opendatacapture/runtime-v1": "workspace:*", "@opendatacapture/schemas": "workspace:*", "@opendatacapture/subject-utils": "workspace:*", - "@tanstack/react-query": "^5.55.4", - "@tanstack/react-query-devtools": "^5.55.4", + "@tanstack/react-query": "^5.64.2", + "@tanstack/react-query-devtools": "^5.64.2", "axios": "catalog:", "clsx": "^2.1.1", - "framer-motion": "^11.5.4", "html2canvas": "^1.4.1", "immer": "^10.1.1", "jwt-decode": "^4.0.0", "lodash-es": "workspace:lodash-es__4.x@*", - "lucide-react": "^0.439.0", + "lucide-react": "^0.473.0", + "motion": "^11.15.0", "papaparse": "workspace:papaparse__5.x@*", "react": "workspace:react__18.x@*", "react-dom": "workspace:react-dom__18.x@*", "react-error-boundary": "^4.0.13", "react-router-dom": "^6.26.1", - "recharts": "^2.12.7", - "tailwind-merge": "^2.5.2", + "recharts": "^2.15.0", + "tailwind-merge": "^2.6.0", "ts-pattern": "workspace:ts-pattern__5.x@*", "type-fest": "workspace:type-fest__4.x@*", "xlsx": "^0.18.5", @@ -64,16 +64,16 @@ "@testing-library/jest-dom": "catalog:", "@testing-library/react": "catalog:", "@testing-library/user-event": "catalog:", - "@vitejs/plugin-react-swc": "^3.7.0", + "@vitejs/plugin-react-swc": "^3.7.2", "autoprefixer": "^10.4.20", "esbuild-wasm": "catalog:", "happy-dom": "catalog:", - "postcss": "^8.4.45", + "postcss": "^8.5.1", "prop-types": "^15.8.1", "rollup-plugin-copy": "^3.5.0", "sort-json": "^2.0.1", - "tailwindcss": "^3.4.10", - "vite": "^5.4.3", + "tailwindcss": "^3.4.17", + "vite": "catalog:", "vite-plugin-compression": "^0.5.1" } } diff --git a/apps/web/src/App.tsx b/apps/web/src/App.tsx index e0b9d1a46..612c2685b 100644 --- a/apps/web/src/App.tsx +++ b/apps/web/src/App.tsx @@ -8,10 +8,11 @@ import { ErrorBoundary } from 'react-error-boundary'; import { BrowserRouter } from 'react-router-dom'; import { LoadingFallback } from '@/components/LoadingFallback'; -import { SetupProvider } from '@/features/setup'; import { Routes } from '@/Routes'; import { queryClient } from '@/services/react-query'; +import { SetupProvider } from './features/setup'; + import './services/axios'; import './services/i18n'; import './services/zod'; diff --git a/apps/web/src/Routes.tsx b/apps/web/src/Routes.tsx index bb495c618..0b8f28270 100644 --- a/apps/web/src/Routes.tsx +++ b/apps/web/src/Routes.tsx @@ -16,6 +16,7 @@ import { sessionRoute } from './features/session'; import { uploadRoute } from './features/upload'; import { userRoute } from './features/user'; import { DisclaimerProvider } from './providers/DisclaimerProvider'; +import { ForceClearQueryCacheProvider } from './providers/ForceClearQueryCacheProvider'; import { WalkthroughProvider } from './providers/WalkthroughProvider'; import { useAppStore } from './store'; @@ -33,7 +34,9 @@ const protectedRoutes: RouteObject[] = [ element: ( - + + + ), diff --git a/apps/web/src/components/IdentificationForm/IdentificationForm.tsx b/apps/web/src/components/IdentificationForm/IdentificationForm.tsx index 87ecf4979..8437025da 100644 --- a/apps/web/src/components/IdentificationForm/IdentificationForm.tsx +++ b/apps/web/src/components/IdentificationForm/IdentificationForm.tsx @@ -20,6 +20,7 @@ export const IdentificationForm = ({ onSubmit }: IdentificationFormProps) => { return (
( + props: TProps +): props is TProps & { data: NonNullable } { + return !(props.data === null || props.data === undefined); +} + +export function WithFallback({ + Component, + minDelay = 300, // ms + props +}: { + Component: React.FC; + /** the minimum duration to suspend in ms */ + minDelay?: number; + props: TProps extends { data: infer TData extends NonNullable } + ? Omit & { data: null | TData | undefined } + : never; +}) { + // if the data is not initially ready, set a min delay + const [isMinDelayComplete, setIsMinDelayComplete] = useState(isDataReady(props)); + + useEffect(() => { + let timeout: ReturnType; + if (!isMinDelayComplete) { + timeout = setTimeout(() => { + setIsMinDelayComplete(true); + }, minDelay); + } + return () => clearTimeout(timeout); + }, []); + + return isMinDelayComplete && isDataReady(props) ? ( + + ) : ( + + ); +} diff --git a/apps/web/src/config.ts b/apps/web/src/config.ts index 9a15ac6ea..004da398d 100644 --- a/apps/web/src/config.ts +++ b/apps/web/src/config.ts @@ -11,6 +11,7 @@ const $Config = z.object({ .optional(), dev: z.object({ isBypassAuthEnabled: $BooleanString.optional(), + isForceClearQueryCacheEnabled: $BooleanString.optional(), networkLatency: z.coerce.number().int().nonnegative().optional(), password: z.string().min(1).optional(), username: z.string().min(1).optional() @@ -38,6 +39,7 @@ export const config = await $Config : undefined, dev: { isBypassAuthEnabled: import.meta.env.VITE_DEV_BYPASS_AUTH, + isForceClearQueryCacheEnabled: import.meta.env.VITE_DEV_FORCE_CLEAR_QUERY_CACHE, networkLatency: import.meta.env.VITE_DEV_NETWORK_LATENCY, password: import.meta.env.VITE_DEV_PASSWORD, username: import.meta.env.VITE_DEV_USERNAME diff --git a/apps/web/src/features/admin/components/UpdateUserForm.stories.tsx b/apps/web/src/features/admin/components/UpdateUserForm.stories.tsx new file mode 100644 index 000000000..145142d37 --- /dev/null +++ b/apps/web/src/features/admin/components/UpdateUserForm.stories.tsx @@ -0,0 +1,26 @@ +import type { Meta, StoryObj } from '@storybook/react'; + +import { UpdateUserForm } from './UpdateUserForm'; + +type Story = StoryObj; + +export default { component: UpdateUserForm } as Meta; + +export const Default: Story = { + args: { + data: { + disableDelete: false, + groupOptions: {}, + initialValues: { + additionalPermissions: [ + { + action: 'create', + subject: 'User' + } + ] + } + }, + onDelete: () => alert('Delete!'), + onSubmit: (data) => alert(JSON.stringify({ data })) + } +}; diff --git a/apps/web/src/features/admin/components/UpdateUserForm.tsx b/apps/web/src/features/admin/components/UpdateUserForm.tsx new file mode 100644 index 000000000..d86cab693 --- /dev/null +++ b/apps/web/src/features/admin/components/UpdateUserForm.tsx @@ -0,0 +1,181 @@ +import { isAllUndefined } from '@douglasneuroinformatics/libjs'; +import { Button, Form } from '@douglasneuroinformatics/libui/components'; +import { useTranslation } from '@douglasneuroinformatics/libui/hooks'; +import type { FormTypes } from '@opendatacapture/runtime-core'; +import { $UserPermission, type UserPermission } from '@opendatacapture/schemas/user'; +import type { Promisable } from 'type-fest'; +import { z } from 'zod'; + +const $UpdateUserFormData = z + .object({ + additionalPermissions: z.array($UserPermission.partial()).optional(), + groupIds: z.set(z.string()) + }) + .transform((arg) => { + const firstPermission = arg.additionalPermissions?.[0]; + if (firstPermission && isAllUndefined(firstPermission)) { + arg.additionalPermissions?.pop(); + } + return arg; + }) + .superRefine((arg, ctx) => { + arg.additionalPermissions?.forEach((permission, i) => { + Object.entries(permission).forEach(([key, val]) => { + if ((val satisfies string) === undefined) { + ctx.addIssue({ + code: z.ZodIssueCode.invalid_type, + expected: 'string', + path: ['additionalPermissions', i, key], + received: 'undefined' + }); + } + }); + }); + }); + +type UpdateUserFormData = z.infer; + +export type UpdateUserFormInputData = { + disableDelete: boolean; + groupOptions: { + [id: string]: string; + }; + initialValues?: FormTypes.PartialNullableData; +}; + +export const UpdateUserForm: React.FC<{ + data: UpdateUserFormInputData; + onDelete: () => void; + onSubmit: (data: UpdateUserFormData & { additionalPermissions?: UserPermission[] }) => Promisable; +}> = ({ data, onDelete, onSubmit }) => { + const { disableDelete, groupOptions, initialValues } = data; + const { t } = useTranslation(); + + return ( + + {t('core.delete')} + + ) + }} + content={[ + { + description: t({ + en: 'IMPORTANT: These permissions are not specific to any group. To manage granular permissions, please use the API.', + fr: "IMPORTANT : Ces autorisations ne sont pas spécifiques à un groupe. Pour gérer des autorisations granulaires, veuillez utiliser l'API." + }), + fields: { + additionalPermissions: { + fieldset: { + action: { + kind: 'string', + label: t({ + en: 'Action', + fr: 'Action' + }), + options: { + create: t({ + en: 'Create', + fr: 'Créer' + }), + delete: t({ + en: 'Delete', + fr: 'Effacer' + }), + manage: t({ + en: 'Manage (All)', + fr: 'Gérer (Tout)' + }), + read: t({ + en: 'Read', + fr: 'Lire' + }), + update: t({ + en: 'Update', + fr: 'Mettre à jour' + }) + }, + variant: 'select' + }, + subject: { + kind: 'string', + label: t({ + en: 'Resource', + fr: 'Resource' + }), + options: { + all: t({ + en: 'All', + fr: 'Tous' + }), + Assignment: t({ + en: 'Assignment', + fr: 'Devoir' + }), + Group: t({ + en: 'Group', + fr: 'Groupe' + }), + Instrument: t({ + en: 'Instrument', + fr: 'Instrument' + }), + InstrumentRecord: t({ + en: 'Instrument Record', + fr: "Enregistrement de l'instrument" + }), + Session: t({ + en: 'Session', + fr: 'Session' + }), + Subject: t({ + en: 'Subject', + fr: 'Client' + }), + User: t({ + en: 'User', + fr: 'Utilisateur' + }) + }, + variant: 'select' + } + }, + kind: 'record-array', + label: t({ + en: 'Permission', + fr: 'Autorisations supplémentaires' + }) + } + }, + title: t({ + en: 'Authorization', + fr: 'Autorisation' + }) + }, + { + fields: { + groupIds: { + kind: 'set', + label: 'Group IDs', + options: groupOptions, + variant: 'listbox' + } + }, + title: t({ + en: 'Groups', + fr: 'Groupes' + }) + } + ]} + initialValues={initialValues} + key={JSON.stringify(initialValues)} + submitBtnLabel={t('core.save')} + validationSchema={$UpdateUserFormData} + onSubmit={({ additionalPermissions, ...data }) => + onSubmit({ additionalPermissions: additionalPermissions as undefined | UserPermission[], ...data }) + } + /> + ); +}; diff --git a/apps/web/src/features/admin/pages/ManageUsersPage.tsx b/apps/web/src/features/admin/pages/ManageUsersPage.tsx index b92f963e0..9ef5aa23d 100644 --- a/apps/web/src/features/admin/pages/ManageUsersPage.tsx +++ b/apps/web/src/features/admin/pages/ManageUsersPage.tsx @@ -1,31 +1,50 @@ -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import { snakeToCamelCase } from '@douglasneuroinformatics/libjs'; -import { Button, ClientTable, Form, Heading, SearchBar, Sheet } from '@douglasneuroinformatics/libui/components'; +import { Button, ClientTable, Heading, SearchBar, Sheet } from '@douglasneuroinformatics/libui/components'; import { useTranslation } from '@douglasneuroinformatics/libui/hooks'; -import { $UpdateUserData, type User } from '@opendatacapture/schemas/user'; +import type { User } from '@opendatacapture/schemas/user'; import { Link } from 'react-router-dom'; import { PageHeader } from '@/components/PageHeader'; +import { WithFallback } from '@/components/WithFallback'; import { useSearch } from '@/hooks/useSearch'; -import { useSetupState } from '@/hooks/useSetupState'; import { useAppStore } from '@/store'; +import { UpdateUserForm, type UpdateUserFormInputData } from '../components/UpdateUserForm'; import { useDeleteUserMutation } from '../hooks/useDeleteUserMutation'; +import { useGroupsQuery } from '../hooks/useGroupsQuery'; import { useUpdateUserMutation } from '../hooks/useUpdateUserMutation'; import { useUsersQuery } from '../hooks/useUsersQuery'; export const ManageUsersPage = () => { const currentUser = useAppStore((store) => store.currentUser); const { t } = useTranslation(); + const groupsQuery = useGroupsQuery(); const usersQuery = useUsersQuery(); const deleteUserMutation = useDeleteUserMutation(); const updateUserMutation = useUpdateUserMutation(); const [selectedUser, setSelectedUser] = useState(null); const { filteredData, searchTerm, setSearchTerm } = useSearch(usersQuery.data ?? [], 'username'); - const setupStateQuery = useSetupState(); - const currentUserIsSelected = selectedUser?.username === currentUser?.username; + const [data, setData] = useState(null); + + useEffect(() => { + const groups = groupsQuery.data; + if (!selectedUser || !groups) { + setData(null); + } else { + setData({ + disableDelete: selectedUser?.username === currentUser?.username, + groupOptions: Object.fromEntries(groups.map((group) => [group.id, group.name])), + initialValues: selectedUser?.additionalPermissions.length + ? { + additionalPermissions: selectedUser.additionalPermissions + } + : undefined + }); + } + }, [groupsQuery.data, selectedUser]); return ( setSelectedUser(null)}> @@ -80,8 +99,8 @@ export const ManageUsersPage = () => { minRows={15} onEntryClick={setSelectedUser} /> - - + + {selectedUser?.username} {t({ @@ -90,124 +109,25 @@ export const ManageUsersPage = () => { })} - - {setupStateQuery.data?.isExperimentalFeaturesEnabled && ( - { - deleteUserMutation.mutate({ id: selectedUser!.id }); - setSelectedUser(null); - }} - > - {t('core.delete')} - - ) - }} - content={{ - additionalPermissions: { - fieldset: { - action: { - kind: 'string', - label: t({ - en: 'Action', - fr: 'Action' - }), - options: { - create: t({ - en: 'Create', - fr: 'Créer' - }), - delete: t({ - en: 'Delete', - fr: 'Effacer' - }), - manage: t({ - en: 'Manage (All)', - fr: 'Gérer (Tout)' - }), - read: t({ - en: 'Read', - fr: 'Lire' - }), - update: t({ - en: 'Update', - fr: 'Mettre à jour' - }) - }, - variant: 'select' - }, - subject: { - kind: 'string', - label: t({ - en: 'Resource', - fr: 'Resource' - }), - options: { - all: t({ - en: 'All', - fr: 'Tous' - }), - Assignment: t({ - en: 'Assignment', - fr: 'Devoir' - }), - Group: t({ - en: 'Group', - fr: 'Groupe' - }), - Instrument: t({ - en: 'Instrument', - fr: 'Instrument' - }), - InstrumentRecord: t({ - en: 'Instrument Record', - fr: "Enregistrement de l'instrument" - }), - Session: t({ - en: 'Session', - fr: 'Session' - }), - Subject: t({ - en: 'Subject', - fr: 'Client' - }), - User: t({ - en: 'User', - fr: 'Utilisateur' - }) - }, - variant: 'select' - } - }, - kind: 'record-array', - label: t({ - en: 'Permission', - fr: 'Autorisations supplémentaires' - }) - } - }} - initialValues={ - selectedUser?.additionalPermissions.length - ? { - additionalPermissions: selectedUser.additionalPermissions - } - : undefined + + { + deleteUserMutation.mutate({ id: selectedUser!.id }); + setSelectedUser(null); + }, + onSubmit: ({ groupIds, ...data }) => { + void updateUserMutation + .mutateAsync({ data: { groupIds: Array.from(groupIds), ...data }, id: selectedUser!.id }) + .then(() => { + setSelectedUser(null); + }); } - submitBtnLabel={t('core.save')} - validationSchema={$UpdateUserData.pick({ additionalPermissions: true }).required()} - onSubmit={(data) => { - void updateUserMutation.mutateAsync({ data, id: selectedUser!.id }).then(() => { - setSelectedUser(null); - }); - }} - /> - )} + }} + /> diff --git a/apps/web/src/features/dashboard/components/StatisticCard.tsx b/apps/web/src/features/dashboard/components/StatisticCard.tsx index b753c96b4..cf580e618 100644 --- a/apps/web/src/features/dashboard/components/StatisticCard.tsx +++ b/apps/web/src/features/dashboard/components/StatisticCard.tsx @@ -1,7 +1,7 @@ import { useEffect } from 'react'; import { Card } from '@douglasneuroinformatics/libui/components'; -import { motion, useSpring, useTransform } from 'framer-motion'; +import { motion, useSpring, useTransform } from 'motion/react'; type StatisticCardProps = { icon?: JSX.Element; diff --git a/apps/web/src/features/dashboard/components/Summary.tsx b/apps/web/src/features/dashboard/components/Summary.tsx index 365aa7802..234c60de6 100644 --- a/apps/web/src/features/dashboard/components/Summary.tsx +++ b/apps/web/src/features/dashboard/components/Summary.tsx @@ -1,7 +1,8 @@ import { useTranslation } from '@douglasneuroinformatics/libui/hooks'; import { ClipboardDocumentIcon, DocumentTextIcon, UserIcon, UsersIcon } from '@heroicons/react/24/solid'; +import type { Summary as SummaryType } from '@opendatacapture/schemas/summary'; -import { LoadingFallback } from '@/components/LoadingFallback'; +import { WithFallback } from '@/components/WithFallback'; import { useAppStore } from '@/store'; import { StatisticCard } from '../components/StatisticCard'; @@ -17,46 +18,49 @@ export const Summary = () => { } }); - if (!summaryQuery.data) { - return ; - } - return ( -
-
- } - label={t({ - en: 'Total Users', - fr: "Nombre d'utilisateurs" - })} - value={summaryQuery.data.counts.users} - /> - } - label={t({ - en: 'Total Subjects', - fr: 'Nombre de clients' - })} - value={summaryQuery.data.counts.subjects} - /> - } - label={t({ - en: 'Total Instruments', - fr: "Nombre d'instruments" - })} - value={summaryQuery.data.counts.instruments} - /> - } - label={t({ - en: 'Total Records', - fr: "Nombre d'enregistrements" - })} - value={summaryQuery.data.counts.records} - /> -
-
+ ( +
+
+ } + label={t({ + en: 'Total Users', + fr: "Nombre d'utilisateurs" + })} + value={data.counts.users} + /> + } + label={t({ + en: 'Total Subjects', + fr: 'Nombre de clients' + })} + value={data.counts.subjects} + /> + } + label={t({ + en: 'Total Instruments', + fr: "Nombre d'instruments" + })} + value={data.counts.instruments} + /> + } + label={t({ + en: 'Total Records', + fr: "Nombre d'enregistrements" + })} + value={data.counts.records} + /> +
+
+ )} + props={{ + data: summaryQuery.data + }} + /> ); }; diff --git a/apps/web/src/features/datahub/pages/DataHubPage.tsx b/apps/web/src/features/datahub/pages/DataHubPage.tsx index c49bc042b..1bf1ba32f 100644 --- a/apps/web/src/features/datahub/pages/DataHubPage.tsx +++ b/apps/web/src/features/datahub/pages/DataHubPage.tsx @@ -12,6 +12,7 @@ import { useNavigate } from 'react-router-dom'; import { IdentificationForm } from '@/components/IdentificationForm'; import { LoadingFallback } from '@/components/LoadingFallback'; import { PageHeader } from '@/components/PageHeader'; +import { WithFallback } from '@/components/WithFallback'; import { useAppStore } from '@/store'; import { downloadExcel } from '@/utils/excel'; @@ -42,25 +43,20 @@ export const DataHubPage = () => { const handleExportSelection = (option: 'CSV' | 'Excel' | 'JSON') => { const baseFilename = `${currentUser!.username}_${new Date().toISOString()}`; - switch (option) { - case 'CSV': - void download('README.txt', () => t('datahub.index.table.exportHelpText')); - void download(`${baseFilename}.csv`, async () => { - const data = await getExportRecords(); - return unparse(data); - }); - break; - case 'JSON': - void download(`${baseFilename}.json`, async () => { - const data = await getExportRecords(); - return JSON.stringify(data, null, 2); - }); - break; - case 'Excel': - getExportRecords() - .then((records) => downloadExcel(`${baseFilename}.xlsx`, records)) - .catch(console.error); - } + getExportRecords() + .then((data): any => { + switch (option) { + case 'CSV': + void download('README.txt', t('datahub.index.table.exportHelpText')); + void download(`${baseFilename}.csv`, unparse(data)); + break; + case 'Excel': + return downloadExcel(`${baseFilename}.xlsx`, data); + case 'JSON': + return download(`${baseFilename}.json`, JSON.stringify(data, null, 2)); + } + }) + .catch(console.error); }; const lookupSubject = async ({ id }: { id: string }) => { @@ -84,7 +80,7 @@ export const DataHubPage = () => { }> -
+
@@ -115,10 +111,13 @@ export const DataHubPage = () => { />
- { - navigate(`${subject.id}/assignments`); + { + navigate(`${subject.id}/assignments`); + } }} />
diff --git a/apps/web/src/features/datahub/pages/SubjectAssignmentsPage.tsx b/apps/web/src/features/datahub/pages/SubjectAssignmentsPage.tsx index 26fda9bfa..9036229ba 100644 --- a/apps/web/src/features/datahub/pages/SubjectAssignmentsPage.tsx +++ b/apps/web/src/features/datahub/pages/SubjectAssignmentsPage.tsx @@ -77,6 +77,7 @@ export const SubjectAssignmentsPage = () => { {t('datahub.assignments.addAssignmentDesc')} { instrumentId: z.string() }) satisfies z.ZodType> } - onSubmit={(data) => { - createAssignmentMutation.mutate({ + onSubmit={async (data) => { + await createAssignmentMutation.mutateAsync({ data: { ...data, groupId: currentGroup?.id, subjectId: params.subjectId! } }); setIsCreateModalOpen(false); diff --git a/apps/web/src/features/group/components/ManageGroupForm.tsx b/apps/web/src/features/group/components/ManageGroupForm.tsx index 329291aae..2f8c17a2a 100644 --- a/apps/web/src/features/group/components/ManageGroupForm.tsx +++ b/apps/web/src/features/group/components/ManageGroupForm.tsx @@ -14,23 +14,21 @@ export type AvailableInstrumentOptions = { }; export type ManageGroupFormProps = { - availableInstrumentOptions: AvailableInstrumentOptions; - initialValues: { - accessibleFormInstrumentIds: Set; - accessibleInteractiveInstrumentIds: Set; - defaultIdentificationMethod?: SubjectIdentificationMethod; - idValidationRegex?: null | string; + data: { + availableInstrumentOptions: AvailableInstrumentOptions; + initialValues: { + accessibleFormInstrumentIds: Set; + accessibleInteractiveInstrumentIds: Set; + defaultIdentificationMethod?: SubjectIdentificationMethod; + idValidationRegex?: null | string; + }; }; onSubmit: (data: Partial) => Promisable; readOnly: boolean; }; -export const ManageGroupForm = ({ - availableInstrumentOptions, - initialValues, - onSubmit, - readOnly -}: ManageGroupFormProps) => { +export const ManageGroupForm = ({ data, onSubmit, readOnly }: ManageGroupFormProps) => { + const { availableInstrumentOptions, initialValues } = data; const { t } = useTranslation(); let description = t('group.manage.accessibleInstrumentsDesc'); diff --git a/apps/web/src/features/group/pages/ManageGroupPage.tsx b/apps/web/src/features/group/pages/ManageGroupPage.tsx index a0389502b..90bc12eee 100644 --- a/apps/web/src/features/group/pages/ManageGroupPage.tsx +++ b/apps/web/src/features/group/pages/ManageGroupPage.tsx @@ -4,6 +4,7 @@ import { Heading } from '@douglasneuroinformatics/libui/components'; import { useTranslation } from '@douglasneuroinformatics/libui/hooks'; import { PageHeader } from '@/components/PageHeader'; +import { WithFallback } from '@/components/WithFallback'; import { useInstrumentInfoQuery } from '@/hooks/useInstrumentInfoQuery'; import { useSetupState } from '@/hooks/useSetupState'; import { useAppStore } from '@/store'; @@ -19,12 +20,15 @@ export const ManageGroupPage = () => { const changeGroup = useAppStore((store) => store.changeGroup); const setupState = useSetupState(); - const availableInstruments = instrumentInfoQuery.data ?? []; + const availableInstruments = instrumentInfoQuery.data; const accessibleInstrumentIds = currentGroup?.accessibleInstrumentIds; const defaultIdentificationMethod = currentGroup?.settings.defaultIdentificationMethod; - const { availableInstrumentOptions, initialValues } = useMemo(() => { + const data = useMemo(() => { + if (!availableInstruments) { + return null; + } const availableInstrumentOptions: AvailableInstrumentOptions = { form: {}, interactive: {}, @@ -69,14 +73,15 @@ export const ManageGroupPage = () => { {t('manage.pageTitle')} - - { - const updatedGroup = await updateGroupMutation.mutateAsync(data); - changeGroup(updatedGroup); + { + const updatedGroup = await updateGroupMutation.mutateAsync(data); + changeGroup(updatedGroup); + }, + readOnly: Boolean(setupState.data?.isDemo && import.meta.env.PROD) }} /> diff --git a/apps/web/src/features/instruments/components/InstrumentCard/InstrumentCard.tsx b/apps/web/src/features/instruments/components/InstrumentCard/InstrumentCard.tsx index ae9c7bdd6..9f304b088 100644 --- a/apps/web/src/features/instruments/components/InstrumentCard/InstrumentCard.tsx +++ b/apps/web/src/features/instruments/components/InstrumentCard/InstrumentCard.tsx @@ -1,9 +1,8 @@ import { Card, Heading, Tooltip } from '@douglasneuroinformatics/libui/components'; import { useTranslation } from '@douglasneuroinformatics/libui/hooks'; -import type { Language } from '@douglasneuroinformatics/libui/i18n'; import { licenses } from '@opendatacapture/licenses'; import { InstrumentIcon } from '@opendatacapture/react-core'; -import type { UnilingualInstrumentInfo } from '@opendatacapture/schemas/instrument'; +import type { TranslatedInstrumentInfo } from '@opendatacapture/schemas/instrument'; import { BadgeAlertIcon, BadgeCheckIcon } from 'lucide-react'; type BaseCardItem = { label: string; tooltip?: React.ReactNode }; @@ -15,9 +14,7 @@ type TextCardItem = BaseCardItem & { kind: 'text'; text?: string }; type CardItem = LinkCardItem | TextCardItem; export type InstrumentCardProps = { - instrument: UnilingualInstrumentInfo & { - supportedLanguages: Language[]; - }; + instrument: TranslatedInstrumentInfo; onClick: () => void; }; @@ -129,9 +126,7 @@ export const InstrumentCard = ({ instrument, onClick }: InstrumentCardProps) =>
- - {instrument.details.title} - + {instrument.details.title}
{content.map((item) => { if (item.kind === 'link' && !item.href) { diff --git a/apps/web/src/features/instruments/components/InstrumentShowcase/InstrumentKindDropdown.tsx b/apps/web/src/features/instruments/components/InstrumentShowcase/InstrumentKindDropdown.tsx new file mode 100644 index 000000000..966037fa9 --- /dev/null +++ b/apps/web/src/features/instruments/components/InstrumentShowcase/InstrumentKindDropdown.tsx @@ -0,0 +1,48 @@ +import { ListboxDropdown } from '@douglasneuroinformatics/libui/components'; +import { useTranslation } from '@douglasneuroinformatics/libui/hooks'; +import type { InstrumentKind } from '@opendatacapture/runtime-core'; + +export type InstrumentShowcaseKindOption = { + key: InstrumentKind; + label: string; +}; + +export const InstrumentKindDropdown: React.FC<{ + selected: InstrumentShowcaseKindOption[]; + setSelected: React.Dispatch>; +}> = ({ selected, setSelected }) => { + const { t } = useTranslation(); + return ( + + ); +}; diff --git a/apps/web/src/features/instruments/components/InstrumentShowcase/InstrumentLanguageDropdown.tsx b/apps/web/src/features/instruments/components/InstrumentShowcase/InstrumentLanguageDropdown.tsx new file mode 100644 index 000000000..402434a1b --- /dev/null +++ b/apps/web/src/features/instruments/components/InstrumentShowcase/InstrumentLanguageDropdown.tsx @@ -0,0 +1,33 @@ +import { ListboxDropdown } from '@douglasneuroinformatics/libui/components'; +import { useTranslation } from '@douglasneuroinformatics/libui/hooks'; +import type { Language } from '@opendatacapture/runtime-core'; + +export type InstrumentShowcaseLanguageOption = { + key: Language; + label: string; +}; + +export const InstrumentLanguageDropdown: React.FC<{ + selected: InstrumentShowcaseLanguageOption[]; + setSelected: React.Dispatch>; +}> = ({ selected, setSelected }) => { + const { t } = useTranslation(); + return ( + + ); +}; diff --git a/apps/web/src/features/instruments/components/InstrumentShowcase/InstrumentShowcase.stories.tsx b/apps/web/src/features/instruments/components/InstrumentShowcase/InstrumentShowcase.stories.tsx new file mode 100644 index 000000000..9ea10f0f8 --- /dev/null +++ b/apps/web/src/features/instruments/components/InstrumentShowcase/InstrumentShowcase.stories.tsx @@ -0,0 +1,19 @@ +import * as forms from '@opendatacapture/instrument-stubs/forms'; +import * as interactive from '@opendatacapture/instrument-stubs/interactive'; +import * as series from '@opendatacapture/instrument-stubs/series'; +import { translateInstrumentInfo } from '@opendatacapture/instrument-utils'; +import type { Meta, StoryObj } from '@storybook/react'; + +import { InstrumentShowcase } from './InstrumentShowcase'; + +type Story = StoryObj; + +export default { component: InstrumentShowcase } as Meta; + +export const Default: Story = { + args: { + data: [...Object.values(forms), ...Object.values(interactive), ...Object.values(series)].map(({ instance }) => + translateInstrumentInfo(instance, 'en') + ) + } +}; diff --git a/apps/web/src/features/instruments/components/InstrumentShowcase/InstrumentShowcase.tsx b/apps/web/src/features/instruments/components/InstrumentShowcase/InstrumentShowcase.tsx index 6a2d26eb1..70c86d827 100644 --- a/apps/web/src/features/instruments/components/InstrumentShowcase/InstrumentShowcase.tsx +++ b/apps/web/src/features/instruments/components/InstrumentShowcase/InstrumentShowcase.tsx @@ -1,57 +1,42 @@ import { useEffect, useState } from 'react'; -import { ListboxDropdown, SearchBar } from '@douglasneuroinformatics/libui/components'; -import type { ListboxDropdownOption } from '@douglasneuroinformatics/libui/components'; +import { ListboxDropdown, type ListboxDropdownOption, SearchBar } from '@douglasneuroinformatics/libui/components'; import { useTranslation } from '@douglasneuroinformatics/libui/hooks'; -import type { Language } from '@douglasneuroinformatics/libui/i18n'; -import type { UnilingualInstrumentInfo } from '@opendatacapture/schemas/instrument'; -import { motion } from 'framer-motion'; -import { useNavigate } from 'react-router-dom'; - -import { useInstrumentInfoQuery } from '@/hooks/useInstrumentInfoQuery'; -import { useAppStore } from '@/store'; +import type { TranslatedInstrumentInfo } from '@opendatacapture/schemas/instrument'; +import { AnimatePresence, motion } from 'motion/react'; import { InstrumentCard } from '../InstrumentCard'; +import { InstrumentKindDropdown } from './InstrumentKindDropdown'; +import { InstrumentLanguageDropdown, type InstrumentShowcaseLanguageOption } from './InstrumentLanguageDropdown'; + +import type { InstrumentShowcaseKindOption } from './InstrumentKindDropdown'; -export const InstrumentsShowcase = () => { - const currentGroup = useAppStore((store) => store.currentGroup); - const instrumentInfoQuery = useInstrumentInfoQuery(); - const navigate = useNavigate(); +export const InstrumentShowcase: React.FC<{ + data: TranslatedInstrumentInfo[]; + onSelect: (instrument: TranslatedInstrumentInfo) => void; +}> = ({ data: availableInstruments, onSelect }) => { const { t } = useTranslation(); - const [filteredInstruments, setFilteredInstruments] = useState< - (UnilingualInstrumentInfo & { supportedLanguages: Language[] })[] - >([]); + const [filteredInstruments, setFilteredInstruments] = useState(availableInstruments); const [tagOptions, setTagOptions] = useState([]); - const [selectedLanguages, setSelectedLanguages] = useState([]); + const [selectedKinds, setSelectedKinds] = useState([]); + const [selectedLanguages, setSelectedLanguages] = useState([]); const [selectedTags, setSelectedTags] = useState([]); const [searchTerm, setSearchTerm] = useState(''); - const languageOptions = [ - { - key: 'en', - label: t('core.languages.english') - }, - { - key: 'fr', - label: t('core.languages.french') - } - ]; - useEffect(() => { setFilteredInstruments( - (instrumentInfoQuery.data ?? []).filter((info) => { - if (currentGroup && !currentGroup?.accessibleInstrumentIds.includes(info.id)) { + availableInstruments.filter(({ details, kind, supportedLanguages, tags }) => { + if (selectedKinds.length && !selectedKinds.some(({ key }) => key === kind)) { + return false; + } else if (selectedLanguages.length && !selectedLanguages.some(({ key }) => supportedLanguages.includes(key))) { + return false; + } else if (selectedTags.length && !selectedTags.some(({ key }) => tags.includes(key))) { return false; } - const matchesSearch = info.details.title.toUpperCase().includes(searchTerm.toUpperCase()); - const matchesLanguages = - selectedLanguages.length === 0 || selectedLanguages.find(({ key }) => key === info.language); - const matchesTags = - selectedTags.length === 0 || info.tags.some((tag) => selectedTags.find(({ key }) => key === tag)); - return matchesSearch && matchesLanguages && matchesTags; + return details.title.toUpperCase().includes(searchTerm.toUpperCase()); }) ); - }, [currentGroup?.accessibleInstrumentIds, instrumentInfoQuery.data, searchTerm, selectedLanguages, selectedTags]); + }, [availableInstruments, selectedKinds, selectedLanguages, selectedTags, searchTerm]); useEffect(() => { setTagOptions( @@ -60,53 +45,42 @@ export const InstrumentsShowcase = () => { label: item })) ); - }, [filteredInstruments]); + }, [availableInstruments]); return ( -
-
- -
-
- -
-
- -
+
+
+ +
+ + +
-
- {filteredInstruments.map((instrument, i) => { - return ( - - { - navigate(`/instruments/render/${instrument.id}`, { state: { info: instrument } }); - }} - /> - - ); - })} -
+
    + + {filteredInstruments.map((instrument, i) => { + return ( + + onSelect(instrument)} /> + + ); + })} + +
); }; diff --git a/apps/web/src/features/instruments/pages/AccessibleInstrumentsPage.tsx b/apps/web/src/features/instruments/pages/AccessibleInstrumentsPage.tsx index d01f7facf..725633f75 100644 --- a/apps/web/src/features/instruments/pages/AccessibleInstrumentsPage.tsx +++ b/apps/web/src/features/instruments/pages/AccessibleInstrumentsPage.tsx @@ -2,14 +2,21 @@ import React from 'react'; import { Heading } from '@douglasneuroinformatics/libui/components'; import { useTranslation } from '@douglasneuroinformatics/libui/hooks'; +import { useNavigate } from 'react-router-dom'; -import { LoadingFallback } from '@/components/LoadingFallback'; import { PageHeader } from '@/components/PageHeader'; +import { WithFallback } from '@/components/WithFallback'; +import { useInstrumentInfoQuery } from '@/hooks/useInstrumentInfoQuery'; +import { useAppStore } from '@/store'; -import { InstrumentsShowcase } from '../components/InstrumentShowcase'; +import { InstrumentShowcase } from '../components/InstrumentShowcase'; export const AccessibleInstrumentsPage = () => { + const currentGroup = useAppStore((store) => store.currentGroup); + const navigate = useNavigate(); const { t } = useTranslation(); + const instrumentInfoQuery = useInstrumentInfoQuery(); + return ( @@ -17,9 +24,19 @@ export const AccessibleInstrumentsPage = () => { {t('instruments.accessible.title')} - }> - - + { + return currentGroup.accessibleInstrumentIds.includes(instrument.id); + }) + : instrumentInfoQuery.data, + onSelect: (instrument) => { + navigate(`/instruments/render/${instrument.id}`, { state: { info: instrument } }); + } + }} + /> ); }; diff --git a/apps/web/src/features/session/components/StartSessionForm/StartSessionForm.tsx b/apps/web/src/features/session/components/StartSessionForm/StartSessionForm.tsx index 4d54bcb3b..7fd7f76a9 100644 --- a/apps/web/src/features/session/components/StartSessionForm/StartSessionForm.tsx +++ b/apps/web/src/features/session/components/StartSessionForm/StartSessionForm.tsx @@ -43,6 +43,7 @@ export const StartSessionForm = ({ currentGroup, initialValues, readOnly, onSubm return ( { const currentGroup = useAppStore((store) => store.currentGroup); const currentSession = useAppStore((store) => store.currentSession); const startSession = useAppStore((store) => store.startSession); - const [key, setKey] = useState(0); const location = useLocation() as Location<{ initialValues?: FormTypes.PartialNullableData; } | null>; + const defaultInitialValues = { + sessionType: 'IN_PERSON', + subjectIdentificationMethod: currentGroup?.settings.defaultIdentificationMethod ?? 'CUSTOM_ID' + } as const; + const [initialValues, setInitialValues] = useState>( + location.state?.initialValues ?? defaultInitialValues + ); const { t } = useTranslation('session'); const createSessionMutation = useCreateSession(); - // this is to force reset the form when the session changes, if on the same page useEffect(() => { if (currentSession === null) { - setKey(key + 1); + setInitialValues(defaultInitialValues); } }, [currentSession]); @@ -39,17 +44,11 @@ export const StartSessionPage = () => { { - const session = await createSessionMutation.mutateAsync(data); - startSession(session); + initialValues={initialValues} + readOnly={currentSession !== null || createSessionMutation.isPending} + onSubmit={async (formData) => { + const session = await createSessionMutation.mutateAsync(formData); + startSession({ ...session, type: formData.type }); }} /> diff --git a/apps/web/src/features/setup/pages/SetupPage/SetupPage.tsx b/apps/web/src/features/setup/pages/SetupPage/SetupPage.tsx index 457a70f9c..ecf138326 100644 --- a/apps/web/src/features/setup/pages/SetupPage/SetupPage.tsx +++ b/apps/web/src/features/setup/pages/SetupPage/SetupPage.tsx @@ -6,6 +6,9 @@ import { useTranslation } from '@douglasneuroinformatics/libui/hooks'; import { Logo } from '@opendatacapture/react-core'; import { z } from 'zod'; +import { useCreateSetupState } from '../../hooks/useCreateSetupState'; +import { SetupLoadingPage } from '../SetupLoadingPage'; + type SetupData = { dummySubjectCount?: number | undefined; enableExperimentalFeatures: boolean; @@ -21,8 +24,14 @@ export type SetupPageProps = { onSubmit: (data: SetupData) => void; }; -export const SetupPage = ({ onSubmit }: SetupPageProps) => { +export const SetupPage = () => { + const createSetupStateMutation = useCreateSetupState(); const { t } = useTranslation(); + + if (createSetupStateMutation.isPending) { + return ; + } + return (
@@ -145,7 +154,29 @@ export const SetupPage = ({ onSubmit }: SetupPageProps) => { }); } })} - onSubmit={onSubmit} + onSubmit={({ + dummySubjectCount, + enableExperimentalFeatures, + firstName, + initDemo, + lastName, + password, + recordsPerSubject, + username + }) => { + createSetupStateMutation.mutate({ + admin: { + firstName, + lastName, + password, + username + }, + dummySubjectCount, + enableExperimentalFeatures, + initDemo, + recordsPerSubject + }); + }} /> diff --git a/apps/web/src/features/setup/providers/SetupProvider.tsx b/apps/web/src/features/setup/providers/SetupProvider.tsx index e0eb491cb..de35441ab 100644 --- a/apps/web/src/features/setup/providers/SetupProvider.tsx +++ b/apps/web/src/features/setup/providers/SetupProvider.tsx @@ -1,14 +1,25 @@ import React, { useEffect } from 'react'; +import { useTheme } from '@douglasneuroinformatics/libui/hooks'; +import type { SetupState } from '@opendatacapture/schemas/setup'; + +import { WithFallback } from '@/components/WithFallback'; import { useSetupState } from '@/hooks/useSetupState'; -import { useCreateSetupState } from '../hooks/useCreateSetupState'; -import { SetupLoadingPage } from '../pages/SetupLoadingPage'; import { SetupPage } from '../pages/SetupPage'; +const Child: React.FC<{ children: React.ReactElement; data: SetupState }> = ({ children, data }) => { + if (data.isSetup !== false) { + return children; + } + return ; +}; + export const SetupProvider = ({ children }: { children: React.ReactElement }) => { const setupStateQuery = useSetupState(); - const createSetupStateMutation = useCreateSetupState(); + + // since there is no theme toggle on the page, this is required to set the document attribute + useTheme(); useEffect(() => { if (setupStateQuery.data?.isSetup === false) { @@ -16,36 +27,12 @@ export const SetupProvider = ({ children }: { children: React.ReactElement }) => } }, [setupStateQuery.data]); - if (setupStateQuery.data?.isSetup !== false) { - return children; - } else if (createSetupStateMutation.isPending) { - return ; - } - return ( - { - createSetupStateMutation.mutate({ - admin: { - firstName, - lastName, - password, - username - }, - dummySubjectCount, - enableExperimentalFeatures, - initDemo, - recordsPerSubject - }); + ); diff --git a/apps/web/src/features/upload/pages/UploadPage.tsx b/apps/web/src/features/upload/pages/UploadPage.tsx index 17d07c63e..66cf64f7a 100644 --- a/apps/web/src/features/upload/pages/UploadPage.tsx +++ b/apps/web/src/features/upload/pages/UploadPage.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; -import { Button, FileDropzone, Heading } from '@douglasneuroinformatics/libui/components'; +import { Button, FileDropzone, Heading, Spinner } from '@douglasneuroinformatics/libui/components'; import { useDownload, useTranslation } from '@douglasneuroinformatics/libui/hooks'; import { useNotificationsStore } from '@douglasneuroinformatics/libui/hooks'; import type { AnyUnilingualFormInstrument } from '@opendatacapture/runtime-core'; @@ -16,6 +16,7 @@ import { createUploadTemplateCSV, processInstrumentCSV, reformatInstrumentData } export const UploadPage = () => { const [file, setFile] = useState(null); + const [isLoading, setIsLoading] = useState(false); const download = useDownload(); const addNotification = useNotificationsStore((store) => store.addNotification); const currentGroup = useAppStore((store) => store.currentGroup); @@ -26,26 +27,70 @@ export const UploadPage = () => { const { t } = useTranslation(); const handleTemplateDownload = () => { - const { content, fileName } = createUploadTemplateCSV(instrument!); - void download(fileName, content); + try { + const { content, fileName } = createUploadTemplateCSV(instrument!); + void download(fileName, content); + } catch (error) { + if (error instanceof Error) { + addNotification({ + message: t({ + en: `Error occurred downloading sample template with the following message: ${error.message}`, + fr: `Un occurence d'un erreur quand le csv document est telecharger avec la message suivant: ${error.message}` + }), + type: 'error' + }); + } else { + addNotification({ + message: t({ + en: `Error occurred downloading sample template.`, + fr: `Un occurence d'un erreur quand le csv est telecharger. ` + }), + type: 'error' + }); + } + console.error(error); + } }; const handleInstrumentCSV = async () => { - const processedDataResult = await processInstrumentCSV(file!, instrument!); - if (processedDataResult.success) { - const reformattedData = reformatInstrumentData({ - currentGroup, - data: processedDataResult.value, - instrument: instrument! - }); - uploadInstrumentRecordsMutation.mutate(reformattedData); - } else { - addNotification({ - message: processedDataResult.message, - type: 'error' - }); + try { + setIsLoading(true); + const processedDataResult = await processInstrumentCSV(file!, instrument!); + if (processedDataResult.success) { + const reformattedData = reformatInstrumentData({ + currentGroup, + data: processedDataResult.value, + instrument: instrument! + }); + if (reformattedData.records.length > 1000) { + addNotification({ + message: t({ + en: 'Lots of entries loading, please wait...', + fr: 'Beaucoup de données, veuillez patienter...' + }), + type: 'info' + }); + } + await uploadInstrumentRecordsMutation.mutateAsync(reformattedData); + } else { + addNotification({ + message: processedDataResult.message, + type: 'error' + }); + } + setFile(null); + } catch (error) { + if (error instanceof Error) + addNotification({ + message: t({ + en: `An error has happended within the request \n '${error.message}'`, + fr: `Une erreur s'est produite lors du téléversement \n '${error.message}'.` + }), + type: 'error' + }); + } finally { + setIsLoading(false); } - setFile(null); }; if (!instrument) { @@ -62,28 +107,42 @@ export const UploadPage = () => { })} -
- -
- - + {!isLoading ? ( +
+ +
+ + +
-
+ ) : ( + <> +
+ + + {t({ + en: 'Data currently uploading...', + fr: 'Données en cours de téléchargement...' + })} + +
+ + )} ); }; diff --git a/apps/web/src/features/upload/utils.ts b/apps/web/src/features/upload/utils.ts index 4bacbd8fe..f3d285157 100644 --- a/apps/web/src/features/upload/utils.ts +++ b/apps/web/src/features/upload/utils.ts @@ -1,4 +1,4 @@ -import { isNumberLike, isPlainObject, parseNumber } from '@douglasneuroinformatics/libjs'; +import { isNumberLike, isObjectLike, isPlainObject, parseNumber } from '@douglasneuroinformatics/libjs'; import type { AnyUnilingualFormInstrument, FormTypes, Json } from '@opendatacapture/runtime-core'; import type { Group } from '@opendatacapture/schemas/group'; import type { UnilingualInstrumentInfo } from '@opendatacapture/schemas/instrument'; @@ -9,8 +9,6 @@ import { z } from 'zod'; // TODO - refine ZodTypeNameResult to reflect specific ZodType variants (i.e., object) -// TODO - last thing, convert all errors thrown to result to be handled in the UploadPage component - const ZOD_TYPE_NAMES = [ 'ZodNumber', 'ZodString', @@ -60,6 +58,13 @@ type UploadOperationResult = type AnyZodTypeDef = z.ZodTypeDef & { typeName: ZodTypeName }; +type AnyZodArrayDef = z.ZodArrayDef & { type: z.AnyZodObject }; + +//check for edge cases since the were using reversed hierachical logic (if object has a _def that AnyZodTypeDef then object is AnyZodObject) +function isZodObject(value: unknown): value is z.AnyZodObject { + return isObjectLike(value) && isZodTypeDef((value as { [key: string]: unknown })._def); +} + function isZodTypeDef(value: unknown): value is AnyZodTypeDef { return isPlainObject(value) && ZOD_TYPE_NAMES.includes(value.typeName as ZodTypeName); } @@ -76,7 +81,7 @@ function isZodSetDef(def: AnyZodTypeDef): def is z.ZodSetDef { return def.typeName === z.ZodFirstPartyTypeKind.ZodSet; } -function isZodArrayDef(def: AnyZodTypeDef): def is z.ZodArrayDef { +function isZodArrayDef(def: AnyZodTypeDef): def is AnyZodArrayDef { return def.typeName === z.ZodFirstPartyTypeKind.ZodArray; } @@ -88,8 +93,6 @@ function isZodObjectDef(def: AnyZodTypeDef): def is z.ZodObjectDef { return def.typeName === z.ZodFirstPartyTypeKind.ZodObject; } -// TODO - fix extract set and record array functions to handle whitespace and trailing semicolon (present or included) - function extractSetEntry(entry: string) { const result = /SET\(\s*(.*?)\s*\)/.exec(entry); if (!result?.[1]) { @@ -196,8 +199,7 @@ export function interpretZodArray( ); } - // TODO - check zod array inner type is object - const shape = (def.type as z.AnyZodObject).shape as { [key: string]: z.ZodTypeAny }; + const shape = def.type.shape as { [key: string]: z.ZodTypeAny }; for (const [key, insideType] of Object.entries(shape)) { const def: unknown = insideType._def; @@ -239,11 +241,11 @@ export function interpretZodValue( } else if (entry.toLowerCase() === 'false') { return { success: true, value: false }; } - return { message: `Undecipherable Boolean Type: ${entry}`, success: false }; + return { message: `Undecipherable Boolean Type: '${entry}'`, success: false }; case 'ZodDate': { const date = new Date(entry); - if (isNaN(date.getTime())) { - return { message: `Failed to parse date: ${entry}`, success: false }; + if (Number.isNaN(date.getTime())) { + return { message: `Failed to parse date: '${entry}'`, success: false }; } return { success: true, value: date }; } @@ -253,17 +255,25 @@ export function interpretZodValue( if (isNumberLike(entry)) { return { success: true, value: parseNumber(entry) }; } - return { message: `Invalid number type: ${entry}`, success: false }; + return { message: `Invalid number type: '${entry}'`, success: false }; case 'ZodSet': - if (entry.startsWith('SET(')) { - const setData = extractSetEntry(entry); - const values = setData.split(',').map((s) => s.trim()).filter(Boolean); - if (values.length === 0) { - return { message: 'Empty set is not allowed', success: false }; + try { + if (entry.startsWith('SET(')) { + const setData = extractSetEntry(entry); + const values = setData + .split(',') + .map((s) => s.trim()) + .filter(Boolean); + if (values.length === 0) { + return { message: 'Empty set is not allowed', success: false }; + } + return { success: true, value: new Set(values) }; } - return { success: true, value: new Set(values) }; + } catch { + return { message: 'Error occurred interpreting set entry', success: false }; } - return { message: `Invalid ZodSet: ${entry}`, success: false }; + + return { message: `Invalid ZodSet: '${entry}'`, success: false }; case 'ZodString': return { success: true, value: entry }; default: @@ -277,56 +287,70 @@ export function interpretZodObjectValue( zList: ZodTypeNameResult[], zKeys: string[] ): UploadOperationResult { - if (entry === '' && isOptional) { - return { success: true, value: undefined }; - } else if (!entry.startsWith('RECORD_ARRAY(')) { - return { message: `Invalid ZodType`, success: false }; - } + try { + if (entry === '' && isOptional) { + return { success: true, value: undefined }; + } else if (!entry.startsWith('RECORD_ARRAY(')) { + return { message: `Invalid ZodType`, success: false }; + } - const recordArray: { [key: string]: any }[] = []; - const recordArrayDataEntry = extractRecordArrayEntry(entry); - const recordArrayDataList = recordArrayDataEntry.split(';'); + const recordArray: { [key: string]: any }[] = []; + const recordArrayDataEntry = extractRecordArrayEntry(entry); + const recordArrayDataList = recordArrayDataEntry.split(';'); - if (recordArrayDataList.at(-1) === '') { - recordArrayDataList.pop(); - } + if (recordArrayDataList.at(-1) === '') { + recordArrayDataList.pop(); + } - for (const listData of recordArrayDataList) { - const recordArrayObject: { [key: string]: any } = {}; + for (const listData of recordArrayDataList) { + const recordArrayObject: { [key: string]: any } = {}; - const record = listData.split(','); - if (record.some((str) => str === '')) { - return { message: `One or more of the record array fields was left empty`, success: false }; - } - if (!(zList.length === zKeys.length && zList.length === record.length)) { - return { message: `Incorrect number of entries for record array`, success: false }; - } - for (let i = 0; i < record.length; i++) { - // TODO - make sure this is defined - const recordValue = record[i]!.split(':')[1]!.trim(); + const record = listData.split(','); - const zListResult = zList[i]!; - if (!(zListResult.success && zListResult.typeName !== 'ZodArray' && zListResult.typeName !== 'ZodObject')) { - return { message: `Failed to interpret field '${i}'`, success: false }; + if (!record) { + return { message: `Record in the record array was left undefined`, success: false }; } - const interpretZodValueResult: UploadOperationResult = interpretZodValue( - recordValue, - zListResult.typeName, - zListResult.isOptional - ); - if (!interpretZodValueResult.success) { - return { - message: `failed to interpret value at entry ${i} in record array row ${listData}`, - success: false - }; + if (record.some((str) => str === '')) { + return { message: `One or more of the record array fields was left empty`, success: false }; + } + if (!(zList.length === zKeys.length && zList.length === record.length)) { + return { message: `Incorrect number of entries for record array`, success: false }; } + for (let i = 0; i < record.length; i++) { + if (!record[i]) { + return { message: `Failed to interpret field '${i}'`, success: false }; + } + + const recordValue = record[i]!.split(':')[1]!.trim(); - recordArrayObject[zKeys[i]!] = interpretZodValueResult.value; + const zListResult = zList[i]!; + if (!(zListResult.success && zListResult.typeName !== 'ZodArray' && zListResult.typeName !== 'ZodObject')) { + return { message: `Failed to interpret field '${i}'`, success: false }; + } + const interpretZodValueResult: UploadOperationResult = interpretZodValue( + recordValue, + zListResult.typeName, + zListResult.isOptional + ); + if (!interpretZodValueResult.success) { + return { + message: `failed to interpret value at entry ${i} in record array row ${listData}`, + success: false + }; + } + + recordArrayObject[zKeys[i]!] = interpretZodValueResult.value; + } + recordArray.push(recordArrayObject); } - recordArray.push(recordArrayObject); - } - return { success: true, value: recordArray }; + return { success: true, value: recordArray }; + } catch { + return { + message: `failed to interpret record array entries`, + success: false + }; + } } function formatTypeInfo(s: string, isOptional: boolean) { @@ -379,7 +403,7 @@ function generateSampleData({ // eslint-disable-next-line max-depth if (!inputData?.success) { console.error({ inputData }); - throw new Error(`TODO - handle this case where input data is undefined or not a success`); + throw new Error(`input data is undefined or unsuccessful`); } // eslint-disable-next-line max-depth if (i === multiValues.length - 1 && multiValues[i] !== undefined) { @@ -390,9 +414,12 @@ function generateSampleData({ } multiString += ';)'; } - return multiString; - } catch { + } catch (e) { + if (e instanceof Error && e.message === 'input data is undefined or unsuccessful') { + throw new Error('Unsuccessful input data transfer or undefined data'); + } + throw new Error('Invalid Record Array Error'); } default: @@ -401,41 +428,54 @@ function generateSampleData({ } export function createUploadTemplateCSV(instrument: AnyUnilingualFormInstrument) { - // TODO - type validationSchema as object - const instrumentSchema = instrument.validationSchema as z.AnyZodObject; + try { + const instrumentSchema = instrument.validationSchema; - const instrumentSchemaDef: unknown = instrument.validationSchema._def; + if (!isZodObject(instrumentSchema)) { + throw new Error('Validation schema for this instrument is invalid'); + } - let shape: { [key: string]: z.ZodTypeAny } = {}; + const instrumentSchemaDef: unknown = instrument.validationSchema._def; - if (isZodTypeDef(instrumentSchemaDef) && isZodEffectsDef(instrumentSchemaDef)) { - const innerSchema: unknown = instrumentSchemaDef.schema._def; - if (isZodTypeDef(innerSchema) && isZodObjectDef(innerSchema)) { - shape = innerSchema.shape() as { [key: string]: z.ZodTypeAny }; + let shape: { [key: string]: z.ZodTypeAny } = {}; + + if (isZodTypeDef(instrumentSchemaDef) && isZodEffectsDef(instrumentSchemaDef)) { + const innerSchemaDef: unknown = instrumentSchemaDef.schema._def; + if (isZodTypeDef(innerSchemaDef) && isZodObjectDef(innerSchemaDef)) { + shape = innerSchemaDef.shape() as { [key: string]: z.ZodTypeAny }; + } + } else { + shape = instrumentSchema.shape as { [key: string]: z.ZodTypeAny }; } - } else { - shape = instrumentSchema.shape as { [key: string]: z.ZodTypeAny }; - } - const columnNames = Object.keys(shape); + const columnNames = Object.keys(shape); - const csvColumns = INTERNAL_HEADERS.concat(columnNames); + const csvColumns = INTERNAL_HEADERS.concat(columnNames); - const sampleData = [...INTERNAL_HEADERS_SAMPLE_DATA]; - for (const col of columnNames) { - const typeNameResult = getZodTypeName(shape[col]!); - if (!typeNameResult.success) { - throw new Error(typeNameResult.message); + const sampleData = [...INTERNAL_HEADERS_SAMPLE_DATA]; + for (const col of columnNames) { + const typeNameResult = getZodTypeName(shape[col]!); + if (!typeNameResult.success) { + throw new Error(typeNameResult.message); + } + sampleData.push(generateSampleData(typeNameResult)); } - sampleData.push(generateSampleData(typeNameResult)); - } - unparse([csvColumns, sampleData]); + unparse([csvColumns, sampleData]); - return { - content: unparse([csvColumns, sampleData]), - fileName: `${instrument.internal.name}_${instrument.internal.edition}_template.csv` - }; + return { + content: unparse([csvColumns, sampleData]), + fileName: `${instrument.internal.name}_${instrument.internal.edition}_template.csv` + }; + } catch (e) { + if (e instanceof Error && e.message) { + throw e; + } + + throw new Error('Error generating Sample CSV template', { + cause: e + }); + } } export async function processInstrumentCSV( @@ -447,19 +487,24 @@ export async function processInstrumentCSV( let instrumentSchemaWithInternal: z.AnyZodObject; const instrumentSchemaDef: unknown = instrumentSchema._def; + const $SubjectIdValidation = z + .string() + .regex(/^[^$\s]+$/, 'Subject ID has to be at least 1 character long, without a $ and no whitespaces'); if (isZodTypeDef(instrumentSchemaDef) && isZodEffectsDef(instrumentSchemaDef)) { - //TODO make this type safe without having to cast z.AnyZodObject - instrumentSchemaWithInternal = (instrumentSchemaDef.schema as z.AnyZodObject).extend({ + if (!isZodObject(instrumentSchemaDef.schema)) { + return { message: 'Invalid instrument schema', success: false }; + } + instrumentSchemaWithInternal = instrumentSchemaDef.schema.extend({ date: z.coerce.date(), - subjectID: z.string() + subjectID: $SubjectIdValidation }); shape = instrumentSchemaWithInternal._def.shape() as { [key: string]: z.ZodTypeAny }; } else { instrumentSchemaWithInternal = instrumentSchema.extend({ date: z.coerce.date(), - subjectID: z.string() + subjectID: $SubjectIdValidation }); shape = instrumentSchemaWithInternal.shape as { [key: string]: z.ZodTypeAny }; } @@ -493,14 +538,17 @@ export async function processInstrumentCSV( for (const elements of dataLines) { const jsonLine: { [key: string]: unknown } = {}; for (let j = 0; j < headers.length; j++) { - const key = headers[j]!; - const rawValue = elements[j]!; + const key = headers[j]!.trim(); + const rawValue = elements[j]!.trim(); if (rawValue === '\n') { continue; } if (shape[key] === undefined) { - return resolve({ message: `Schema at '${key}' is not defined!`, success: false }); + return resolve({ + message: `Schema value at column ${j} is not defined! Please check if Column has been edited/deleted from original template`, + success: false + }); } const typeNameResult = getZodTypeName(shape[key]); if (!typeNameResult.success) { @@ -513,29 +561,34 @@ export async function processInstrumentCSV( }; if (typeNameResult.typeName === 'ZodArray' || typeNameResult.typeName === 'ZodObject') { - if (typeNameResult.multiKeys && typeNameResult.multiValues) + if (typeNameResult.multiKeys && typeNameResult.multiValues) { interpreterResult = interpretZodObjectValue( rawValue, typeNameResult.isOptional, typeNameResult.multiValues, typeNameResult.multiKeys ); - // TODO - what if this is not the case? Once generics are handled correctly should not be a problem + // TODO - what if this is not the case? Once generics are handled correctly should not be a problem + //Dealt with via else statement for now + } else { + interpreterResult.message = 'Record Array keys do not exist'; + } } else { interpreterResult = interpretZodValue(rawValue, typeNameResult.typeName, typeNameResult.isOptional); } if (!interpreterResult.success) { - return resolve({ message: interpreterResult.message, success: false }); + return resolve({ message: `${interpreterResult.message} at column name: '${key}'`, success: false }); } jsonLine[headers[j]!] = interpreterResult.value; } const zodCheck = instrumentSchemaWithInternal.safeParse(jsonLine); if (!zodCheck.success) { - //create error message with zodcheck error messsage + zodcheck error path - //addNotification({ message: zodCheck.error.issues[0]?.message, type: 'error' }); console.error(zodCheck.error.issues); + const zodIssues = zodCheck.error.issues.map((issue) => { + return `issue message: \n ${issue.message} \n path: ${issue.path.toString()}`; + }); console.error(`Failed to parse data: ${JSON.stringify(jsonLine)}`); - return resolve({ message: zodCheck.error.message, success: false }); + return resolve({ message: zodIssues.join(), success: false }); } result.push(zodCheck.data); } diff --git a/apps/web/src/hooks/useInstrumentInfoQuery.ts b/apps/web/src/hooks/useInstrumentInfoQuery.ts index 82ad5a392..b515c7175 100644 --- a/apps/web/src/hooks/useInstrumentInfoQuery.ts +++ b/apps/web/src/hooks/useInstrumentInfoQuery.ts @@ -22,10 +22,7 @@ export function useInstrumentInfoQuery({ params }); const infos = await $InstrumentInfo.array().parseAsync(response.data); - return infos.map((instrument) => ({ - ...translateInstrumentInfo(instrument, resolvedLanguage ?? 'en'), - supportedLanguages: typeof instrument.language === 'string' ? [instrument.language] : instrument.language - })); + return infos.map((instrument) => translateInstrumentInfo(instrument, resolvedLanguage ?? 'en')); }, queryKey: ['instrument-info', params?.kind, params?.subjectId, resolvedLanguage] }); diff --git a/apps/web/src/providers/ForceClearQueryCacheProvider.tsx b/apps/web/src/providers/ForceClearQueryCacheProvider.tsx new file mode 100644 index 000000000..4ddfc14ae --- /dev/null +++ b/apps/web/src/providers/ForceClearQueryCacheProvider.tsx @@ -0,0 +1,27 @@ +import { Fragment, useEffect } from 'react'; + +import { useQueryClient } from '@tanstack/react-query'; +import { useLocation } from 'react-router-dom'; + +import { config } from '@/config'; + +let ForceClearQueryCacheProvider: React.FC<{ children: React.ReactNode }>; + +if (config.dev.isForceClearQueryCacheEnabled) { + // eslint-disable-next-line react/function-component-definition + ForceClearQueryCacheProvider = function ForceClearQueryCacheProvider({ children }) { + const queryClient = useQueryClient(); + const location = useLocation(); + + useEffect(() => { + //queryClient.clear(); + queryClient.clear(); + }, [location.pathname]); + + return <>{children}; + }; +} else { + ForceClearQueryCacheProvider = Fragment; +} + +export { ForceClearQueryCacheProvider }; diff --git a/apps/web/src/providers/WalkthroughProvider.tsx b/apps/web/src/providers/WalkthroughProvider.tsx index 4a86e09e5..82d9a430e 100644 --- a/apps/web/src/providers/WalkthroughProvider.tsx +++ b/apps/web/src/providers/WalkthroughProvider.tsx @@ -4,9 +4,9 @@ import { Button, Card } from '@douglasneuroinformatics/libui/components'; import { useEventListener, useTranslation } from '@douglasneuroinformatics/libui/hooks'; import type { FormTypes } from '@opendatacapture/runtime-core'; import type { Session } from '@opendatacapture/schemas/session'; -import { AnimatePresence, motion } from 'framer-motion'; import { mean } from 'lodash-es'; import { XIcon } from 'lucide-react'; +import { AnimatePresence, motion } from 'motion/react'; import { useNavigate } from 'react-router-dom'; import type { NavigateOptions } from 'react-router-dom'; import { match } from 'ts-pattern'; diff --git a/apps/web/src/services/axios.ts b/apps/web/src/services/axios.ts index 636b65cae..b086e120f 100644 --- a/apps/web/src/services/axios.ts +++ b/apps/web/src/services/axios.ts @@ -13,7 +13,7 @@ axios.interceptors.request.use((config) => { config.headers.setAccept('application/json'); // Do not set timeout for setup (can be CPU intensive, especially on slow server) - if (config.url !== '/v1/setup') { + if (config.url !== '/v1/setup' && config.url !== '/v1/instrument-records/upload') { config.timeout = 10000; // abort request after 10 seconds config.timeoutErrorMessage = i18n.t({ en: 'Network Error', diff --git a/apps/web/src/testing/stubs.ts b/apps/web/src/testing/stubs.ts index b3bfe5b6f..e5c8f68d6 100644 --- a/apps/web/src/testing/stubs.ts +++ b/apps/web/src/testing/stubs.ts @@ -1,36 +1,9 @@ import { createMongoAbility, PureAbility } from '@casl/ability'; import type { AppAction, AppSubjectName } from '@opendatacapture/schemas/core'; import type { Session } from '@opendatacapture/schemas/session'; -import type { Subject } from '@opendatacapture/schemas/subject'; -import type { User } from '@opendatacapture/schemas/user'; import type { CurrentUser } from '@/store/types'; -export const adminUser: User = Object.freeze({ - additionalPermissions: [], - basePermissionLevel: 'ADMIN', - createdAt: new Date(), - firstName: 'David', - groupIds: [], - groups: [], - id: '12345', - lastName: 'Roper', - password: 'Password123', - updatedAt: new Date(), - username: 'david' -}); - -export const testSubject: Subject = Object.freeze({ - createdAt: new Date(), - dateOfBirth: new Date(), - firstName: 'testSubject', - groupIds: [], - id: '231314', - lastName: 'tester', - sex: 'MALE', - updatedAt: new Date() -}); - export const currentUser: CurrentUser = Object.freeze({ ability: createMongoAbility>([{ action: 'manage', subject: 'all' }]), firstName: 'Jane', diff --git a/apps/web/src/utils/excel.ts b/apps/web/src/utils/excel.ts index 995219160..b420e82ae 100644 --- a/apps/web/src/utils/excel.ts +++ b/apps/web/src/utils/excel.ts @@ -1,42 +1,5 @@ import type { InstrumentRecordsExport } from '@opendatacapture/schemas/instrument-records'; import { utils, writeFileXLSX } from 'xlsx'; -// import type { WorkBook } from 'xlsx'; - -// function processSlice( -// workbook: WorkBook, -// state: IncompleteAppState, -// name: T, -// options?: { -// order?: Extract[]; -// title?: string; -// } -// ) { -// const slice = state[name]; -// if (!slice) { -// return; -// } - -// const title = options?.title ?? _.capitalize(name); -// const keys = getOrderedKeys(slice, options?.order); -// const labels = APP_STATE_LABELS[name]; - -// const row: { [key: string]: Primitive } = {}; -// for (const key of keys) { -// const item = slice[key as keyof typeof slice] as FormFieldValue; -// const label = labels[key as keyof typeof labels]; -// if (isPrimitive(item) && typeof label === 'string') { -// row[label] = item; -// } else if (typeof label === 'object') { -// processArray({ -// labels: label, -// name: `${title} (${label._arrayLabel})`, -// value: item as ArrayFormFieldValue, -// workbook -// }); -// } -// } -// return utils.book_append_sheet(workbook, utils.json_to_sheet([row]), title); -// } export function downloadExcel(filename: string, recordsExport: InstrumentRecordsExport) { const workbook = utils.book_new(); diff --git a/apps/web/src/vite-env.d.ts b/apps/web/src/vite-env.d.ts index ff1b731d3..feba27bcb 100644 --- a/apps/web/src/vite-env.d.ts +++ b/apps/web/src/vite-env.d.ts @@ -6,6 +6,8 @@ // All of these should be undefined in production interface ImportMetaDevEnv { readonly VITE_DEV_BYPASS_AUTH?: string; + readonly VITE_DEV_FORCE_CLEAR_QUERY_CACHE?: string; + readonly VITE_DEV_NETWORK_LATENCY?: string; readonly VITE_DEV_PASSWORD?: string; readonly VITE_DEV_USERNAME?: string; } @@ -19,7 +21,6 @@ interface ImportMetaEnv extends ImportMetaDevEnv { readonly LICENSE_URL?: string; readonly PLAUSIBLE_BASE_URL?: string; readonly PLAUSIBLE_WEB_DATA_DOMAIN?: string; - readonly VITE_DEV_NETWORK_LATENCY?: string; } interface ImportMeta { diff --git a/docs/en/3-guides/3.3-how-to-upload-data.md b/docs/en/3-guides/3.3-how-to-upload-data.md index b349133b3..905b01b0e 100644 --- a/docs/en/3-guides/3.3-how-to-upload-data.md +++ b/docs/en/3-guides/3.3-how-to-upload-data.md @@ -68,3 +68,37 @@ Open Data Capture allows you to visualize numeric measures over time in a single Whenever data is optional within a form it can be left empty and still be properly submitted. Any optional data column in the csv template will have an "(optional)" tag attached to its sample data entry, which means any entry in the column can be left blank. This is usually done in that case of when one column value depends on another. For example, a sessionFailed column would be followed by an optional reasonForFailure column. + +### Sample CSV Data + +This section will present how to properly fill in a template csv from the upload feature. Say we download the following csv template that looks like this below: + +| subjectID | date | stringQuestion | setQuestion | optionalQuestion | recordArrayQuestion | +| :-------- | :--------- | :------------- | :-------------- | :--------------- | :--------------------------------------------------- | +| string | yyyy-mm-dd | yes/no | SET(A/B/C, ...) | A/B (optional) | RECORD_ARRAY(testString: A/B/C, testNumber: number;) | +| | | | | | | + +
+ +Starting with the first column we have **subjectID**, which is a string value containing the identification of the subject taking part in the instrument. This field is required. + +The second column contains the date of which in instrument was done by the subject, which follows _yyyy-mm-dd_ format. This field is to be filled for each row. + +The third column is a string entry consisting of two possible options (yes/no). + +The fourth column is a field which takes in a set of entries, where the options are A, B or C. The set can have all these option within it, however it does not accept duplicates. So an entry such as `SET(A,A,C)` would fail, but the entry `SET(A,B,C)` would be valid. + +The fifth column is an optional string field with the possible options of A or B. This field can hold either A, B, or can remain empty. + +Finally, the sixth column is a record array field. This record array object can have the fields testString and testNumber entered within it. These internal field values are entered by including the fieldname and its corresponding value separated by a **":"**. In addition, a record array can also have multiple entries for each internal field within it as long as the new entry is separated by a **";"**. With that in mind, valid entries for this column would be `RECORD_ARRAY(testString: A, testNumber: 1;)` or
+`RECORD_ARRAY(testString: A, testNumber: 1; testString: 1, testNumber: 2;)`, etc. + +
+ +A valid CSV file that follows this template can be seen below: + +| subjectID | date | stringQuestion | setQuestion | optionalQuestion | recordArrayQuestion | +| :-------- | :--------- | :------------- | :----------- | :--------------- | :-------------------------------------------------------------------------- | +| testID123 | 2025-01-07 | yes | SET(A, B, C) | B | RECORD_ARRAY(testString: A, testNumber: 2; testString: B, testNumber: 3;) | +| testID111 | 2025-01-06 | no | SET(C, B) | A | RECORD_ARRAY(testString: B, testNumber: 22; testString: A, testNumber: 1;) | +| testID111 | 2025-01-03 | no | SET(A, C) | | RECORD_ARRAY(testString: B, testNumber: 12; testString: B, testNumber: 13;) | diff --git a/package.json b/package.json index 1ced54e4f..72d63e2fa 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "opendatacapture", "type": "module", - "version": "1.8.1", + "version": "1.8.5", "private": true, - "packageManager": "pnpm@9.14.2", + "packageManager": "pnpm@9.15.4", "license": "Apache-2.0", "engines": { "node": ">=v20.17.0" @@ -33,43 +33,43 @@ "ws": "./scripts/workspace.sh $@" }, "devDependencies": { - "@commitlint/cli": "^19.4.1", - "@commitlint/config-conventional": "^19.4.1", - "@commitlint/types": "^19.0.3", + "@commitlint/cli": "^19.6.1", + "@commitlint/config-conventional": "^19.6.0", + "@commitlint/types": "^19.5.0", "@douglasneuroinformatics/eslint-config": "catalog:", "@douglasneuroinformatics/prettier-config": "catalog:", "@douglasneuroinformatics/tsconfig": "catalog:", - "@storybook/addon-essentials": "^8.2.9", - "@storybook/addon-interactions": "^8.2.9", - "@storybook/addon-links": "^8.2.9", - "@storybook/addon-themes": "^8.2.9", - "@storybook/blocks": "^8.2.9", - "@storybook/icons": "^1.2.10", - "@storybook/react": "^8.2.9", - "@storybook/react-vite": "^8.2.9", + "@storybook/addon-essentials": "^8.5.0", + "@storybook/addon-interactions": "^8.5.0", + "@storybook/addon-links": "^8.5.0", + "@storybook/addon-themes": "^8.5.0", + "@storybook/blocks": "^8.5.0", + "@storybook/icons": "^1.3.0", + "@storybook/react": "^8.5.0", + "@storybook/react-vite": "^8.5.0", "@swc-node/register": "^1.10.9", - "@swc/cli": "^0.4.0", - "@swc/core": "^1.7.24", - "@swc/helpers": "^0.5.13", + "@swc/cli": "^0.6.0", + "@swc/core": "^1.10.9", + "@swc/helpers": "^0.5.15", "@types/github-script": "https://github.com/actions/github-script/archive/refs/tags/v7.0.1.tar.gz", "@types/js-yaml": "^4.0.9", "@types/node": "^20.14.2", "@vitest/browser": "^2.0.5", "@vitest/coverage-v8": "^2.0.5", - "dotenv": "^16.4.5", + "dotenv": "^16.4.7", "env-cmd": "^10.1.0", - "eslint": "^9.10.0", + "eslint": "^9.18.0", "expect-type": "^0.20.0", - "husky": "^9.1.5", + "husky": "^9.1.7", "js-yaml": "^4.1.0", - "prettier": "^3.3.3", + "prettier": "^3.4.2", "prettier-plugin-astro": "^0.14.1", - "prettier-plugin-tailwindcss": "^0.6.6", - "start-server-and-test": "^2.0.8", - "storybook": "^8.2.9", + "prettier-plugin-tailwindcss": "^0.6.10", + "start-server-and-test": "^2.0.10", + "storybook": "^8.5.0", "tsx": "catalog:", - "turbo": "^2.1.1", - "typescript": "~5.5.4", + "turbo": "^2.3.3", + "typescript": "5.6.x", "unplugin-swc": "^1.5.1", "vitest": "^2.1.1" }, diff --git a/packages/instrument-bundler/package.json b/packages/instrument-bundler/package.json index 99c8e8535..51892a905 100644 --- a/packages/instrument-bundler/package.json +++ b/packages/instrument-bundler/package.json @@ -23,10 +23,10 @@ }, "dependencies": { "commander": "^12.1.0", - "es-module-lexer": "^1.5.4", + "es-module-lexer": "^1.6.0", "esbuild": "catalog:", "esbuild-wasm": "catalog:", - "glob": "^11.0.0", + "glob": "^11.0.1", "slashes": "^3.0.12", "ts-pattern": "workspace:ts-pattern__5.x@*", "type-fest": "workspace:type-fest__4.x@*", diff --git a/packages/instrument-bundler/src/__tests__/transform.test.ts b/packages/instrument-bundler/src/__tests__/transform.test.ts index 58ff4bff9..5023c308b 100644 --- a/packages/instrument-bundler/src/__tests__/transform.test.ts +++ b/packages/instrument-bundler/src/__tests__/transform.test.ts @@ -1,28 +1,26 @@ import { describe, expect, it } from 'vitest'; -import { transformStaticImports } from '../transform.js'; +import { transformImports } from '../transform.js'; -describe('transformStaticImports', () => { +describe('transformImports', () => { it('should transform a default import', () => { - expect(transformStaticImports("import React from 'react';")).toBe( - "const { default: React } = await import('react');" - ); + expect(transformImports("import React from 'react';")).toBe("const { default: React } = await import('react');"); }); it('should transform named imports', () => { - expect(transformStaticImports("import { useEffect, useState } from 'react';")).toBe( + expect(transformImports("import { useEffect, useState } from 'react';")).toBe( "const { useEffect, useState } = await import('react');" ); }); it('should transform named and default imports from the same source', () => { - expect(transformStaticImports("import React, { useState } from 'react';")).toBe( + expect(transformImports("import React, { useState } from 'react';")).toBe( "const { useState, default: React } = await import('react');" ); }); it('should transform a namespace import', () => { - expect(transformStaticImports("import * as React from 'react';")).toBe("const React = await import('react');"); + expect(transformImports("import * as React from 'react';")).toBe("const React = await import('react');"); }); it('should transform named and default imports from the same source', () => { - expect(transformStaticImports("import _ from 'lodash'; import { useEffect, useState } from 'react';")).toBe( + expect(transformImports("import _ from 'lodash'; import { useEffect, useState } from 'react';")).toBe( "const { default: _ } = await import('lodash'); const { useEffect, useState } = await import('react');" ); }); diff --git a/packages/instrument-bundler/src/bundle.ts b/packages/instrument-bundler/src/bundle.ts index fdb699bd6..78b6ac372 100644 --- a/packages/instrument-bundler/src/bundle.ts +++ b/packages/instrument-bundler/src/bundle.ts @@ -1,11 +1,38 @@ import { build } from './build.js'; import { preprocess } from './preprocess.js'; -import { transformStaticImports } from './transform.js'; +import { transformImports } from './transform.js'; import * as esbuild from './vendor/esbuild.js'; import type { BundleOptions } from './schemas.js'; import type { BuildOutput } from './types.js'; +const GLOBALS = ` + globalThis.__import = async (moduleName) => { + try { + return import(moduleName); + } catch (err) { + throw new Error('Failed to import module: ' + moduleName, { cause: err }); + } + }; + const __createProxy = (name) => { + const formatErrorMessage = (method, propertyName, targetName) => { + const contextName = globalThis.__ODC_BUNDLER_ERROR_CONTEXT ?? 'UNKNOWN' + return "Cannot " + method + " property '" + propertyName + "' of object '" + targetName + "' in global scope of file '" + contextName + "'" + } + return new Proxy({ name }, { + get(target, property) { + throw new Error(formatErrorMessage('get', property.toString(), target.name)) + }, + set(target, property) { + throw new Error(formatErrorMessage('set', property.toString(), target.name)) + } + }); + }; + const document = globalThis.document ?? __createProxy('document'); + const self = globalThis.self ?? __createProxy('self'); + const window = globalThis.window ?? __createProxy('window'); +`; + /** * Converts the bundle into an an immediately invoked function expression (IIFE) that returns the value of * a top-level variable '__exports'. The result is subject to tree shaking and minification. @@ -19,6 +46,7 @@ export async function createBundle(output: BuildOutput, options: { minify: boole inject = `Object.defineProperty(__exports.content, '__injectHead', { value: Object.freeze({ style: "${btoa(output.css)}" }), writable: false });`; } const bundle = `(async () => { + ${GLOBALS} ${output.js} ${inject} return __exports; @@ -26,7 +54,9 @@ export async function createBundle(output: BuildOutput, options: { minify: boole const result = await esbuild.transform(bundle, { charset: 'ascii', format: 'esm', - minify: options.minify, + minifyIdentifiers: false, + minifySyntax: options.minify, + minifyWhitespace: options.minify, platform: 'browser', target: 'es2022', treeShaking: true @@ -37,6 +67,6 @@ export async function createBundle(output: BuildOutput, options: { minify: boole export async function bundle({ inputs, minify = true }: BundleOptions): Promise { preprocess(inputs); const result = await build({ inputs }); - result.js = transformStaticImports(result.js); + result.js = transformImports(result.js); return createBundle(result, { minify }); } diff --git a/packages/instrument-bundler/src/plugin.ts b/packages/instrument-bundler/src/plugin.ts index 0775d5c4b..a5661fdd0 100644 --- a/packages/instrument-bundler/src/plugin.ts +++ b/packages/instrument-bundler/src/plugin.ts @@ -44,10 +44,14 @@ export const plugin = (options: { inputs: BundlerInput[] }): Plugin => { ] }; } - return { - contents: input.content, - loader: inferLoader(input.name) - }; + let contents: typeof input.content; + const loader = inferLoader(input.name); + if (loader === 'js' || loader === 'jsx' || loader === 'ts' || loader == 'tsx') { + contents = [`globalThis.__ODC_BUNDLER_ERROR_CONTEXT = "${input.name}";`, input.content as string].join('\n'); + } else { + contents = input.content; + } + return { contents, loader }; }); } }; diff --git a/packages/instrument-bundler/src/transform.ts b/packages/instrument-bundler/src/transform.ts index 1e9bee1a3..7ada06fbf 100644 --- a/packages/instrument-bundler/src/transform.ts +++ b/packages/instrument-bundler/src/transform.ts @@ -18,7 +18,7 @@ function transformImportClause(importClause: ImportClause) { return `{ ${names.join(', ')} }`; } -export function transformStaticImports(code: string) { +export function transformImports(code: string) { let indexDiff = 0; for (const { endIndex: _endIndex, @@ -27,13 +27,16 @@ export function transformStaticImports(code: string) { moduleSpecifier, startIndex: _startIndex } of parseImports(code)) { - if (isDynamicImport) { - continue; - } const endIndex = _endIndex + indexDiff; const startIndex = _startIndex + indexDiff; const source = code.slice(startIndex, endIndex); - const replacement = `const ${transformImportClause(importClause!)} = await import(${moduleSpecifier.code})`; + + let replacement: string; + if (isDynamicImport) { + replacement = source.replace(/^import\(/, '__import('); + } else { + replacement = `const ${transformImportClause(importClause!)} = await __import(${moduleSpecifier.code})`; + } indexDiff += replacement.length - source.length; code = code.slice(0, startIndex) + replacement + code.slice(endIndex, code.length); } diff --git a/packages/instrument-bundler/src/types.ts b/packages/instrument-bundler/src/types.ts index 8d902ae22..200775a5b 100644 --- a/packages/instrument-bundler/src/types.ts +++ b/packages/instrument-bundler/src/types.ts @@ -4,7 +4,9 @@ export type BundlerInputFileExtension = | '.jpeg' | '.jpg' | '.js' + | '.json' | '.jsx' + | '.mp4' | '.png' | '.svg' | '.ts' diff --git a/packages/instrument-bundler/src/utils.ts b/packages/instrument-bundler/src/utils.ts index 0526424c4..a196c3f2c 100644 --- a/packages/instrument-bundler/src/utils.ts +++ b/packages/instrument-bundler/src/utils.ts @@ -6,7 +6,7 @@ import type { BundlerInputFileExtension } from './types.js'; import type { Loader } from './vendor/esbuild.js'; export function extractInputFileExtension(filename: string) { - const ext = /\.(css|html|jpeg|jpg|js|jsx|png|svg|ts|tsx|webp)$/i.exec(filename)?.[0]; + const ext = /\.(css|html|jpeg|jpg|js|jsx|json|mp4|png|svg|ts|tsx|webp)$/i.exec(filename)?.[0]; return (ext ?? null) as BundlerInputFileExtension | null; } @@ -16,9 +16,10 @@ export function inferLoader(filename: string): Loader { .with('.html', () => 'text' as const) .with('.js', () => 'js' as const) .with('.jsx', () => 'jsx' as const) + .with('.json', () => 'json' as const) .with('.ts', () => 'ts' as const) .with('.tsx', () => 'tsx' as const) - .with(P.union('.jpeg', '.jpg', '.png', '.svg', '.webp'), () => 'dataurl' as const) + .with(P.union('.jpeg', '.jpg', '.png', '.svg', '.webp', '.mp4'), () => 'dataurl' as const) .with(null, () => { throw new InstrumentBundlerError(`Cannot infer loader due to unexpected extension for filename: ${filename}`); }) diff --git a/packages/instrument-library/src/interactive/breakout-task/index.ts b/packages/instrument-library/src/interactive/breakout-task/index.ts index a727bdfb9..83ad62ced 100644 --- a/packages/instrument-library/src/interactive/breakout-task/index.ts +++ b/packages/instrument-library/src/interactive/breakout-task/index.ts @@ -3,186 +3,250 @@ import { z } from '/runtime/v1/zod@3.23.x'; import './styles.css'; -export default defineInstrument({ - clientDetails: { - estimatedDuration: 1, - instructions: ['Please attempt to win the game as quickly as possible.'] - }, - content: { - render(done) { - const startTime = Date.now(); - - const canvas = document.createElement('canvas'); - canvas.height = 320; - canvas.width = 480; - document.body.appendChild(canvas); - - const ctx = canvas.getContext('2d')!; - const ballRadius = 10; - const brickRowCount = 5; - const brickColumnCount = 3; - const brickWidth = 75; - const brickHeight = 20; - const brickPadding = 10; - const brickOffsetTop = 30; - const brickOffsetLeft = 30; - const paddleHeight = 10; - const paddleWidth = 75; - - let x = canvas.width / 2; - let y = canvas.height - 30; - let dx = 2; - let dy = -2; - let paddleX = (canvas.width - paddleWidth) / 2; - let score = 0; - let lives = 3; - - let rightPressed = false; - let leftPressed = false; - - const bricks: { status: number; x: number; y: number }[][] = []; - for (let i = 0; i < brickColumnCount; i++) { - bricks[i] = []; - for (let j = 0; j < brickRowCount; j++) { - bricks[i]![j] = { status: 1, x: 0, y: 0 }; - } - } +const BASE_HEIGHT = 320; +const BASE_WIDTH = 480; - document.addEventListener('keydown', keyDownHandler, false); - document.addEventListener('keyup', keyUpHandler, false); - document.addEventListener('mousemove', mouseMoveHandler, false); +const $Data = z.object({ + livesRemaining: z.number().int(), + timeElapsed: z.number() +}); - function keyDownHandler(e: KeyboardEvent) { - if (e.code === 'ArrowRight') { - rightPressed = true; - } else if (e.code === 'ArrowLeft') { - leftPressed = true; - } - } - function keyUpHandler(e: KeyboardEvent) { - if (e.code === 'ArrowRight') { - rightPressed = false; - } else if (e.code === 'ArrowLeft') { - leftPressed = false; - } - } - function mouseMoveHandler(e: MouseEvent) { - const relativeX = e.clientX - canvas.offsetLeft; - if (relativeX > 0 && relativeX < canvas.width) { - paddleX = relativeX - paddleWidth / 2; - } - } +type Data = z.infer; - function collisionDetection() { - for (let i = 0; i < brickColumnCount; i++) { - for (let j = 0; j < brickRowCount; j++) { - const b = bricks[i]![j]!; - if (b.status === 1) { - if (x > b.x && x < b.x + brickWidth && y > b.y && y < b.y + brickHeight) { - dy = -dy; - b.status = 0; - score++; - // eslint-disable-next-line max-depth - if (score === brickRowCount * brickColumnCount) { - done({ - livesRemaining: lives, - timeElapsed: Date.now() - startTime - }); - } - } - } - } - } - } +function getScale() { + const ratios = [1, 1.25, 1.5, 2]; + for (let i = 1; i < ratios.length; i++) { + const multiplier = ratios[i]! + 0.25; + const [heightThreshold, widthThreshold] = [BASE_HEIGHT * multiplier, BASE_WIDTH * multiplier]; + if (window.innerHeight < heightThreshold || window.innerWidth < widthThreshold) { + return ratios[i - 1]!; + } + } + return ratios.at(-1)!; +} - function drawBall() { - ctx.beginPath(); - ctx.arc(x, y, ballRadius, 0, Math.PI * 2); - ctx.fillStyle = '#0095DD'; - ctx.fill(); - ctx.closePath(); - } - function drawPaddle() { - ctx.beginPath(); - ctx.rect(paddleX, canvas.height - paddleHeight, paddleWidth, paddleHeight); - ctx.fillStyle = '#0095DD'; - ctx.fill(); - ctx.closePath(); - } - function drawBricks() { - for (let i = 0; i < brickColumnCount; i++) { - for (let j = 0; j < brickRowCount; j++) { - if (bricks[i]![j]!.status === 1) { - const brickX = j * (brickWidth + brickPadding) + brickOffsetLeft; - const brickY = i * (brickHeight + brickPadding) + brickOffsetTop; - bricks[i]![j]!.x = brickX; - bricks[i]![j]!.y = brickY; - ctx.beginPath(); - ctx.rect(brickX, brickY, brickWidth, brickHeight); - ctx.fillStyle = '#0095DD'; - ctx.fill(); - ctx.closePath(); - } - } - } - } - function drawScore() { - ctx.font = '16px Arial'; - ctx.fillStyle = '#0095DD'; - ctx.fillText('Score: ' + score, 8, 20); - } - function drawLives() { - ctx.font = '16px Arial'; - ctx.fillStyle = '#0095DD'; - ctx.fillText('Lives: ' + lives, canvas.width - 65, 20); - } +function runTask(root: HTMLDivElement, onComplete: (data: Data) => void) { + const startTime = Date.now(); + const ratio = window.devicePixelRatio * 3; + const scale = getScale(); - function draw() { - ctx.clearRect(0, 0, canvas.width, canvas.height); - drawBricks(); - drawBall(); - drawPaddle(); - drawScore(); - drawLives(); - collisionDetection(); - - if (x + dx > canvas.width - ballRadius || x + dx < ballRadius) { - dx = -dx; - } - if (y + dy < ballRadius) { - dy = -dy; - } else if (y + dy > canvas.height - ballRadius) { - if (x > paddleX && x < paddleX + paddleWidth) { + const canvas = document.createElement('canvas'); + + const height = BASE_HEIGHT * scale; + const width = BASE_WIDTH * scale; + + canvas.width = width * ratio; + canvas.height = height * ratio; + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + + root.appendChild(canvas); + + const ctx = canvas.getContext('2d')!; + ctx.scale(ratio, ratio); + + const ballRadius = 10 * scale; + const brickRowCount = 5; + const brickColumnCount = 3; + const brickWidth = 75 * scale; + const brickHeight = 20 * scale; + const brickPadding = 10 * scale; + const brickOffsetTop = 30 * scale; + const brickOffsetLeft = 30 * scale; + const paddleHeight = 10 * scale; + const paddleWidth = 75 * scale; + + let x = width / 2; + let y = height - 30; + let dx = 2 * scale; + let dy = -2 * scale; + let paddleX = (width - paddleWidth) / 2; + let score = 0; + let lives = 3; + + let rightPressed = false; + let leftPressed = false; + + const bricks: { status: number; x: number; y: number }[][] = []; + for (let i = 0; i < brickColumnCount; i++) { + bricks[i] = []; + for (let j = 0; j < brickRowCount; j++) { + bricks[i]![j] = { status: 1, x: 0, y: 0 }; + } + } + + const keyDownHandler = (e: KeyboardEvent) => { + if (e.code === 'ArrowRight') { + rightPressed = true; + } else if (e.code === 'ArrowLeft') { + leftPressed = true; + } + }; + + const keyUpHandler = (e: KeyboardEvent) => { + if (e.code === 'ArrowRight') { + rightPressed = false; + } else if (e.code === 'ArrowLeft') { + leftPressed = false; + } + }; + + const mouseMoveHandler = (e: MouseEvent) => { + const relativeX = e.clientX - canvas.offsetLeft; + if (relativeX > 0 && relativeX < width) { + paddleX = relativeX - paddleWidth / 2; + } + }; + + const collisionDetection = () => { + for (let i = 0; i < brickColumnCount; i++) { + for (let j = 0; j < brickRowCount; j++) { + const b = bricks[i]![j]!; + if (b.status === 1) { + if (x > b.x && x < b.x + brickWidth && y > b.y && y < b.y + brickHeight) { dy = -dy; - } else { - lives--; - if (!lives) { - done({ + b.status = 0; + score++; + // eslint-disable-next-line max-depth + if (score === brickRowCount * brickColumnCount) { + onComplete({ livesRemaining: lives, timeElapsed: Date.now() - startTime }); - } else { - x = canvas.width / 2; - y = canvas.height - 30; - dx = 2; - dy = -2; - paddleX = (canvas.width - paddleWidth) / 2; } } } + } + } + }; - if (rightPressed && paddleX < canvas.width - paddleWidth) { - paddleX += 7; - } else if (leftPressed && paddleX > 0) { - paddleX -= 7; + const drawBall = () => { + ctx.beginPath(); + ctx.arc(x, y, ballRadius, 0, Math.PI * 2); + ctx.fillStyle = '#0095DD'; + ctx.fill(); + ctx.closePath(); + }; + + const drawPaddle = () => { + ctx.beginPath(); + ctx.rect(paddleX, height - paddleHeight, paddleWidth, paddleHeight); + ctx.fillStyle = '#0095DD'; + ctx.fill(); + ctx.closePath(); + }; + + const drawBricks = () => { + for (let i = 0; i < brickColumnCount; i++) { + for (let j = 0; j < brickRowCount; j++) { + if (bricks[i]![j]!.status === 1) { + const brickX = j * (brickWidth + brickPadding) + brickOffsetLeft; + const brickY = i * (brickHeight + brickPadding) + brickOffsetTop; + bricks[i]![j]!.x = brickX; + bricks[i]![j]!.y = brickY; + ctx.beginPath(); + ctx.rect(brickX, brickY, brickWidth, brickHeight); + ctx.fillStyle = '#0095DD'; + ctx.fill(); + ctx.closePath(); } + } + } + }; + + const drawScore = () => { + ctx.font = '16px Arial'; + ctx.fillStyle = '#0095DD'; + ctx.fillText('Score: ' + score, 8, 20); + }; - x += dx; - y += dy; - requestAnimationFrame(draw); + const drawLives = () => { + ctx.font = '16px Arial'; + ctx.fillStyle = '#0095DD'; + ctx.fillText('Lives: ' + lives, width - 65, 20); + }; + + const draw = () => { + ctx.clearRect(0, 0, width, height); + drawBricks(); + drawBall(); + drawPaddle(); + drawScore(); + drawLives(); + collisionDetection(); + + if (x + dx > width - ballRadius || x + dx < ballRadius) { + dx = -dx; + } + if (y + dy < ballRadius) { + dy = -dy; + } else if (y + dy > height - ballRadius) { + if (x > paddleX && x < paddleX + paddleWidth) { + dy = -dy; + } else { + lives--; + if (!lives) { + onComplete({ + livesRemaining: lives, + timeElapsed: Date.now() - startTime + }); + } else { + x = width / 2; + y = height - 30; + dx = 2 * scale; + dy = -2 * scale; + paddleX = (width - paddleWidth) / 2; + } } + } + + if (rightPressed && paddleX < width - paddleWidth) { + paddleX += 7; + } else if (leftPressed && paddleX > 0) { + paddleX -= 7; + } + + x += dx; + y += dy; + requestAnimationFrame(draw); + }; + + document.addEventListener('keydown', keyDownHandler, false); + document.addEventListener('keyup', keyUpHandler, false); + document.addEventListener('mousemove', mouseMoveHandler, false); + + draw(); +} + +export default defineInstrument({ + clientDetails: { + estimatedDuration: 1, + instructions: ['Please attempt to win the game as quickly as possible.'] + }, + content: { + render(done) { + const root = document.createElement('div'); + root.id = 'root'; + document.body.appendChild(root); + + const initialContent = document.createElement('div'); + initialContent.classList.add('initial-content'); + + const title = document.createElement('h3'); + title.innerText = 'Welcome to the Breakout Task'; + const startButton = document.createElement('button'); + startButton.type = 'button'; + startButton.innerText = 'Start'; + + initialContent.appendChild(title); + initialContent.appendChild(startButton); + + root.appendChild(initialContent); - draw(); + startButton.addEventListener('click', () => { + root.removeChild(initialContent); + runTask(root, done); + }); } }, details: { @@ -222,8 +286,5 @@ export default defineInstrument({ } }, tags: ['Interactive'], - validationSchema: z.object({ - livesRemaining: z.number().int(), - timeElapsed: z.number() - }) + validationSchema: $Data }); diff --git a/packages/instrument-library/src/interactive/breakout-task/styles.css b/packages/instrument-library/src/interactive/breakout-task/styles.css index 901f992bb..dce3183d2 100644 --- a/packages/instrument-library/src/interactive/breakout-task/styles.css +++ b/packages/instrument-library/src/interactive/breakout-task/styles.css @@ -8,3 +8,38 @@ canvas { display: block; margin: 0 auto; } + +#root { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + width: 100vw; +} + +.initial-content { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: 8px; +} + +.initial-content h3 { + font-size: 1.25rem; +} + +.initial-content button { + background-color: blue; + border: none; + border-radius: 0.25rem; + color: white; + padding: 6px 12px; + transition-property: opacity; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 200ms; +} + +.initial-content button:hover { + opacity: 60%; +} diff --git a/packages/instrument-renderer/.storybook/main.cts b/packages/instrument-renderer/.storybook/main.ts similarity index 99% rename from packages/instrument-renderer/.storybook/main.cts rename to packages/instrument-renderer/.storybook/main.ts index 7a664e8a0..8ad67f700 100644 --- a/packages/instrument-renderer/.storybook/main.cts +++ b/packages/instrument-renderer/.storybook/main.ts @@ -1,10 +1,9 @@ import { runtime } from '@opendatacapture/vite-plugin-runtime'; +import type { StorybookConfig } from '@storybook/react-vite'; import autoprefixer from 'autoprefixer'; import tailwindcss from 'tailwindcss'; import { mergeConfig } from 'vite'; -import type { StorybookConfig } from '@storybook/react-vite'; - const config: StorybookConfig = { addons: [ '@storybook/addon-links', diff --git a/packages/instrument-renderer/package.json b/packages/instrument-renderer/package.json index 548d23959..800229617 100644 --- a/packages/instrument-renderer/package.json +++ b/packages/instrument-renderer/package.json @@ -17,7 +17,7 @@ "react": "workspace:react__18.x@*", "react-dom": "workspace:react-dom__18.x@*", "tailwindcss": "3.x", - "vite": "5.x", + "vite": "catalog:", "zod": "workspace:zod__3.23.x@*" }, "dependencies": { @@ -33,7 +33,7 @@ "@opendatacapture/schemas": "workspace:*", "@opendatacapture/subject-utils": "workspace:*", "lodash-es": "workspace:lodash-es__4.x@*", - "lucide-react": "^0.439.0", + "lucide-react": "^0.473.0", "ts-pattern": "workspace:ts-pattern__5.x@*" }, "devDependencies": { @@ -41,8 +41,8 @@ "@opendatacapture/vite-plugin-runtime": "workspace:*", "autoprefixer": "^10.4.20", "esbuild-wasm": "catalog:", - "postcss": "^8.4.45", + "postcss": "^8.5.1", "type-fest": "workspace:type-fest__4.x@*", - "vite": "^5.4.3" + "vite": "catalog:" } } diff --git a/packages/instrument-renderer/src/components/InteractiveContent/InteractiveContent.tsx b/packages/instrument-renderer/src/components/InteractiveContent/InteractiveContent.tsx index 42adfd6de..33d1142cd 100644 --- a/packages/instrument-renderer/src/components/InteractiveContent/InteractiveContent.tsx +++ b/packages/instrument-renderer/src/components/InteractiveContent/InteractiveContent.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect, useState } from 'react'; +import React, { useCallback, useEffect, useRef, useState } from 'react'; import { Button, Separator } from '@douglasneuroinformatics/libui/components'; import { type Theme, useTheme, useTranslation } from '@douglasneuroinformatics/libui/hooks'; @@ -21,6 +21,7 @@ export const InteractiveContent = React.memo(function I const { changeLanguage } = useTranslation(); const [_, updateTheme] = useTheme(); const [scale, setScale] = useState(100); + const iFrameRef = useRef(null); const handleChangeLanguageEvent = useCallback( (event: CustomEvent) => { @@ -56,8 +57,8 @@ export const InteractiveContent = React.memo(function I const handleToggleFullScreen = async () => { if (!document.fullscreenElement) { - await document.documentElement.requestFullscreen(); - } else if (document.exitFullscreen) { + await iFrameRef.current?.requestFullscreen(); + } else { await document.exitFullscreen(); } }; @@ -109,8 +110,9 @@ export const InteractiveContent = React.memo(function I className="origin-top-left" data-bundle={bundle} name="interactive-instrument" + ref={iFrameRef} srcDoc={``} - style={{ height: dimensions, scale: `${scale}%`, width: dimensions }} + style={{ backgroundColor: 'white', height: dimensions, scale: `${scale}%`, width: dimensions }} title="Open Data Capture - Interactive Instrument" />
diff --git a/packages/instrument-utils/src/translate.ts b/packages/instrument-utils/src/translate.ts index af94a40a1..d9bf17791 100644 --- a/packages/instrument-utils/src/translate.ts +++ b/packages/instrument-utils/src/translate.ts @@ -15,7 +15,7 @@ import type { UnilingualClientInstrumentDetails, UnilingualInstrumentMeasures } from '@opendatacapture/runtime-core'; -import type { InstrumentInfo, UnilingualInstrumentInfo } from '@opendatacapture/schemas/instrument'; +import type { InstrumentInfo, TranslatedInstrumentInfo } from '@opendatacapture/schemas/instrument'; import { mapValues, wrap } from 'lodash-es'; import { match, P } from 'ts-pattern'; @@ -309,9 +309,9 @@ function translateSeries(series: SeriesInstrument, language: Languag * @param preferredLanguage - The user's preferred language. * @returns A translated unilingual instrument. */ -export function translateInstrumentInfo(info: InstrumentInfo, preferredLanguage: Language): UnilingualInstrumentInfo { +export function translateInstrumentInfo(info: InstrumentInfo, preferredLanguage: Language): TranslatedInstrumentInfo { if (isUnilingualInstrumentInfo(info)) { - return info; + return { ...info, supportedLanguages: [info.language] }; } else if (!isMultilingualInstrumentInfo(info)) { throw new Error(`Unexpected value for property 'language': ${JSON.stringify(info.language)}`); } @@ -321,6 +321,7 @@ export function translateInstrumentInfo(info: InstrumentInfo, preferredLanguage: clientDetails: translateClientDetails(info.clientDetails, targetLanguage), details: translateDetails(info.details, targetLanguage), language: targetLanguage, + supportedLanguages: info.language, tags: info.tags[targetLanguage] }; } diff --git a/packages/react-core/.storybook/main.cts b/packages/react-core/.storybook/main.ts similarity index 99% rename from packages/react-core/.storybook/main.cts rename to packages/react-core/.storybook/main.ts index 120b6fb87..9a1acfba6 100644 --- a/packages/react-core/.storybook/main.cts +++ b/packages/react-core/.storybook/main.ts @@ -1,9 +1,8 @@ +import type { StorybookConfig } from '@storybook/react-vite'; import autoprefixer from 'autoprefixer'; import tailwindcss from 'tailwindcss'; import { mergeConfig } from 'vite'; -import type { StorybookConfig } from '@storybook/react-vite'; - const config: StorybookConfig = { addons: [ '@storybook/addon-links', diff --git a/packages/react-core/package.json b/packages/react-core/package.json index bd09487fd..47ccfef15 100644 --- a/packages/react-core/package.json +++ b/packages/react-core/package.json @@ -24,15 +24,15 @@ "@douglasneuroinformatics/libjs": "catalog:", "@douglasneuroinformatics/libui": "catalog:", "@opendatacapture/runtime-core": "workspace:*", - "framer-motion": "^11.5.4", "http-status-codes": "^2.3.0", - "lucide-react": "^0.439.0", + "lucide-react": "^0.473.0", + "motion": "^11.15.0", "serialize-error": "^11.0.3", "ts-pattern": "workspace:ts-pattern__5.x@*" }, "devDependencies": { "autoprefixer": "^10.4.20", - "postcss": "^8.4.45", - "vite": "^5.4.3" + "postcss": "^8.5.1", + "vite": "catalog:" } } diff --git a/packages/react-core/src/components/CopyButton/CopyButton.tsx b/packages/react-core/src/components/CopyButton/CopyButton.tsx index efe34d1a2..141ab7ff6 100644 --- a/packages/react-core/src/components/CopyButton/CopyButton.tsx +++ b/packages/react-core/src/components/CopyButton/CopyButton.tsx @@ -1,8 +1,8 @@ import React, { useState } from 'react'; import { Button, type ButtonProps } from '@douglasneuroinformatics/libui/components'; -import { AnimatePresence, motion } from 'framer-motion'; import { ClipboardCheckIcon, ClipboardListIcon } from 'lucide-react'; +import { AnimatePresence, motion } from 'motion/react'; import { match } from 'ts-pattern'; export const CopyButton: React.FC<{ size?: ButtonProps['size']; text: string; variant?: ButtonProps['variant'] }> = ({ diff --git a/packages/runtime-bundler/src/resolver.ts b/packages/runtime-bundler/src/resolver.ts index ccec0a2ab..3608cfd6b 100644 --- a/packages/runtime-bundler/src/resolver.ts +++ b/packages/runtime-bundler/src/resolver.ts @@ -65,7 +65,7 @@ export class Resolver { }); } else if (!isPlainObject(packageJson.exports)) { throw ResolverError.forPackage(id, { - explanation: `invalid value '${String(packageJson.exports)}' for property 'exports' in file '${packageJsonPath}'` + explanation: `invalid value '${JSON.stringify(packageJson.exports)}' for property 'exports' in file '${packageJsonPath}'` }); } else if (Object.keys(packageJson.exports).length === 0) { throw ResolverError.forPackage(id, { diff --git a/packages/runtime-core/src/define.d.ts b/packages/runtime-core/src/define.d.ts index 189b7810a..1302f8572 100644 --- a/packages/runtime-core/src/define.d.ts +++ b/packages/runtime-core/src/define.d.ts @@ -20,28 +20,19 @@ type DiscriminatedInstrument< : never : never; -/** @public */ -type LegacyInstrumentProperties = { - details: { - estimatedDuration?: never; - instructions?: never; - }; -}; - /** @public */ type InstrumentDef< TKind extends InstrumentKind, TLanguage extends InstrumentLanguage, TSchema extends z.ZodTypeAny -> = LegacyInstrumentProperties & - Omit< - DiscriminatedInstrument>, - '__runtimeVersion' | 'kind' | 'language' | 'validationSchema' - > & { - kind: TKind; - language: TLanguage; - validationSchema: TSchema; - }; +> = Omit< + DiscriminatedInstrument>, + '__runtimeVersion' | 'kind' | 'language' | 'validationSchema' +> & { + kind: TKind; + language: TLanguage; + validationSchema: TSchema; +}; /** @public */ export declare function defineInstrument< diff --git a/packages/schemas/package.json b/packages/schemas/package.json index 90d104684..4b2d01f4c 100644 --- a/packages/schemas/package.json +++ b/packages/schemas/package.json @@ -30,7 +30,7 @@ "zod": "workspace:zod__3.23.x@*" }, "devDependencies": { - "@casl/prisma": "^1.4.1", + "@casl/prisma": "^1.5.1", "@opendatacapture/instrument-stubs": "workspace:*", "type-fest": "workspace:type-fest__4.x@*" } diff --git a/packages/schemas/src/instrument/instrument.base.ts b/packages/schemas/src/instrument/instrument.base.ts index 81a61e266..9b013ada8 100644 --- a/packages/schemas/src/instrument/instrument.base.ts +++ b/packages/schemas/src/instrument/instrument.base.ts @@ -182,6 +182,11 @@ const $InstrumentInfo = $BaseInstrument /** @internal */ type UnilingualInstrumentInfo = Simplify>>; +/** @internal */ +type TranslatedInstrumentInfo = UnilingualInstrumentInfo & { + supportedLanguages: Language[]; +}; + /** @internal */ type MultilingualInstrumentInfo = Simplify>>; @@ -238,5 +243,6 @@ export type { MultilingualInstrumentInfo, ScalarInstrumentBundleContainer, SeriesInstrumentBundleContainer, + TranslatedInstrumentInfo, UnilingualInstrumentInfo }; diff --git a/packages/schemas/src/user/user.ts b/packages/schemas/src/user/user.ts index 7745fd37f..cafcdaa9c 100644 --- a/packages/schemas/src/user/user.ts +++ b/packages/schemas/src/user/user.ts @@ -7,16 +7,17 @@ export const $BasePermissionLevel = z.enum(['ADMIN', 'GROUP_MANAGER', 'STANDARD' export type BasePermissionLevel = z.infer; -const $AdditionalPermissions = z.array( - z.object({ - action: $AppAction, - subject: $AppSubjectName - }) -); +export type UserPermission = z.infer; +export const $UserPermission = z.object({ + action: $AppAction, + subject: $AppSubjectName +}); + +export const $AdditionalUserPermissions = z.array($UserPermission); export type User = z.infer; export const $User = $BaseModel.extend({ - additionalPermissions: $AdditionalPermissions, + additionalPermissions: $AdditionalUserPermissions, basePermissionLevel: $BasePermissionLevel.nullable(), dateOfBirth: z.coerce.date().nullish(), firstName: z.string().min(1), @@ -44,5 +45,5 @@ export const $CreateUserData = $User export type UpdateUserData = z.infer; export const $UpdateUserData = $CreateUserData.partial().extend({ - additionalPermissions: $AdditionalPermissions.optional() + additionalPermissions: $AdditionalUserPermissions.optional() }); diff --git a/packages/vite-plugin-runtime/package.json b/packages/vite-plugin-runtime/package.json index 1ea253bb3..5e7b21532 100644 --- a/packages/vite-plugin-runtime/package.json +++ b/packages/vite-plugin-runtime/package.json @@ -16,7 +16,7 @@ }, "peerDependencies": { "@opendatacapture/runtime-v1": "workspace:*", - "vite": "5.x" + "vite": "catalog:" }, "devDependencies": { "@douglasneuroinformatics/libjs": "catalog:" diff --git a/packages/vite-plugin-runtime/src/resolve.js b/packages/vite-plugin-runtime/src/resolve.js index 8297f0d0f..dac9f056e 100644 --- a/packages/vite-plugin-runtime/src/resolve.js +++ b/packages/vite-plugin-runtime/src/resolve.js @@ -75,7 +75,9 @@ export async function resolveVersion(version) { /** @returns {Promise} */ export async function resolvePackages() { - const versions = await fs.promises.readdir(RUNTIME_DIR, 'utf-8'); + const versions = await fs.promises + .readdir(RUNTIME_DIR, 'utf-8') + .then((entries) => entries.filter((entry) => entry.match(/^v\d/))); return await Promise.all(versions.map((version) => resolveVersion(version))); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d4c2bcacc..68b1c5a71 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,19 +14,19 @@ catalogs: version: 1.5.0 '@douglasneuroinformatics/esbuild-plugin-prisma': specifier: latest - version: 1.0.0 + version: 1.0.1 '@douglasneuroinformatics/eslint-config': specifier: latest - version: 5.2.3 + version: 5.2.4 '@douglasneuroinformatics/libcrypto': specifier: latest version: 0.0.2 '@douglasneuroinformatics/libjs': specifier: latest - version: 1.0.2 + version: 1.2.0 '@douglasneuroinformatics/libnest': - specifier: latest - version: 0.5.0 + specifier: ^0.5.1 + version: 0.5.1 '@douglasneuroinformatics/libpasswd': specifier: latest version: 0.0.3 @@ -34,8 +34,8 @@ catalogs: specifier: latest version: 0.2.0 '@douglasneuroinformatics/libui': - specifier: latest - version: 3.7.3 + specifier: ^3.8.6 + version: 3.8.6 '@douglasneuroinformatics/libui-form-types': specifier: latest version: 0.11.0 @@ -84,63 +84,66 @@ catalogs: tsx: specifier: 4.8.2 version: 4.8.2 + vite: + specifier: ^5.4.12 + version: 5.4.14 importers: .: devDependencies: '@commitlint/cli': - specifier: ^19.4.1 - version: 19.5.0(@types/node@20.17.6)(typescript@5.5.4) + specifier: ^19.6.1 + version: 19.6.1(@types/node@20.17.6)(typescript@5.6.3) '@commitlint/config-conventional': - specifier: ^19.4.1 - version: 19.5.0 + specifier: ^19.6.0 + version: 19.6.0 '@commitlint/types': - specifier: ^19.0.3 + specifier: ^19.5.0 version: 19.5.0 '@douglasneuroinformatics/eslint-config': specifier: 'catalog:' - version: 5.2.3(astro-eslint-parser@1.1.0(typescript@5.5.4))(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4) + version: 5.2.4(astro-eslint-parser@1.1.0(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) '@douglasneuroinformatics/prettier-config': specifier: 'catalog:' - version: 0.0.1(husky@9.1.6)(prettier-plugin-astro@0.14.1)(prettier-plugin-tailwindcss@0.6.8(prettier-plugin-astro@0.14.1)(prettier@3.3.3))(prettier@3.3.3) + version: 0.0.1(husky@9.1.7)(prettier-plugin-astro@0.14.1)(prettier-plugin-tailwindcss@0.6.10(prettier-plugin-astro@0.14.1)(prettier@3.4.2))(prettier@3.4.2) '@douglasneuroinformatics/tsconfig': specifier: 'catalog:' - version: 1.0.2(typescript@5.5.4) + version: 1.0.2(typescript@5.6.3) '@storybook/addon-essentials': - specifier: ^8.2.9 - version: 8.4.3(@types/react@18.3.12)(storybook@8.4.3(prettier@3.3.3)) + specifier: ^8.5.0 + version: 8.5.0(@types/react@18.3.12)(storybook@8.5.0(prettier@3.4.2)) '@storybook/addon-interactions': - specifier: ^8.2.9 - version: 8.4.3(storybook@8.4.3(prettier@3.3.3)) + specifier: ^8.5.0 + version: 8.5.0(storybook@8.5.0(prettier@3.4.2)) '@storybook/addon-links': - specifier: ^8.2.9 - version: 8.4.3(react@18.3.1)(storybook@8.4.3(prettier@3.3.3)) + specifier: ^8.5.0 + version: 8.5.0(react@18.3.1)(storybook@8.5.0(prettier@3.4.2)) '@storybook/addon-themes': - specifier: ^8.2.9 - version: 8.4.3(storybook@8.4.3(prettier@3.3.3)) + specifier: ^8.5.0 + version: 8.5.0(storybook@8.5.0(prettier@3.4.2)) '@storybook/blocks': - specifier: ^8.2.9 - version: 8.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.3(prettier@3.3.3)) + specifier: ^8.5.0 + version: 8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2)) '@storybook/icons': - specifier: ^1.2.10 - version: 1.2.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^1.3.0 + version: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/react': - specifier: ^8.2.9 - version: 8.4.3(@storybook/test@8.4.3(storybook@8.4.3(prettier@3.3.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.3(prettier@3.3.3))(typescript@5.5.4) + specifier: ^8.5.0 + version: 8.5.0(@storybook/test@8.5.0(storybook@8.5.0(prettier@3.4.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2))(typescript@5.6.3) '@storybook/react-vite': - specifier: ^8.2.9 - version: 8.4.3(@storybook/test@8.4.3(storybook@8.4.3(prettier@3.3.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.26.0)(storybook@8.4.3(prettier@3.3.3))(typescript@5.5.4)(vite@5.4.11(@types/node@20.17.6)) + specifier: ^8.5.0 + version: 8.5.0(@storybook/test@8.5.0(storybook@8.5.0(prettier@3.4.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(storybook@8.5.0(prettier@3.4.2))(typescript@5.6.3)(vite@5.4.14(@types/node@20.17.6)) '@swc-node/register': specifier: ^1.10.9 - version: 1.10.9(@swc/core@1.9.2(@swc/helpers@0.5.15))(@swc/types@0.1.15)(typescript@5.5.4) + version: 1.10.9(@swc/core@1.10.9(@swc/helpers@0.5.15))(@swc/types@0.1.17)(typescript@5.6.3) '@swc/cli': - specifier: ^0.4.0 - version: 0.4.0(@swc/core@1.9.2(@swc/helpers@0.5.15))(chokidar@3.6.0) + specifier: ^0.6.0 + version: 0.6.0(@swc/core@1.10.9(@swc/helpers@0.5.15))(chokidar@4.0.1) '@swc/core': - specifier: ^1.7.24 - version: 1.9.2(@swc/helpers@0.5.15) + specifier: ^1.10.9 + version: 1.10.9(@swc/helpers@0.5.15) '@swc/helpers': - specifier: ^0.5.13 + specifier: ^0.5.15 version: 0.5.15 '@types/github-script': specifier: https://github.com/actions/github-script/archive/refs/tags/v7.0.1.tar.gz @@ -153,58 +156,58 @@ importers: version: 20.17.6 '@vitest/browser': specifier: ^2.0.5 - version: 2.1.5(@types/node@20.17.6)(typescript@5.5.4)(vite@5.4.11(@types/node@20.17.6))(vitest@2.1.5) + version: 2.1.5(@types/node@20.17.6)(typescript@5.6.3)(vite@5.4.14(@types/node@20.17.6))(vitest@2.1.5) '@vitest/coverage-v8': specifier: ^2.0.5 version: 2.1.5(@vitest/browser@2.1.5)(vitest@2.1.5) dotenv: - specifier: ^16.4.5 - version: 16.4.5 + specifier: ^16.4.7 + version: 16.4.7 env-cmd: specifier: ^10.1.0 version: 10.1.0 eslint: - specifier: ^9.10.0 - version: 9.14.0(jiti@1.21.6) + specifier: ^9.18.0 + version: 9.18.0(jiti@2.4.2) expect-type: specifier: ^0.20.0 version: 0.20.0 husky: - specifier: ^9.1.5 - version: 9.1.6 + specifier: ^9.1.7 + version: 9.1.7 js-yaml: specifier: ^4.1.0 version: 4.1.0 prettier: - specifier: ^3.3.3 - version: 3.3.3 + specifier: ^3.4.2 + version: 3.4.2 prettier-plugin-astro: specifier: ^0.14.1 version: 0.14.1 prettier-plugin-tailwindcss: - specifier: ^0.6.6 - version: 0.6.8(prettier-plugin-astro@0.14.1)(prettier@3.3.3) + specifier: ^0.6.10 + version: 0.6.10(prettier-plugin-astro@0.14.1)(prettier@3.4.2) start-server-and-test: - specifier: ^2.0.8 - version: 2.0.8 + specifier: ^2.0.10 + version: 2.0.10 storybook: - specifier: ^8.2.9 - version: 8.4.3(prettier@3.3.3) + specifier: ^8.5.0 + version: 8.5.0(prettier@3.4.2) tsx: specifier: 'catalog:' version: 4.8.2 turbo: - specifier: ^2.1.1 - version: 2.2.3 + specifier: ^2.3.3 + version: 2.3.3 typescript: - specifier: ~5.5.4 - version: 5.5.4 + specifier: 5.6.x + version: 5.6.3 unplugin-swc: specifier: ^1.5.1 - version: 1.5.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(rollup@4.26.0) + version: 1.5.1(@swc/core@1.10.9(@swc/helpers@0.5.15))(rollup@4.31.0) vitest: specifier: ^2.1.1 - version: 2.1.5(@types/node@20.17.6)(@vitest/browser@2.1.5)(happy-dom@15.11.4)(msw@2.6.4(@types/node@20.17.6)(typescript@5.5.4)) + version: 2.1.5(@types/node@20.17.6)(@vitest/browser@2.1.5)(happy-dom@15.11.4)(msw@2.6.4(@types/node@20.17.6)(typescript@5.6.3)) apps/api: dependencies: @@ -219,19 +222,19 @@ importers: version: 0.0.2 '@douglasneuroinformatics/libjs': specifier: 'catalog:' - version: 1.0.2(typescript@5.5.4) + version: 1.2.0(typescript@5.6.3) '@douglasneuroinformatics/libnest': specifier: 'catalog:' - version: 0.5.0(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7)(@nestjs/testing@10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7))(@prisma/client@5.22.0(prisma@5.22.0))(express@4.21.1)(mongodb@6.10.0(socks@2.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.1)(typescript@5.5.4)(zod@vendor+zod@3.23.x) + version: 0.5.1(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7)(@nestjs/testing@10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7))(@prisma/client@5.22.0(prisma@5.22.0))(express@4.21.2)(mongodb@6.12.0(socks@2.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.1)(typescript@5.6.3)(zod@vendor+zod@3.23.x) '@douglasneuroinformatics/libpasswd': specifier: 'catalog:' - version: 0.0.3(typescript@5.5.4) + version: 0.0.3(typescript@5.6.3) '@douglasneuroinformatics/libstats': specifier: 'catalog:' version: 0.2.0 '@faker-js/faker': - specifier: ^9.0.0 - version: 9.2.0 + specifier: ^9.4.0 + version: 9.4.0 '@nestjs/axios': specifier: ^3.0.3 version: 3.1.2(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(axios@1.7.7)(rxjs@7.8.1) @@ -248,8 +251,8 @@ importers: specifier: ^10.2.0 version: 10.2.0(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1)) '@nestjs/mapped-types': - specifier: 2.0.5 - version: 2.0.5(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(reflect-metadata@0.1.14) + specifier: 2.1.0 + version: 2.1.0(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(reflect-metadata@0.1.14) '@nestjs/passport': specifier: ^10.0.3 version: 10.0.3(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(passport@0.7.0) @@ -260,8 +263,8 @@ importers: specifier: ^7.4.0 version: 7.4.2(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.1.14) '@nestjs/throttler': - specifier: ^6.2.1 - version: 6.2.1(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.1.14) + specifier: ^6.3.0 + version: 6.3.0(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.1.14) '@opendatacapture/demo': specifier: workspace:* version: link:../../packages/demo @@ -291,16 +294,16 @@ importers: version: 5.22.0(prisma@5.22.0) axios: specifier: 'catalog:' - version: 1.7.7(debug@4.3.7) + version: 1.7.7 express: - specifier: ^4.19.2 - version: 4.21.1 + specifier: ^4.21.2 + version: 4.21.2 lodash-es: specifier: workspace:lodash-es__4.x@* version: link:../../vendor/lodash-es@4.x mongodb: - specifier: ^6.8.1 - version: 6.10.0(socks@2.8.3) + specifier: ^6.12.0 + version: 6.12.0(socks@2.8.3) passport: specifier: ^0.7.0 version: 0.7.0 @@ -322,7 +325,7 @@ importers: devDependencies: '@douglasneuroinformatics/esbuild-plugin-prisma': specifier: 'catalog:' - version: 1.0.0(@prisma/client@5.22.0(prisma@5.22.0))(@prisma/engines@5.22.0)(esbuild@0.23.1)(prisma@5.22.0) + version: 1.0.1(@prisma/client@5.22.0(prisma@5.22.0))(@prisma/engines@5.22.0)(esbuild@0.23.1)(prisma@5.22.0) '@nestjs/testing': specifier: ^10.4.1 version: 10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7) @@ -333,7 +336,7 @@ importers: specifier: ^4.17.21 version: 4.17.21 '@types/passport': - specifier: ^1.0.16 + specifier: ^1.0.17 version: 1.0.17 '@types/passport-jwt': specifier: ^4.0.1 @@ -342,14 +345,14 @@ importers: specifier: ^6.0.2 version: 6.0.2 concurrently: - specifier: ^9.0.0 - version: 9.1.0 + specifier: ^9.1.2 + version: 9.1.2 esbuild: specifier: 'catalog:' version: 0.23.1 esbuild-plugin-tsc: specifier: ^0.4.0 - version: 0.4.0(typescript@5.5.4) + version: 0.4.0(typescript@5.6.3) nodemon: specifier: 'catalog:' version: 3.1.7 @@ -357,8 +360,8 @@ importers: specifier: 'catalog:' version: 5.22.0 prisma-json-types-generator: - specifier: ^3.0.4 - version: 3.1.1(prisma@5.22.0)(typescript@5.5.4) + specifier: ^3.2.2 + version: 3.2.2(prisma@5.22.0)(typescript@5.6.3) supertest: specifier: ^7.0.0 version: 7.0.0 @@ -373,7 +376,7 @@ importers: version: 0.0.2 '@douglasneuroinformatics/libui': specifier: 'catalog:' - version: 3.7.3(@types/react@18.3.12)(immer@10.1.1)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x)(tailwindcss@3.4.14)(typescript@5.5.4)(zod@vendor+zod@3.23.x) + version: 3.8.6(@types/react@18.3.12)(immer@10.1.1)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x)(tailwindcss@3.4.17)(typescript@5.6.3)(zod@vendor+zod@3.23.x) '@opendatacapture/instrument-renderer': specifier: workspace:* version: link:../../packages/instrument-renderer @@ -394,19 +397,19 @@ importers: version: 5.22.0(prisma@5.22.0) axios: specifier: 'catalog:' - version: 1.7.7(debug@4.3.7) + version: 1.7.7 compression: - specifier: ^1.7.4 + specifier: ^1.7.5 version: 1.7.5 express: - specifier: ^4.19.2 - version: 4.21.1 + specifier: ^4.21.2 + version: 4.21.2 lodash-es: specifier: workspace:lodash-es__4.x@* version: link:../../vendor/lodash-es@4.x pino-http: - specifier: ^10.3.0 - version: 10.3.0 + specifier: ^10.4.0 + version: 10.4.0 pino-pretty: specifier: ^11.2.2 version: 11.3.0 @@ -428,7 +431,7 @@ importers: devDependencies: '@douglasneuroinformatics/esbuild-plugin-prisma': specifier: 'catalog:' - version: 1.0.0(@prisma/client@5.22.0(prisma@5.22.0))(@prisma/engines@5.22.0)(esbuild@0.23.1)(prisma@5.22.0) + version: 1.0.1(@prisma/client@5.22.0(prisma@5.22.0))(@prisma/engines@5.22.0)(esbuild@0.23.1)(prisma@5.22.0) '@opendatacapture/release-info': specifier: workspace:* version: link:../../packages/release-info @@ -442,11 +445,11 @@ importers: specifier: ^4.17.21 version: 4.17.21 '@vitejs/plugin-react-swc': - specifier: ^3.7.0 - version: 3.7.1(@swc/helpers@0.5.15)(vite@5.4.11(@types/node@20.17.6)) + specifier: ^3.7.2 + version: 3.7.2(@swc/helpers@0.5.15)(vite@5.4.14(@types/node@20.17.6)) autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.49) + version: 10.4.20(postcss@8.5.1) esbuild: specifier: 'catalog:' version: 0.23.1 @@ -454,26 +457,26 @@ importers: specifier: 'catalog:' version: 3.1.7 postcss: - specifier: ^8.4.45 - version: 8.4.49 + specifier: ^8.5.1 + version: 8.5.1 prisma: specifier: 'catalog:' version: 5.22.0 tailwindcss: - specifier: ^3.4.10 - version: 3.4.14 + specifier: ^3.4.17 + version: 3.4.17 type-fest: specifier: workspace:type-fest__4.x@* version: link:../../vendor/type-fest@4.x vite: - specifier: ^5.4.3 - version: 5.4.11(@types/node@20.17.6) + specifier: 'catalog:' + version: 5.4.14(@types/node@20.17.6) apps/outreach: dependencies: '@douglasneuroinformatics/libui': specifier: 'catalog:' - version: 3.7.3(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.14)(typescript@5.5.4)(zod@3.23.8) + version: 3.8.6(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.17)(typescript@5.6.3)(zod@3.24.1) '@opendatacapture/schemas': specifier: workspace:* version: link:../../packages/schemas @@ -490,33 +493,33 @@ importers: specifier: ^1.5.0 version: 1.5.0 tailwind-merge: - specifier: ^2.5.2 - version: 2.5.4 + specifier: ^2.6.0 + version: 2.6.0 devDependencies: '@astrojs/check': - specifier: ^0.9.3 - version: 0.9.4(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.5.4) + specifier: ^0.9.4 + version: 0.9.4(prettier-plugin-astro@0.14.1)(prettier@3.4.2)(typescript@5.6.3) '@astrojs/sitemap': - specifier: ^3.1.6 + specifier: ^3.2.1 version: 3.2.1 '@astrojs/starlight': - specifier: ^0.27.1 - version: 0.27.1(astro@4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4)) + specifier: ^0.31.1 + version: 0.31.1(astro@5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0)) '@astrojs/starlight-tailwind': - specifier: ^2.0.3 - version: 2.0.3(@astrojs/starlight@0.27.1(astro@4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4)))(@astrojs/tailwind@5.1.2(astro@4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4))(tailwindcss@3.4.14))(tailwindcss@3.4.14) + specifier: ^3.0.0 + version: 3.0.0(@astrojs/starlight@0.31.1(astro@5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0)))(@astrojs/tailwind@5.1.5(astro@5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0))(tailwindcss@3.4.17))(tailwindcss@3.4.17) '@astrojs/tailwind': - specifier: ^5.1.0 - version: 5.1.2(astro@4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4))(tailwindcss@3.4.14) + specifier: ^5.1.5 + version: 5.1.5(astro@5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0))(tailwindcss@3.4.17) '@opendatacapture/runtime-core': specifier: workspace:* version: link:../../packages/runtime-core '@tailwindcss/typography': - specifier: ^0.5.15 - version: 0.5.15(tailwindcss@3.4.14) + specifier: ^0.5.16 + version: 0.5.16(tailwindcss@3.4.17) astro: - specifier: ^4.16.1 - version: 4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4) + specifier: ^5.1.8 + version: 5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0) github-slugger: specifier: ^2.0.0 version: 2.0.0 @@ -524,17 +527,17 @@ importers: specifier: ^0.33.5 version: 0.33.5 tailwindcss: - specifier: ^3.4.10 - version: 3.4.14 + specifier: ^3.4.17 + version: 3.4.17 type-fest: specifier: workspace:type-fest__4.x@* version: link:../../vendor/type-fest@4.x typedoc: - specifier: ^0.26.7 - version: 0.26.11(typescript@5.5.4) + specifier: ^0.27.6 + version: 0.27.6(typescript@5.6.3) typedoc-plugin-markdown: - specifier: ^4.2.7 - version: 4.2.10(typedoc@0.26.11(typescript@5.5.4)) + specifier: ^4.4.1 + version: 4.4.1(typedoc@0.27.6(typescript@5.6.3)) apps/playground: dependencies: @@ -543,13 +546,13 @@ importers: version: 0.0.2 '@douglasneuroinformatics/libjs': specifier: 'catalog:' - version: 1.0.2(typescript@5.5.4) + version: 1.2.0(typescript@5.6.3) '@douglasneuroinformatics/libui': specifier: 'catalog:' - version: 3.7.3(@types/react@18.3.12)(immer@10.1.1)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x)(tailwindcss@3.4.14)(typescript@5.5.4)(zod@vendor+zod@3.23.x) + version: 3.8.6(@types/react@18.3.12)(immer@10.1.1)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x)(tailwindcss@3.4.17)(typescript@5.6.3)(zod@vendor+zod@3.23.x) '@monaco-editor/react': specifier: ^4.6.0 - version: 4.6.0(monaco-editor@0.51.0)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + version: 4.6.0(monaco-editor@0.52.2)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) '@opendatacapture/instrument-bundler': specifier: workspace:* version: link:../../packages/instrument-bundler @@ -570,13 +573,10 @@ importers: version: link:../../packages/schemas axios: specifier: 'catalog:' - version: 1.7.7(debug@4.3.7) + version: 1.7.7 esbuild-wasm: specifier: 'catalog:' version: 0.23.1 - framer-motion: - specifier: ^11.5.4 - version: 11.11.15(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) immer: specifier: ^10.1.1 version: 10.1.1 @@ -587,17 +587,20 @@ importers: specifier: workspace:lodash-es__4.x@* version: link:../../vendor/lodash-es@4.x lucide-react: - specifier: ^0.439.0 - version: 0.439.0(react@vendor+react@18.x) + specifier: ^0.473.0 + version: 0.473.0(react@vendor+react@18.x) lz-string: specifier: ^1.5.0 version: 1.5.0 monaco-editor: - specifier: ^0.51.0 - version: 0.51.0 + specifier: ^0.52.2 + version: 0.52.2 + motion: + specifier: ^11.15.0 + version: 11.15.0(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) prettier: - specifier: ^3.3.3 - version: 3.3.3 + specifier: ^3.4.2 + version: 3.4.2 react: specifier: workspace:react__18.x@* version: link:../../vendor/react@18.x @@ -605,7 +608,7 @@ importers: specifier: workspace:react-dom__18.x@* version: link:../../vendor/react-dom@18.x react-dropzone: - specifier: ^14.2.3 + specifier: ^14.3.5 version: 14.3.5(react@vendor+react@18.x) react-error-boundary: specifier: ^4.0.13 @@ -620,7 +623,7 @@ importers: specifier: workspace:zod__3.23.x@* version: link:../../vendor/zod@3.23.x zod-validation-error: - specifier: ^3.3.1 + specifier: ^3.4.0 version: 3.4.0(zod@vendor+zod@3.23.x) zustand: specifier: ^4.5.5 @@ -630,23 +633,23 @@ importers: specifier: workspace:* version: link:../../packages/vite-plugin-runtime '@vitejs/plugin-react-swc': - specifier: ^3.7.0 - version: 3.7.1(@swc/helpers@0.5.15)(vite@5.4.11(@types/node@20.17.6)) + specifier: ^3.7.2 + version: 3.7.2(@swc/helpers@0.5.15)(vite@5.4.14(@types/node@20.17.6)) autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.49) + version: 10.4.20(postcss@8.5.1) postcss: - specifier: ^8.4.45 - version: 8.4.49 + specifier: ^8.5.1 + version: 8.5.1 tailwindcss: - specifier: ^3.4.10 - version: 3.4.14 + specifier: ^3.4.17 + version: 3.4.17 type-fest: specifier: workspace:type-fest__4.x@* version: link:../../vendor/type-fest@4.x vite: - specifier: ^5.4.3 - version: 5.4.11(@types/node@20.17.6) + specifier: 'catalog:' + version: 5.4.14(@types/node@20.17.6) apps/web: dependencies: @@ -655,22 +658,22 @@ importers: version: 6.7.2 '@douglasneuroinformatics/libjs': specifier: 'catalog:' - version: 1.0.2(typescript@5.5.4) + version: 1.2.0(typescript@5.6.3) '@douglasneuroinformatics/libpasswd': specifier: 'catalog:' - version: 0.0.3(typescript@5.5.4) + version: 0.0.3(typescript@5.6.3) '@douglasneuroinformatics/libui': specifier: 'catalog:' - version: 3.7.3(@types/react@18.3.12)(immer@10.1.1)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x)(tailwindcss@3.4.14)(typescript@5.5.4)(zod@vendor+zod@3.23.x) + version: 3.8.6(@types/react@18.3.12)(immer@10.1.1)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x)(tailwindcss@3.4.17)(typescript@5.6.3)(zod@vendor+zod@3.23.x) '@heroicons/react': - specifier: ^2.1.5 - version: 2.1.5(react@vendor+react@18.x) + specifier: ^2.2.0 + version: 2.2.0(react@vendor+react@18.x) '@import-meta-env/cli': - specifier: ^0.7.0 - version: 0.7.1(@import-meta-env/unplugin@0.6.0) + specifier: ^0.7.2 + version: 0.7.2(@import-meta-env/unplugin@0.6.2) '@import-meta-env/unplugin': - specifier: ^0.6.0 - version: 0.6.0(@import-meta-env/cli@0.7.1) + specifier: ^0.6.2 + version: 0.6.2(@import-meta-env/cli@0.7.2) '@opendatacapture/demo': specifier: workspace:* version: link:../../packages/demo @@ -705,20 +708,17 @@ importers: specifier: workspace:* version: link:../../packages/subject-utils '@tanstack/react-query': - specifier: ^5.55.4 - version: 5.59.20(react@vendor+react@18.x) + specifier: ^5.64.2 + version: 5.64.2(react@vendor+react@18.x) '@tanstack/react-query-devtools': - specifier: ^5.55.4 - version: 5.59.20(@tanstack/react-query@5.59.20(react@vendor+react@18.x))(react@vendor+react@18.x) + specifier: ^5.64.2 + version: 5.64.2(@tanstack/react-query@5.64.2(react@vendor+react@18.x))(react@vendor+react@18.x) axios: specifier: 'catalog:' - version: 1.7.7(debug@4.3.7) + version: 1.7.7 clsx: specifier: ^2.1.1 version: 2.1.1 - framer-motion: - specifier: ^11.5.4 - version: 11.11.15(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) html2canvas: specifier: ^1.4.1 version: 1.4.1 @@ -732,8 +732,11 @@ importers: specifier: workspace:lodash-es__4.x@* version: link:../../vendor/lodash-es@4.x lucide-react: - specifier: ^0.439.0 - version: 0.439.0(react@vendor+react@18.x) + specifier: ^0.473.0 + version: 0.473.0(react@vendor+react@18.x) + motion: + specifier: ^11.15.0 + version: 11.15.0(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) papaparse: specifier: workspace:papaparse__5.x@* version: link:../../vendor/papaparse@5.x @@ -750,11 +753,11 @@ importers: specifier: ^6.26.1 version: 6.28.0(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) recharts: - specifier: ^2.12.7 - version: 2.13.3(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + specifier: ^2.15.0 + version: 2.15.0(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) tailwind-merge: - specifier: ^2.5.2 - version: 2.5.4 + specifier: ^2.6.0 + version: 2.6.0 ts-pattern: specifier: workspace:ts-pattern__5.x@* version: link:../../vendor/ts-pattern@5.x @@ -790,11 +793,11 @@ importers: specifier: 'catalog:' version: 14.5.2(@testing-library/dom@10.4.0) '@vitejs/plugin-react-swc': - specifier: ^3.7.0 - version: 3.7.1(@swc/helpers@0.5.15)(vite@5.4.11(@types/node@20.17.6)) + specifier: ^3.7.2 + version: 3.7.2(@swc/helpers@0.5.15)(vite@5.4.14(@types/node@20.17.6)) autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.49) + version: 10.4.20(postcss@8.5.1) esbuild-wasm: specifier: 'catalog:' version: 0.23.1 @@ -802,8 +805,8 @@ importers: specifier: 'catalog:' version: 15.11.4 postcss: - specifier: ^8.4.45 - version: 8.4.49 + specifier: ^8.5.1 + version: 8.5.1 prop-types: specifier: ^15.8.1 version: 15.8.1 @@ -814,20 +817,20 @@ importers: specifier: ^2.0.1 version: 2.0.1 tailwindcss: - specifier: ^3.4.10 - version: 3.4.14 + specifier: ^3.4.17 + version: 3.4.17 vite: - specifier: ^5.4.3 - version: 5.4.11(@types/node@20.17.6) + specifier: 'catalog:' + version: 5.4.14(@types/node@20.17.6) vite-plugin-compression: specifier: ^0.5.1 - version: 0.5.1(vite@5.4.11(@types/node@20.17.6)) + version: 0.5.1(vite@5.4.14(@types/node@20.17.6)) packages/demo: dependencies: '@douglasneuroinformatics/libjs': specifier: 'catalog:' - version: 1.0.2(typescript@5.5.4) + version: 1.2.0(typescript@5.6.3) '@opendatacapture/schemas': specifier: workspace:* version: link:../schemas @@ -840,8 +843,8 @@ importers: specifier: ^12.1.0 version: 12.1.0 es-module-lexer: - specifier: ^1.5.4 - version: 1.5.4 + specifier: ^1.6.0 + version: 1.6.0 esbuild: specifier: 'catalog:' version: 0.23.1 @@ -849,8 +852,8 @@ importers: specifier: 'catalog:' version: 0.23.1 glob: - specifier: ^11.0.0 - version: 11.0.0 + specifier: ^11.0.1 + version: 11.0.1 slashes: specifier: ^3.0.12 version: 3.0.12 @@ -910,10 +913,10 @@ importers: dependencies: '@douglasneuroinformatics/libjs': specifier: 'catalog:' - version: 1.0.2(typescript@5.5.4) + version: 1.2.0(typescript@5.6.3) '@douglasneuroinformatics/libui': specifier: 'catalog:' - version: 3.7.3(@types/react@18.3.12)(immer@10.1.1)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x)(tailwindcss@3.4.14)(typescript@5.5.4)(zod@vendor+zod@3.23.x) + version: 3.8.6(@types/react@18.3.12)(immer@10.1.1)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x)(tailwindcss@3.4.14)(typescript@5.6.3)(zod@vendor+zod@3.23.x) '@opendatacapture/evaluate-instrument': specifier: workspace:* version: link:../evaluate-instrument @@ -945,8 +948,8 @@ importers: specifier: workspace:lodash-es__4.x@* version: link:../../vendor/lodash-es@4.x lucide-react: - specifier: ^0.439.0 - version: 0.439.0(react@vendor+react@18.x) + specifier: ^0.473.0 + version: 0.473.0(react@vendor+react@18.x) react: specifier: workspace:react__18.x@* version: link:../../vendor/react@18.x @@ -971,25 +974,25 @@ importers: version: link:../vite-plugin-runtime autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.49) + version: 10.4.20(postcss@8.5.1) esbuild-wasm: specifier: 'catalog:' version: 0.23.1 postcss: - specifier: ^8.4.45 - version: 8.4.49 + specifier: ^8.5.1 + version: 8.5.1 type-fest: specifier: workspace:type-fest__4.x@* version: link:../../vendor/type-fest@4.x vite: - specifier: ^5.4.3 - version: 5.4.11(@types/node@20.17.6) + specifier: 'catalog:' + version: 5.4.14(@types/node@20.17.6) packages/instrument-stubs: dependencies: '@douglasneuroinformatics/libjs': specifier: 'catalog:' - version: 1.0.2(typescript@5.5.4) + version: 1.2.0(typescript@5.6.3) '@opendatacapture/runtime-core': specifier: workspace:* version: link:../runtime-core @@ -1001,7 +1004,7 @@ importers: dependencies: '@douglasneuroinformatics/libjs': specifier: 'catalog:' - version: 1.0.2(typescript@5.5.4) + version: 1.2.0(typescript@5.6.3) '@opendatacapture/runtime-core': specifier: workspace:* version: link:../runtime-core @@ -1021,25 +1024,25 @@ importers: dependencies: '@douglasneuroinformatics/libjs': specifier: 'catalog:' - version: 1.0.2(typescript@5.5.4) + version: 1.2.0(typescript@5.6.3) '@douglasneuroinformatics/libui': specifier: 'catalog:' - version: 3.7.3(@types/react@18.3.12)(immer@10.1.1)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x)(tailwindcss@3.4.14)(typescript@5.5.4)(zod@vendor+zod@3.23.x) + version: 3.8.6(@types/react@18.3.12)(immer@10.1.1)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x)(tailwindcss@3.4.14)(typescript@5.6.3)(zod@vendor+zod@3.23.x) '@opendatacapture/runtime-core': specifier: workspace:* version: link:../runtime-core axios: specifier: 'catalog:' - version: 1.7.7(debug@4.3.7) - framer-motion: - specifier: ^11.5.4 - version: 11.11.15(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + version: 1.7.7 http-status-codes: specifier: ^2.3.0 version: 2.3.0 lucide-react: - specifier: ^0.439.0 - version: 0.439.0(react@vendor+react@18.x) + specifier: ^0.473.0 + version: 0.473.0(react@vendor+react@18.x) + motion: + specifier: ^11.15.0 + version: 11.15.0(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) react: specifier: workspace:react__18.x@* version: link:../../vendor/react@18.x @@ -1061,13 +1064,13 @@ importers: devDependencies: autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.49) + version: 10.4.20(postcss@8.5.1) postcss: - specifier: ^8.4.45 - version: 8.4.49 + specifier: ^8.5.1 + version: 8.5.1 vite: - specifier: ^5.4.3 - version: 5.4.11(@types/node@20.17.6) + specifier: 'catalog:' + version: 5.4.14(@types/node@20.17.6) packages/release-info: dependencies: @@ -1085,7 +1088,7 @@ importers: dependencies: '@douglasneuroinformatics/libjs': specifier: 'catalog:' - version: 1.0.2(typescript@5.5.4) + version: 1.2.0(typescript@5.6.3) esbuild: specifier: 'catalog:' version: 0.23.1 @@ -1125,7 +1128,7 @@ importers: version: 6.7.2 '@douglasneuroinformatics/libjs': specifier: 'catalog:' - version: 1.0.2(typescript@5.5.4) + version: 1.2.0(typescript@5.6.3) '@opendatacapture/licenses': specifier: workspace:* version: link:../licenses @@ -1137,8 +1140,8 @@ importers: version: link:../../vendor/zod@3.23.x devDependencies: '@casl/prisma': - specifier: ^1.4.1 - version: 1.5.0(@casl/ability@6.7.2)(@prisma/client@5.22.0(prisma@5.22.0)) + specifier: ^1.5.1 + version: 1.5.1(@casl/ability@6.7.2)(@prisma/client@5.22.0(prisma@5.22.0)) '@opendatacapture/instrument-stubs': specifier: workspace:* version: link:../instrument-stubs @@ -1168,12 +1171,12 @@ importers: specifier: workspace:* version: link:../../runtime/v1 vite: - specifier: 5.x - version: 5.4.11(@types/node@20.17.6) + specifier: 'catalog:' + version: 5.4.14(@types/node@20.17.6) devDependencies: '@douglasneuroinformatics/libjs': specifier: 'catalog:' - version: 1.0.2(typescript@5.5.4) + version: 1.2.0(typescript@5.6.3) runtime/v1: devDependencies: @@ -1302,10 +1305,10 @@ importers: version: 6.7.2 '@douglasneuroinformatics/libjs': specifier: 'catalog:' - version: 1.0.2(typescript@5.5.4) + version: 1.2.0(typescript@5.6.3) '@faker-js/faker': - specifier: ^9.0.0 - version: 9.2.0 + specifier: ^9.4.0 + version: 9.4.0 '@opendatacapture/schemas': specifier: 'workspace:' version: link:../../packages/schemas @@ -1330,8 +1333,8 @@ importers: version: link:../../vendor/lodash-es@4.x devDependencies: '@types/k6': - specifier: ~0.53.1 - version: 0.53.2 + specifier: ~0.54.2 + version: 0.54.2 esbuild: specifier: 'catalog:' version: 0.23.1 @@ -1644,9 +1647,9 @@ packages: resolution: { integrity: sha512-bL/O7YBxsFt55YHU021oL+xz+B/9HvGNId3F9xURN16aeqDK9juHGktdkCSXz+U4nqFACq6ZFvWomOzhV+zfPw== } - '@astrojs/internal-helpers@0.4.1': + '@astrojs/internal-helpers@0.4.2': resolution: - { integrity: sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g== } + { integrity: sha512-EdDWkC3JJVcpGpqJAU/5hSk2LKXyG3mNGkzGoAuyK+xoPHbaVdSuIWoN1QTnmK3N/gGfaaAfM8gO2KDCAW7S3w== } '@astrojs/language-server@2.15.4': resolution: @@ -1661,51 +1664,51 @@ packages: prettier-plugin-astro: optional: true - '@astrojs/markdown-remark@5.3.0': + '@astrojs/markdown-remark@6.0.2': resolution: - { integrity: sha512-r0Ikqr0e6ozPb5bvhup1qdWnSPUvQu6tub4ZLYaKyG50BXZ0ej6FhGz3GpChKpH7kglRFPObJd/bDyf2VM9pkg== } + { integrity: sha512-aAoHGVRK3rebCYbaLjyyR+3VeAuTz4q49syUxJP29Oo5yZHdy4cCAXRqLBdr9mJVlxCUUjZiF0Dau6YBf65SGg== } - '@astrojs/mdx@3.1.9': + '@astrojs/mdx@4.0.7': resolution: - { integrity: sha512-3jPD4Bff6lIA20RQoonnZkRtZ9T3i0HFm6fcDF7BMsKIZ+xBP2KXzQWiuGu62lrVCmU612N+SQVGl5e0fI+zWg== } - engines: { node: ^18.17.1 || ^20.3.0 || >=21.0.0 } + { integrity: sha512-d3PopBTbbCoX3QOmSLYXW6YCZ0dkhNaeP9/Liz9BhEekflMc9IvBjbtNFf1WCEatsl4LLGftyDisfMM3F3LGMA== } + engines: { node: ^18.17.1 || ^20.3.0 || >=22.0.0 } peerDependencies: - astro: ^4.8.0 + astro: ^5.0.0 - '@astrojs/prism@3.1.0': + '@astrojs/prism@3.2.0': resolution: - { integrity: sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw== } - engines: { node: ^18.17.1 || ^20.3.0 || >=21.0.0 } + { integrity: sha512-GilTHKGCW6HMq7y3BUv9Ac7GMe/MO9gi9GW62GzKtth0SwukCu/qp2wLiGpEujhY+VVhaG9v7kv/5vFzvf4NYw== } + engines: { node: ^18.17.1 || ^20.3.0 || >=22.0.0 } '@astrojs/sitemap@3.2.1': resolution: { integrity: sha512-uxMfO8f7pALq0ADL6Lk68UV6dNYjJ2xGUzyjjVj60JLBs5a6smtlkBYv3tQ0DzoqwS7c9n4FUx5lgv0yPo/fgA== } - '@astrojs/starlight-tailwind@2.0.3': + '@astrojs/starlight-tailwind@3.0.0': resolution: - { integrity: sha512-ZwbdXS/9rxYlo3tKZoTZoBPUnaaqek02b341dHwOkmMT0lIR2w+8k0mRUGxnRaYtPdMcaL+nYFd8RUa8sjdyRg== } + { integrity: sha512-oYHG9RY+VaOSeAhheVZfm9HDA892qvcQA82VT86POYmg1OsgBuWwdf1ZbofV8iq/z5kO06ajcSdzhPE8lhEx8g== } peerDependencies: - '@astrojs/starlight': '>=0.9.0' - '@astrojs/tailwind': ^5.0.0 + '@astrojs/starlight': '>=0.30.0' + '@astrojs/tailwind': ^5.1.3 tailwindcss: ^3.3.3 - '@astrojs/starlight@0.27.1': + '@astrojs/starlight@0.31.1': resolution: - { integrity: sha512-L2hEgN/Tk7tfBDeaqUOgOpey5NcUL78FuQa06iNxyZ6RjyYyuXSniOoFxZYIo5PpY9O1dLdK22PkZyCDpO729g== } + { integrity: sha512-VIVkHugwgtEqJPiRH8+ouP0UqUfdmpBO9C64R+6QaQ2qmADNkI/BA3/YAJHTBZYlMQQGEEuLJwD9qpaUovi52Q== } peerDependencies: - astro: ^4.8.6 + astro: ^5.1.5 - '@astrojs/tailwind@5.1.2': + '@astrojs/tailwind@5.1.5': resolution: - { integrity: sha512-IvOF0W/dtHElcXvhrPR35nHmhyV3cfz1EzPitMGtU7sYy9Hci3BNK1To6FWmVuuNKPxza1IgCGetSynJZL7fOg== } + { integrity: sha512-1diguZEau7FZ9vIjzE4BwavGdhD3+JkdS8zmibl1ene+EHgIU5hI0NMgRYG3yea+Niaf7cyMwjeWeLvzq/maxg== } peerDependencies: - astro: ^3.0.0 || ^4.0.0 || ^5.0.0-beta.0 + astro: ^3.0.0 || ^4.0.0 || ^5.0.0 tailwindcss: ^3.0.24 - '@astrojs/telemetry@3.1.0': + '@astrojs/telemetry@3.2.0': resolution: - { integrity: sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA== } - engines: { node: ^18.17.1 || ^20.3.0 || >=21.0.0 } + { integrity: sha512-wxhSKRfKugLwLlr4OFfcqovk+LIFtKwLyGPqMsv+9/ibqqnW3Gv7tBhtKEb0gAyUAC4G9BTVQeQahqnQAhd6IQ== } + engines: { node: ^18.17.1 || ^20.3.0 || >=22.0.0 } '@astrojs/yaml2ts@0.2.2': resolution: @@ -1731,11 +1734,6 @@ packages: { integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw== } engines: { node: '>=6.9.0' } - '@babel/helper-annotate-as-pure@7.25.9': - resolution: - { integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== } - engines: { node: '>=6.9.0' } - '@babel/helper-compilation-targets@7.25.9': resolution: { integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== } @@ -1753,11 +1751,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.25.9': - resolution: - { integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== } - engines: { node: '>=6.9.0' } - '@babel/helper-string-parser@7.25.9': resolution: { integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== } @@ -1784,20 +1777,6 @@ packages: engines: { node: '>=6.0.0' } hasBin: true - '@babel/plugin-syntax-jsx@7.25.9': - resolution: - { integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== } - engines: { node: '>=6.9.0' } - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx@7.25.9': - resolution: - { integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw== } - engines: { node: '>=6.9.0' } - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/runtime@7.26.0': resolution: { integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== } @@ -1845,20 +1824,27 @@ packages: '@casl/ability': ^5.3.0 || ^6.0.0 '@prisma/client': ^2.14.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + '@casl/prisma@1.5.1': + resolution: + { integrity: sha512-SkR0LaBSLVA0aXiYwFDTXIzfQgovpJHr7sXneuKkaw44dlFe0MwtpCMjZs7aCSIJK4SP1yGnHQcKFY7briMf9A== } + peerDependencies: + '@casl/ability': ^5.3.0 || ^6.0.0 + '@prisma/client': ^2.14.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + '@colors/colors@1.5.0': resolution: { integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== } engines: { node: '>=0.1.90' } - '@commitlint/cli@19.5.0': + '@commitlint/cli@19.6.1': resolution: - { integrity: sha512-gaGqSliGwB86MDmAAKAtV9SV1SHdmN8pnGq4EJU4+hLisQ7IFfx4jvU4s+pk6tl0+9bv6yT+CaZkufOinkSJIQ== } + { integrity: sha512-8hcyA6ZoHwWXC76BoC8qVOSr8xHy00LZhZpauiD0iO0VYbVhMnED0da85lTfIULxl7Lj4c6vZgF0Wu/ed1+jlQ== } engines: { node: '>=v18' } hasBin: true - '@commitlint/config-conventional@19.5.0': + '@commitlint/config-conventional@19.6.0': resolution: - { integrity: sha512-OBhdtJyHNPryZKg0fFpZNOBM1ZDbntMvqMuSmpfyP86XSfwzGw4CaoYRG4RutUPg0BTK07VMRIkNJT6wi2zthg== } + { integrity: sha512-DJT40iMnTYtBtUfw9ApbsLZFke1zKh6llITVJ+x9mtpHD08gsNXaIRqHTmwTZL3dNX5+WoyK7pCN/5zswvkBCQ== } engines: { node: '>=v18' } '@commitlint/config-validator@19.5.0': @@ -1881,19 +1867,19 @@ packages: { integrity: sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A== } engines: { node: '>=v18' } - '@commitlint/is-ignored@19.5.0': + '@commitlint/is-ignored@19.6.0': resolution: - { integrity: sha512-0XQ7Llsf9iL/ANtwyZ6G0NGp5Y3EQ8eDQSxv/SRcfJ0awlBY4tHFAvwWbw66FVUaWICH7iE5en+FD9TQsokZ5w== } + { integrity: sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw== } engines: { node: '>=v18' } - '@commitlint/lint@19.5.0': + '@commitlint/lint@19.6.0': resolution: - { integrity: sha512-cAAQwJcRtiBxQWO0eprrAbOurtJz8U6MgYqLz+p9kLElirzSCc0vGMcyCaA1O7AqBuxo11l1XsY3FhOFowLAAg== } + { integrity: sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg== } engines: { node: '>=v18' } - '@commitlint/load@19.5.0': + '@commitlint/load@19.6.1': resolution: - { integrity: sha512-INOUhkL/qaKqwcTUvCE8iIUf5XHsEPCLY9looJ/ipzi7jtGhgmtH7OOFiNvwYgH7mA8osUWOUDV8t4E2HAi4xA== } + { integrity: sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA== } engines: { node: '>=v18' } '@commitlint/message@19.5.0': @@ -1916,9 +1902,9 @@ packages: { integrity: sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA== } engines: { node: '>=v18' } - '@commitlint/rules@19.5.0': + '@commitlint/rules@19.6.0': resolution: - { integrity: sha512-hDW5TPyf/h1/EufSHEKSp6Hs+YVsDMHazfJ2azIk9tHPXS6UqSz1dIRs1gpqS3eMXgtkT7JH6TW4IShdqOwhAw== } + { integrity: sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw== } engines: { node: '>=v18' } '@commitlint/to-lines@19.5.0': @@ -1950,18 +1936,18 @@ packages: resolution: { integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== } - '@douglasneuroinformatics/esbuild-plugin-prisma@1.0.0': + '@douglasneuroinformatics/esbuild-plugin-prisma@1.0.1': resolution: - { integrity: sha512-Lz15P00SGqNBJiPN4StZOXbGt/VzD97izbcHpLa/HSDOnRkdey3dv2n3JA1FUBtQwwbcinAPRbAVQsB38si+zw== } + { integrity: sha512-ytnqIAi3XjME03jffLoCJ6ZxPTbvfaSCaAiOyYSYRb9tfgjRw+hhyyHpxZ56qm5LTdEWC83Mo9AsczEipkaNbQ== } peerDependencies: - '@prisma/client': 5.x - '@prisma/engines': 5.x + '@prisma/client': 5.x || 6.x + '@prisma/engines': 5.x || 6.x esbuild: 0.x - prisma: 5.x + prisma: 5.x || 6.x - '@douglasneuroinformatics/eslint-config@5.2.3': + '@douglasneuroinformatics/eslint-config@5.2.4': resolution: - { integrity: sha512-RixomnpKYmWphsAjLkdxN7+ULlfR6X4eFVTNu8Px6yMVVDe+v81N+Gi8XA5z1UeqXqB9/YB9NH6Y10Vjt57yPQ== } + { integrity: sha512-u4MJdAumGBxqtqLPqz2ky+h9BSU9HUNV4peuHyfnxnwvxV2CHopkvtJ6G/YLKQZ/1IQ/Hwi2r6x8Fj10QSArQA== } peerDependencies: eslint: 9.x typescript: 5.x @@ -1973,21 +1959,15 @@ packages: resolution: { integrity: sha512-dtJE///InYVMLF5av/RTCNAxUXFY2KEt+DElRiXiUM0FfNcLcz1+sB76BfGsD6AGv09p+WLdHFmcS6FDHOTneQ== } - '@douglasneuroinformatics/libjs@0.8.0': - resolution: - { integrity: sha512-UyBnaeoJLaEqWi1whgAjgVdB4Ckkl2yVxP9wNHa/2o1ARyGQg/gwDepGYUkWCoQ6C+QUeEBg7GaX894HHK4mjg== } - peerDependencies: - typescript: ^5.1.0 - - '@douglasneuroinformatics/libjs@1.0.2': + '@douglasneuroinformatics/libjs@1.2.0': resolution: - { integrity: sha512-MyUx0ty8KMZH0ra59TPmzjQH5jtqPuMcGZN7CpzLgZedzcgoIWZCOPbdnjonqyB0q1JaxN8CPIacIFw9NvFS7w== } + { integrity: sha512-oK5HgwsFiHFGwT0TeHH9QnTqYoXgg+PvTrxt5LWylo2500/a87XpWzGseLyqbwATjUW44/27EAYUElrE2adoIA== } peerDependencies: - typescript: ^5.1.0 + typescript: ^5.5.0 - '@douglasneuroinformatics/libnest@0.5.0': + '@douglasneuroinformatics/libnest@0.5.1': resolution: - { integrity: sha512-8o2PPOTu7zTo4ESeu80Wz09Gxn4I05XntimBlpxP2/jTTw154YPXVrfHVvMyJQGCodT+sRU4MzUK/Mq5EmXrAg== } + { integrity: sha512-ZxVDWJJqUGovldla8fs8sI4MQlRbMlIbwup4EKZVoAz1xtloZxzP4ccO8fohZl7tCofdvpx6HQCREQh7K9ANqA== } peerDependencies: '@nestjs/common': ^10.2.3 '@nestjs/core': ^10.2.3 @@ -2071,9 +2051,9 @@ packages: resolution: { integrity: sha512-erds8oNXFrWSJfCglR8S7I3Yfkgx2Vz6RIQTa5OFtVAVx8DTSFf5FbnHpp49l6BcQ4FCU5w/PLO5NWdx08cNUg== } - '@douglasneuroinformatics/libui@3.7.3': + '@douglasneuroinformatics/libui@3.8.6': resolution: - { integrity: sha512-ThcNOM5zE2e3iNYlEOtC+gDFHJovFdhCAp2K+uzIUYcSP1FbY/GogtCnO/3qJFNLdcaNKF42lldjDdbfdp4idw== } + { integrity: sha512-3610m3+1gPaGS5OMA1hKIqlTjMtGK5ZXpBEvZ8DRMCt1H4h3x0YAvi3XM8sK+zZX6v7LcQ/w7wz1xrhOtLAT8Q== } peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -2172,9 +2152,9 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.24.0': + '@esbuild/aix-ppc64@0.24.2': resolution: - { integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw== } + { integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== } engines: { node: '>=18' } cpu: [ppc64] os: [aix] @@ -2200,9 +2180,9 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.24.0': + '@esbuild/android-arm64@0.24.2': resolution: - { integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w== } + { integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== } engines: { node: '>=18' } cpu: [arm64] os: [android] @@ -2228,9 +2208,9 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.24.0': + '@esbuild/android-arm@0.24.2': resolution: - { integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew== } + { integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== } engines: { node: '>=18' } cpu: [arm] os: [android] @@ -2256,9 +2236,9 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.24.0': + '@esbuild/android-x64@0.24.2': resolution: - { integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ== } + { integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== } engines: { node: '>=18' } cpu: [x64] os: [android] @@ -2284,9 +2264,9 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.24.0': + '@esbuild/darwin-arm64@0.24.2': resolution: - { integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw== } + { integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== } engines: { node: '>=18' } cpu: [arm64] os: [darwin] @@ -2312,9 +2292,9 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.24.0': + '@esbuild/darwin-x64@0.24.2': resolution: - { integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA== } + { integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== } engines: { node: '>=18' } cpu: [x64] os: [darwin] @@ -2340,9 +2320,9 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.24.0': + '@esbuild/freebsd-arm64@0.24.2': resolution: - { integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA== } + { integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== } engines: { node: '>=18' } cpu: [arm64] os: [freebsd] @@ -2368,9 +2348,9 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.24.0': + '@esbuild/freebsd-x64@0.24.2': resolution: - { integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ== } + { integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== } engines: { node: '>=18' } cpu: [x64] os: [freebsd] @@ -2396,9 +2376,9 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.24.0': + '@esbuild/linux-arm64@0.24.2': resolution: - { integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g== } + { integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== } engines: { node: '>=18' } cpu: [arm64] os: [linux] @@ -2424,9 +2404,9 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.24.0': + '@esbuild/linux-arm@0.24.2': resolution: - { integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw== } + { integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== } engines: { node: '>=18' } cpu: [arm] os: [linux] @@ -2452,9 +2432,9 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.24.0': + '@esbuild/linux-ia32@0.24.2': resolution: - { integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA== } + { integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== } engines: { node: '>=18' } cpu: [ia32] os: [linux] @@ -2480,9 +2460,9 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.24.0': + '@esbuild/linux-loong64@0.24.2': resolution: - { integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g== } + { integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== } engines: { node: '>=18' } cpu: [loong64] os: [linux] @@ -2508,9 +2488,9 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.24.0': + '@esbuild/linux-mips64el@0.24.2': resolution: - { integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA== } + { integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== } engines: { node: '>=18' } cpu: [mips64el] os: [linux] @@ -2536,9 +2516,9 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.24.0': + '@esbuild/linux-ppc64@0.24.2': resolution: - { integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ== } + { integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== } engines: { node: '>=18' } cpu: [ppc64] os: [linux] @@ -2564,9 +2544,9 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.24.0': + '@esbuild/linux-riscv64@0.24.2': resolution: - { integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw== } + { integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== } engines: { node: '>=18' } cpu: [riscv64] os: [linux] @@ -2592,9 +2572,9 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.24.0': + '@esbuild/linux-s390x@0.24.2': resolution: - { integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g== } + { integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== } engines: { node: '>=18' } cpu: [s390x] os: [linux] @@ -2620,13 +2600,20 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.24.0': + '@esbuild/linux-x64@0.24.2': resolution: - { integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA== } + { integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== } engines: { node: '>=18' } cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.24.2': + resolution: + { integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== } + engines: { node: '>=18' } + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-x64@0.20.2': resolution: { integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== } @@ -2648,9 +2635,9 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.24.0': + '@esbuild/netbsd-x64@0.24.2': resolution: - { integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg== } + { integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== } engines: { node: '>=18' } cpu: [x64] os: [netbsd] @@ -2662,9 +2649,9 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.24.0': + '@esbuild/openbsd-arm64@0.24.2': resolution: - { integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg== } + { integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== } engines: { node: '>=18' } cpu: [arm64] os: [openbsd] @@ -2690,9 +2677,9 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.24.0': + '@esbuild/openbsd-x64@0.24.2': resolution: - { integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q== } + { integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== } engines: { node: '>=18' } cpu: [x64] os: [openbsd] @@ -2718,9 +2705,9 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.24.0': + '@esbuild/sunos-x64@0.24.2': resolution: - { integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA== } + { integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== } engines: { node: '>=18' } cpu: [x64] os: [sunos] @@ -2746,9 +2733,9 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.24.0': + '@esbuild/win32-arm64@0.24.2': resolution: - { integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA== } + { integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== } engines: { node: '>=18' } cpu: [arm64] os: [win32] @@ -2774,9 +2761,9 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.24.0': + '@esbuild/win32-ia32@0.24.2': resolution: - { integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw== } + { integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== } engines: { node: '>=18' } cpu: [ia32] os: [win32] @@ -2802,9 +2789,9 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.24.0': + '@esbuild/win32-x64@0.24.2': resolution: - { integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA== } + { integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== } engines: { node: '>=18' } cpu: [x64] os: [win32] @@ -2821,55 +2808,55 @@ packages: { integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== } engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } - '@eslint/config-array@0.18.0': + '@eslint/config-array@0.19.1': resolution: - { integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw== } + { integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@eslint/core@0.7.0': + '@eslint/core@0.10.0': resolution: - { integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw== } + { integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@eslint/eslintrc@3.1.0': + '@eslint/eslintrc@3.2.0': resolution: - { integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ== } + { integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@eslint/js@9.14.0': + '@eslint/js@9.18.0': resolution: - { integrity: sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg== } + { integrity: sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@eslint/object-schema@2.1.4': + '@eslint/object-schema@2.1.5': resolution: - { integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ== } + { integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@eslint/plugin-kit@0.2.2': + '@eslint/plugin-kit@0.2.5': resolution: - { integrity: sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw== } + { integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@expressive-code/core@0.35.6': + '@expressive-code/core@0.40.1': resolution: - { integrity: sha512-xGqCkmfkgT7lr/rvmfnYdDSeTdCSp1otAHgoFS6wNEeO7wGDPpxdosVqYiIcQ8CfWUABh/pGqWG90q+MV3824A== } + { integrity: sha512-j71gxBepyzBgOtZomxzl8M90AjILf6hZarWFePDis7sTjqCwxWrtZEtTCafto8IOURG/ECZN0g7Ys4zExkNU7Q== } - '@expressive-code/plugin-frames@0.35.6': + '@expressive-code/plugin-frames@0.40.1': resolution: - { integrity: sha512-CqjSWjDJ3wabMJZfL9ZAzH5UAGKg7KWsf1TBzr4xvUbZvWoBtLA/TboBML0U1Ls8h/4TRCIvR4VEb8dv5+QG3w== } + { integrity: sha512-qV7BIdTQ9nJ/eLHaJlzMvUq5aqAoZKO3PLFzBVop/q0d0m5rWpwWncIQ8qkufQDabmq2m38PRRWxKgx5FkJ2Rg== } - '@expressive-code/plugin-shiki@0.35.6': + '@expressive-code/plugin-shiki@0.40.1': resolution: - { integrity: sha512-xm+hzi9BsmhkDUGuyAWIydOAWer7Cs9cj8FM0t4HXaQ+qCubprT6wJZSKUxuvFJIUsIOqk1xXFaJzGJGnWtKMg== } + { integrity: sha512-N5oXhLv5DwLGXmLwJtwMzrfnZPWJl4pHRR5mfDoqK1+NxptdVaaQ0nEjgw13Y5ID/O5Bbze5YcOyph2K52BBrQ== } - '@expressive-code/plugin-text-markers@0.35.6': + '@expressive-code/plugin-text-markers@0.40.1': resolution: - { integrity: sha512-/k9eWVZSCs+uEKHR++22Uu6eIbHWEciVHbIuD8frT8DlqTtHYaaiwHPncO6KFWnGDz5i/gL7oyl6XmOi/E6GVg== } + { integrity: sha512-LsirF7M4F2yWgrFXEocD74F/MaVXsOsHVsRxBLhXQJemSSkWkDp/EZPt//OaqQ8ExnqWZ2lH7E1/KiN46unKjg== } - '@faker-js/faker@9.2.0': + '@faker-js/faker@9.4.0': resolution: - { integrity: sha512-ulqQu4KMr1/sTFIYvqSdegHT8NIkt66tFAkugGnHA+1WAfEn6hMzNR+svjXGFRVLnapxvej67Z/LwchFrnLBUg== } + { integrity: sha512-85+k0AxaZSTowL0gXp8zYWDIrWclTbRPg/pm/V0dSFZ6W6D4lhcG3uuZl4zLsEKfEvs69xDbLN2cHQudwp95JA== } engines: { node: '>=18.0.0', npm: '>=9.0.0' } '@fastify/busboy@2.1.1': @@ -2900,6 +2887,10 @@ packages: resolution: { integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== } + '@gerrit0/mini-shiki@1.27.2': + resolution: + { integrity: sha512-GeWyHz8ao2gBiUW4OJnQDxXQnFgZQwwQk05t/CVVgNBN7/rK8XZ7xY6YhLVv9tH3VppWWmr9DCl3MwemB/i+Og== } + '@hapi/hoek@9.3.0': resolution: { integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== } @@ -2908,11 +2899,11 @@ packages: resolution: { integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== } - '@heroicons/react@2.1.5': + '@heroicons/react@2.2.0': resolution: - { integrity: sha512-FuzFN+BsHa+7OxbvAERtgBTNeZpUjgM/MIizfVkSCL2/edriN0Hx/DWRCR//aPYwO5QX/YlgLGXk+E3PcfZwjA== } + { integrity: sha512-LMcepvRaS9LYHJGsF0zzmgKCUim/X3N/DQKc4jepAXJ7l8QxJ1PmxJzqplF2Z3FE4PqBAIGyJAQ/w4B5dsqbtQ== } peerDependencies: - react: '>= 16' + react: '>= 16 || ^19.0.0-rc' '@hpke/common@1.7.1': resolution: @@ -3073,9 +3064,9 @@ packages: cpu: [x64] os: [win32] - '@import-meta-env/cli@0.7.1': + '@import-meta-env/cli@0.7.2': resolution: - { integrity: sha512-imKcJiUToUyQqo00cXsx9OxLXSeyrjdv5zJ6Sdrs7fuApeaQl9xkNo6ALv6WsSGch2cRByLYwuRw/Vjb9LliZw== } + { integrity: sha512-9Tob+l1K8a2ZS8jMZB9/MlsT5KAEiC3cZhRCNkbjw2Hd8L66pgUluUAwIout+/wnL64CRk7VDThiwpUSqz7sZQ== } engines: { node: '>= 14' } hasBin: true peerDependencies: @@ -3090,9 +3081,9 @@ packages: '@import-meta-env/unplugin': optional: true - '@import-meta-env/unplugin@0.6.0': + '@import-meta-env/unplugin@0.6.2': resolution: - { integrity: sha512-oKttBqTQpAK0D6iWSR952L58+86GW7EMhfHD1ueF7xwJxfbIikvNa+oNIvdinr46m9g0aaHA0XywpZTGCCwm+g== } + { integrity: sha512-m8TEQTgWekSkhlT9lkHBKQ4TDf5l8+BWvO6q/cxcsv1AvyfsOXUOHbvjhKSiVDaz/CDDCbOWc/aOAiPFRzcXGA== } engines: { node: '>= 14' } peerDependencies: '@import-meta-env/cli': ^0.7.0 @@ -3134,12 +3125,12 @@ packages: { integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== } engines: { node: '>=8' } - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0': + '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2': resolution: - { integrity: sha512-2D6y7fNvFmsLmRt6UCOFJPvFoPMJGT0Uh1Wg0RaigUp7kdQPs6yYn8Dmx6GZkOH/NW0yMTwRz/p0SRMMRo50vA== } + { integrity: sha512-feQ+ntr+8hbVudnsTUapiMN9q8T90XA1d5jn9QzY09sNoj4iD9wi0PY1vsBFTda4ZjEaxRK9S81oarR2nj7TFQ== } peerDependencies: typescript: '>= 4.3.x' - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: typescript: optional: true @@ -3290,11 +3281,6 @@ packages: resolution: { integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA== } - '@mole-inc/bin-wrapper@8.0.1': - resolution: - { integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA== } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - '@monaco-editor/loader@1.4.0': resolution: { integrity: sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg== } @@ -3506,6 +3492,20 @@ packages: class-validator: optional: true + '@nestjs/mapped-types@2.1.0': + resolution: + { integrity: sha512-W+n+rM69XsFdwORF11UqJahn4J3xi4g/ZEOlJNL6KoW5ygWSmBB2p0S2BZ4FQeS/NDH72e6xIcu35SfJnE8bXw== } + peerDependencies: + '@nestjs/common': ^10.0.0 || ^11.0.0 + class-transformer: ^0.4.0 || ^0.5.0 + class-validator: ^0.13.0 || ^0.14.0 + reflect-metadata: ^0.1.12 || ^0.2.0 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + '@nestjs/passport@10.0.3': resolution: { integrity: sha512-znJ9Y4S8ZDVY+j4doWAJ8EuuVO7SkQN3yOBmzxbGaXbvcSwFDAdGJ+OMCg52NdzIO4tQoN4pYKx8W6M0ArfFRQ== } @@ -3552,9 +3552,9 @@ packages: '@nestjs/platform-express': optional: true - '@nestjs/throttler@6.2.1': + '@nestjs/throttler@6.3.0': resolution: - { integrity: sha512-vdt6VjhKC6vcLBJRUb97IuR6Htykn5kokZzmT8+S5XFOLLjUF7rzRpr+nUOhK9pi1L0hhbzSf2v2FJl4v64EJA== } + { integrity: sha512-IqTMbl5Iyxjts7NwbVriDND0Cnr8rwNqAPpF5HJE+UV+2VrVUBwCfDXKEiXu47vzzaQLlWPYegBsGO9OXxa+oQ== } peerDependencies: '@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 '@nestjs/core': ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 @@ -3747,37 +3747,37 @@ packages: cpu: [x64] os: [win32] - '@pagefind/darwin-arm64@1.2.0': + '@pagefind/darwin-arm64@1.3.0': resolution: - { integrity: sha512-pHnPL2rm4xbe0LqV376g84hUIsVdy4PK6o2ACveo0DSGoC40eOIwPUPftnUPUinSdDWkkySaL5FT5r9hsXk0ZQ== } + { integrity: sha512-365BEGl6ChOsauRjyVpBjXybflXAOvoMROw3TucAROHIcdBvXk9/2AmEvGFU0r75+vdQI4LJdJdpH4Y6Yqaj4A== } cpu: [arm64] os: [darwin] - '@pagefind/darwin-x64@1.2.0': + '@pagefind/darwin-x64@1.3.0': resolution: - { integrity: sha512-q2tcnfvcRyx0GnrJoUQJ5bRpiFNtI8DZWM6a4/k8sNJxm2dbM1BnY5hUeo4MbDfpb64Qc1wRMcvBUSOaMKBjfg== } + { integrity: sha512-zlGHA23uuXmS8z3XxEGmbHpWDxXfPZ47QS06tGUq0HDcZjXjXHeLG+cboOy828QIV5FXsm9MjfkP5e4ZNbOkow== } cpu: [x64] os: [darwin] - '@pagefind/default-ui@1.2.0': + '@pagefind/default-ui@1.3.0': resolution: - { integrity: sha512-MDSbm34veKpzFP5eJMh/pcPdrOc4FZKUsbpDsbdjSLC2ZeuTjsfDBNu9MGZaNUvGKUdlKk5JozQkVO/dzdSxrQ== } + { integrity: sha512-CGKT9ccd3+oRK6STXGgfH+m0DbOKayX6QGlq38TfE1ZfUcPc5+ulTuzDbZUnMo+bubsEOIypm4Pl2iEyzZ1cNg== } - '@pagefind/linux-arm64@1.2.0': + '@pagefind/linux-arm64@1.3.0': resolution: - { integrity: sha512-wVtLOlF9AUrwLovP9ZSEKOYnwIVrrxId4I2Mz02Zxm3wbUIJyx8wHf6LyEf7W7mJ6rEjW5jtavKAbngKCAaicg== } + { integrity: sha512-8lsxNAiBRUk72JvetSBXs4WRpYrQrVJXjlRRnOL6UCdBN9Nlsz0t7hWstRk36+JqHpGWOKYiuHLzGYqYAqoOnQ== } cpu: [arm64] os: [linux] - '@pagefind/linux-x64@1.2.0': + '@pagefind/linux-x64@1.3.0': resolution: - { integrity: sha512-Lo5aO2bA++sQTeEWzK5WKr3KU0yzVH5OnTY88apZfkgL4AVfXckH2mrOU8ouYKCLNPseIYTLFEdj0V5xjHQSwQ== } + { integrity: sha512-hAvqdPJv7A20Ucb6FQGE6jhjqy+vZ6pf+s2tFMNtMBG+fzcdc91uTw7aP/1Vo5plD0dAOHwdxfkyw0ugal4kcQ== } cpu: [x64] os: [linux] - '@pagefind/windows-x64@1.2.0': + '@pagefind/windows-x64@1.3.0': resolution: - { integrity: sha512-tGQcwQAb5Ndv7woc7lhH9iAdxOnTNsgCz8sEBbsASPB2A0uI8BWBmVdf2GFLQkYHqnnqYuun63sa+UOzB7Ah3g== } + { integrity: sha512-BR1bIRWOMqkf8IoU576YDhij1Wd/Zf2kX/kCI0b2qzCKC8wcc2GQJaaRMCpzvCCrmliO4vtJ6RITp/AnoYUUmQ== } cpu: [x64] os: [win32] @@ -3805,14 +3805,14 @@ packages: prisma: optional: true - '@prisma/debug@5.20.0': - resolution: - { integrity: sha512-oCx79MJ4HSujokA8S1g0xgZUGybD4SyIOydoHMngFYiwEwYDQ5tBQkK5XoEHuwOYDKUOKRn/J0MEymckc4IgsQ== } - '@prisma/debug@5.22.0': resolution: { integrity: sha512-AUt44v3YJeggO2ZU5BkXI7M4hu9BF2zzH2iF2V5pyXT/lRTyWiElZ7It+bRH1EshoMRxHgpYg4VB6rCM+mG5jQ== } + '@prisma/debug@6.0.0': + resolution: + { integrity: sha512-eUjoNThlDXdyJ1iQ2d7U6aTVwm59EwvODb5zFVNJEokNoSiQmiYWNzZIwZyDmZ+j51j42/0iTaHIJ4/aZPKFRg== } + '@prisma/engines-version@5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2': resolution: { integrity: sha512-2PTmxFR2yHW/eB3uqWtcgRcgAbG1rwG9ZriSvQw+nnb7c4uCr3RAcGMb6/zfE88SKlC1Nj2ziUvc96Z379mHgQ== } @@ -3825,9 +3825,9 @@ packages: resolution: { integrity: sha512-bkrD/Mc2fSvkQBV5EpoFcZ87AvOgDxbG99488a5cexp5Ccny+UM6MAe/UFkUC0wLYD9+9befNOqGiIJhhq+HbA== } - '@prisma/generator-helper@5.20.0': + '@prisma/generator-helper@6.0.0': resolution: - { integrity: sha512-37Aibw0wVRQgQVtCdNAIN71YFnSQfvetok7vd95KKkYkQRbEx94gsvPDpyN9Mw7p3IwA3nFgPfLc3jBRztUkKw== } + { integrity: sha512-5DkG7hspZo6U4OtqI2W0JcgtY37sr7HgT8Q0W/sjL4VoV4px6ivzK6Eif5bKM7q+S4yFUHtjUt/3s69ErfLn7A== } '@prisma/get-platform@5.22.0': resolution: @@ -4448,111 +4448,127 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.26.0': + '@rollup/pluginutils@5.1.4': + resolution: + { integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ== } + engines: { node: '>=14.0.0' } + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.31.0': resolution: - { integrity: sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ== } + { integrity: sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA== } cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.26.0': + '@rollup/rollup-android-arm64@4.31.0': resolution: - { integrity: sha512-YJa5Gy8mEZgz5JquFruhJODMq3lTHWLm1fOy+HIANquLzfIOzE9RA5ie3JjCdVb9r46qfAQY/l947V0zfGJ0OQ== } + { integrity: sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g== } cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.26.0': + '@rollup/rollup-darwin-arm64@4.31.0': resolution: - { integrity: sha512-ErTASs8YKbqTBoPLp/kA1B1Um5YSom8QAc4rKhg7b9tyyVqDBlQxy7Bf2wW7yIlPGPg2UODDQcbkTlruPzDosw== } + { integrity: sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g== } cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.26.0': + '@rollup/rollup-darwin-x64@4.31.0': resolution: - { integrity: sha512-wbgkYDHcdWW+NqP2mnf2NOuEbOLzDblalrOWcPyY6+BRbVhliavon15UploG7PpBRQ2bZJnbmh8o3yLoBvDIHA== } + { integrity: sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ== } cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.26.0': + '@rollup/rollup-freebsd-arm64@4.31.0': resolution: - { integrity: sha512-Y9vpjfp9CDkAG4q/uwuhZk96LP11fBz/bYdyg9oaHYhtGZp7NrbkQrj/66DYMMP2Yo/QPAsVHkV891KyO52fhg== } + { integrity: sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew== } cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.26.0': + '@rollup/rollup-freebsd-x64@4.31.0': resolution: - { integrity: sha512-A/jvfCZ55EYPsqeaAt/yDAG4q5tt1ZboWMHEvKAH9Zl92DWvMIbnZe/f/eOXze65aJaaKbL+YeM0Hz4kLQvdwg== } + { integrity: sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA== } cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.26.0': + '@rollup/rollup-linux-arm-gnueabihf@4.31.0': resolution: - { integrity: sha512-paHF1bMXKDuizaMODm2bBTjRiHxESWiIyIdMugKeLnjuS1TCS54MF5+Y5Dx8Ui/1RBPVRE09i5OUlaLnv8OGnA== } + { integrity: sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw== } cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.26.0': + '@rollup/rollup-linux-arm-musleabihf@4.31.0': resolution: - { integrity: sha512-cwxiHZU1GAs+TMxvgPfUDtVZjdBdTsQwVnNlzRXC5QzIJ6nhfB4I1ahKoe9yPmoaA/Vhf7m9dB1chGPpDRdGXg== } + { integrity: sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg== } cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.26.0': + '@rollup/rollup-linux-arm64-gnu@4.31.0': resolution: - { integrity: sha512-4daeEUQutGRCW/9zEo8JtdAgtJ1q2g5oHaoQaZbMSKaIWKDQwQ3Yx0/3jJNmpzrsScIPtx/V+1AfibLisb3AMQ== } + { integrity: sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA== } cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.26.0': + '@rollup/rollup-linux-arm64-musl@4.31.0': resolution: - { integrity: sha512-eGkX7zzkNxvvS05ROzJ/cO/AKqNvR/7t1jA3VZDi2vRniLKwAWxUr85fH3NsvtxU5vnUUKFHKh8flIBdlo2b3Q== } + { integrity: sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g== } cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': + '@rollup/rollup-linux-loongarch64-gnu@4.31.0': + resolution: + { integrity: sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ== } + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.31.0': resolution: - { integrity: sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw== } + { integrity: sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ== } cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.26.0': + '@rollup/rollup-linux-riscv64-gnu@4.31.0': resolution: - { integrity: sha512-MBR2ZhCTzUgVD0OJdTzNeF4+zsVogIR1U/FsyuFerwcqjZGvg2nYe24SAHp8O5sN8ZkRVbHwlYeHqcSQ8tcYew== } + { integrity: sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw== } cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.26.0': + '@rollup/rollup-linux-s390x-gnu@4.31.0': resolution: - { integrity: sha512-YYcg8MkbN17fMbRMZuxwmxWqsmQufh3ZJFxFGoHjrE7bv0X+T6l3glcdzd7IKLiwhT+PZOJCblpnNlz1/C3kGQ== } + { integrity: sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ== } cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.26.0': + '@rollup/rollup-linux-x64-gnu@4.31.0': resolution: - { integrity: sha512-ZuwpfjCwjPkAOxpjAEjabg6LRSfL7cAJb6gSQGZYjGhadlzKKywDkCUnJ+KEfrNY1jH5EEoSIKLCb572jSiglA== } + { integrity: sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g== } cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.26.0': + '@rollup/rollup-linux-x64-musl@4.31.0': resolution: - { integrity: sha512-+HJD2lFS86qkeF8kNu0kALtifMpPCZU80HvwztIKnYwym3KnA1os6nsX4BGSTLtS2QVAGG1P3guRgsYyMA0Yhg== } + { integrity: sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA== } cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.26.0': + '@rollup/rollup-win32-arm64-msvc@4.31.0': resolution: - { integrity: sha512-WUQzVFWPSw2uJzX4j6YEbMAiLbs0BUysgysh8s817doAYhR5ybqTI1wtKARQKo6cGop3pHnrUJPFCsXdoFaimQ== } + { integrity: sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw== } cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.26.0': + '@rollup/rollup-win32-ia32-msvc@4.31.0': resolution: - { integrity: sha512-D4CxkazFKBfN1akAIY6ieyOqzoOoBV1OICxgUblWxff/pSjCA2khXlASUx7mK6W1oP4McqhgcCsu6QaLj3WMWg== } + { integrity: sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ== } cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.26.0': + '@rollup/rollup-win32-x64-msvc@4.31.0': resolution: - { integrity: sha512-2x8MO1rm4PGEP0xWbubJW5RtbNLk3puzAMaLQd3B3JHVw4KcHlmXcO+Wewx9zCoo7EUFiMlu/aZbCJ7VjMzAag== } + { integrity: sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw== } cpu: [x64] os: [win32] @@ -4582,25 +4598,37 @@ packages: resolution: { integrity: sha512-jYREBtsxduPV6ptNq8jOKp9+yx0ld1Tb/Tkdnlj8gTjazl1sF3DwX2VbluyYrNd0meWIL0bNeer7WDf5tKFjaQ== } - '@shikijs/core@1.22.2': + '@sec-ant/readable-stream@0.4.1': + resolution: + { integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== } + + '@shikijs/core@1.29.1': + resolution: + { integrity: sha512-Mo1gGGkuOYjDu5H8YwzmOuly9vNr8KDVkqj9xiKhhhFS8jisAtDSEWB9hzqRHLVQgFdA310e8XRJcW4tYhRB2A== } + + '@shikijs/engine-javascript@1.29.1': + resolution: + { integrity: sha512-Hpi8k9x77rCQ7F/7zxIOUruNkNidMyBnP5qAGbLFqg4kRrg1HZhkB8btib5EXbQWTtLb5gBHOdBwshk20njD7Q== } + + '@shikijs/engine-oniguruma@1.29.1': resolution: - { integrity: sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg== } + { integrity: sha512-gSt2WhLNgEeLstcweQOSp+C+MhOpTsgdNXRqr3zP6M+BUBZ8Md9OU2BYwUYsALBxHza7hwaIWtFHjQ/aOOychw== } - '@shikijs/engine-javascript@1.22.2': + '@shikijs/langs@1.29.1': resolution: - { integrity: sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw== } + { integrity: sha512-iERn4HlyuT044/FgrvLOaZgKVKf3PozjKjyV/RZ5GnlyYEAZFcgwHGkYboeBv2IybQG1KVS/e7VGgiAU4JY2Gw== } - '@shikijs/engine-oniguruma@1.22.2': + '@shikijs/themes@1.29.1': resolution: - { integrity: sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA== } + { integrity: sha512-lb11zf72Vc9uxkl+aec2oW1HVTHJ2LtgZgumb4Rr6By3y/96VmlU44bkxEb8WBWH3RUtbqAJEN0jljD9cF7H7g== } - '@shikijs/types@1.22.2': + '@shikijs/types@1.29.1': resolution: - { integrity: sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg== } + { integrity: sha512-aBqAuhYRp5vSir3Pc9+QPu9WESBOjUo03ao0IHLC4TyTioSsp/SkbAZSrIH4ghYYC1T1KTEpRSBa83bas4RnPA== } - '@shikijs/vscode-textmate@9.3.0': + '@shikijs/vscode-textmate@10.0.1': resolution: - { integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA== } + { integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg== } '@sideway/address@4.1.5': resolution: @@ -4614,195 +4642,199 @@ packages: resolution: { integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== } - '@sindresorhus/is@4.6.0': + '@sindresorhus/is@5.6.0': resolution: - { integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== } - engines: { node: '>=10' } + { integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== } + engines: { node: '>=14.16' } - '@storybook/addon-actions@8.4.3': + '@storybook/addon-actions@8.5.0': resolution: - { integrity: sha512-3lPiMszzxi7YWouIiWSLELCQNFLY2ABmD7O1u2+i/0ZXZZeHqIrhdNoVCj9j0qMisAe9neYzDWLfyKX5yv226g== } + { integrity: sha512-6CW9+17rk5eNx6I8EKqCxRKtsJFTR/lHL+xiJ6/iBWApIm8sg63vhXvUTJ58UixmIkT5oLh0+ESNPh+x10D8fw== } peerDependencies: - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/addon-backgrounds@8.4.3': + '@storybook/addon-backgrounds@8.5.0': resolution: - { integrity: sha512-m3kTxtn+GgO1dj+qVUYV8LnYEVbeITUk+iXJlCBoYQptmWOmOry0KBSk3m/eWlWPeI42X6btwrLtXzMziC2RGA== } + { integrity: sha512-lzyFLs7niNsqlhH5kdUrp7htLiMIcjY50VLWe0PaeJ6T6GZ7X9qhQzROAUV6cGqzyd8A6y/LzIUntDPMVEm/6g== } peerDependencies: - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/addon-controls@8.4.3': + '@storybook/addon-controls@8.5.0': resolution: - { integrity: sha512-KPX1IxI60C0iLNYlkGVuRT+YKbSdbdy//pc2eDHWktxY0TnDymc3VWaSxNvIOpZK8N7ut1/UP/qb+sH/ckW7SA== } + { integrity: sha512-1fivx77A/ahObrPl0L66o9i9MUNfqXxsrpekne5gjMNXw9XJFIRNUe/ddL4CMmwu7SgVbj2QV+q5E5mlnZNTJw== } peerDependencies: - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/addon-docs@8.4.3': + '@storybook/addon-docs@8.5.0': resolution: - { integrity: sha512-3xSYtbg+pjZiQIzJJOKlSXgxxRvRSdQYMQbAZoJVizGpb2y5OpEKiAoP1wuOaYTD8t2wlBgpi/aEx7qHAWaDbA== } + { integrity: sha512-REwLSr1VgOVNJZwP3y3mldhOjBHlM5fqTvq/tC8NaYpAzx9O4rZdoUSZxW3tYtoNoYrHpB8kzRTeZl8WSdKllw== } peerDependencies: - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/addon-essentials@8.4.3': + '@storybook/addon-essentials@8.5.0': resolution: - { integrity: sha512-5SOC8FUJHVhicbLlaD9D+BKa556Zc0XnsXgkFWgeXhNSXRcM1ZrhUFWxVYGMAyXBZ3lmeYHNo/mYxDBnD2fWPQ== } + { integrity: sha512-RrHRdaw2j3ugZiYQ6OHt3Ff08ID4hwAvipqULEsbEnEw3VlXOaW/MT5e2M7kW3MHskQ3iJ6XAD1Y1rNm432Pzw== } peerDependencies: - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/addon-highlight@8.4.3': + '@storybook/addon-highlight@8.5.0': resolution: - { integrity: sha512-MfBvokTJkbynHBceA2SgvFvS7Tpdv6FxzSZbeVtJHyYBqXrobj8llpo4n2IqAo/f3otcapN64wK82Jl4u8dYVg== } + { integrity: sha512-/JxYzMK5aJSYs0K/0eAEFyER2dMoxqwM891MdnkNwLFdyrM58lzHee00F9oEX6zeQoRUNQPRepq0ui2PvbTMGw== } peerDependencies: - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/addon-interactions@8.4.3': + '@storybook/addon-interactions@8.5.0': resolution: - { integrity: sha512-PLc5qM5/CtVcSSVmoyS+dgJNvLN3Z99PwcbDb7y0a2/tSd+LGQ6pEB02OtHWyJepkzKulMV7k9SwpywD2XsToA== } + { integrity: sha512-vX1a8qS7o/W3kEzfL/CqOj/Rr6UlGLT/n0KXMpfIhx63tzxe1a1qGpFLL0h0zqAVPHZIOu9humWMKri5Iny6oA== } peerDependencies: - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/addon-links@8.4.3': + '@storybook/addon-links@8.5.0': resolution: - { integrity: sha512-trt0s1mj6gvHkNyE/wk83HsfDedaS8OwMtcYmIkQrotCMHjv+ZyyxWP1/zOtudn3THdzGV7qOAFoi6hAEFdrlg== } + { integrity: sha512-Y11GIByAYqn0TibI/xsy0vCe+ZxJS9PVAAoHngLxkf9J4WodAXcJABr8ZPlWDNdaEhSS/FF7UQUmNag0UC2/pw== } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.3 + storybook: ^8.5.0 peerDependenciesMeta: react: optional: true - '@storybook/addon-measure@8.4.3': + '@storybook/addon-measure@8.5.0': resolution: - { integrity: sha512-R9m71P6LDNr7cUtDgWWPBRB/GQfv8hdDjWbD/HfqPkGi49RtBXf/zzFr7OrzgwaT9A73VEM74FGOhCZyHz5Qtg== } + { integrity: sha512-e8pJy2sICyj0Ff0W1PFc6HPE6PqcjnnHtfuDaO3M9uSKJLYkpTWJ8i1VSP178f8seq44r5/PdQCHqs5q5l3zgw== } peerDependencies: - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/addon-outline@8.4.3': + '@storybook/addon-outline@8.5.0': resolution: - { integrity: sha512-9dMmh6uQrlJUlKvH+rxEvvo8BCYznRa/YxLoGtgNzh5EbbSR03IVqgfZPpE4ewZidsfCL3Jf3cPjwSuWs3dxLA== } + { integrity: sha512-r12sk1b38Ph6NroWAOTfjbJ/V+gDobm7tKQQlbSDf6fgX7cqyPHmKjfNDCOCQpXouZm/Jm+41zd758PW+Yt4ng== } peerDependencies: - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/addon-themes@8.4.3': + '@storybook/addon-themes@8.5.0': resolution: - { integrity: sha512-DwcGFlfbpbMCNQ5fwEC//7CUXtZ0vFn3WsoGqzM2mb8MvMQeCu2L5lyaAfPKx0HcDbPS8LtC7a7BXUT45Xi3MQ== } + { integrity: sha512-pBNut4sLfcOeLBvWdNAJ3cxv/BfMSTmJcUtSzE4G+1pVNsBbGF+T2f/GM0IjaM0K8Ft03VDzeEAB64nluDS4RA== } peerDependencies: - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/addon-toolbars@8.4.3': + '@storybook/addon-toolbars@8.5.0': resolution: - { integrity: sha512-lW7p7VPeUDIqS0RAXY4yRQ4LCQWGzGdw64moU20NpeVfedfDc4EeCisLD54sU/xA6kMnxoFNYsdHfpkHvJA/Cg== } + { integrity: sha512-q3yYYO2WX8K2DYNM++FzixGDjzYaeREincgsl2WXYXrcuGb5hkOoOgRiAQL8Nz9NQ1Eo+B/yZxrhG/5VoVhUUQ== } peerDependencies: - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/addon-viewport@8.4.3': + '@storybook/addon-viewport@8.5.0': resolution: - { integrity: sha512-KUstpUx++5cWXMXlz9jBhM6qDW9rwtKMvTyJV24TmhYIDmynset2ILRknIqLbVdBixop40+I67O3SF/ydU4E0w== } + { integrity: sha512-MlhVELImk9YzjEgGR2ciLC8d5tUSGcO7my4kWIClN0VyTRcvG4ZfwrsEC+jN3/l52nrgjLmKrDX5UAGZm6w5mQ== } peerDependencies: - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/blocks@8.4.3': + '@storybook/blocks@8.5.0': resolution: - { integrity: sha512-PPC+RXievuHKYlL+oO4ygllT59YzpESklNfeHUkeyuSo0nr04UwSrbfdsQlYJo3nRP0wNKyj/NkYDvzMJ5RlTg== } + { integrity: sha512-2sTOgjH/JFOgWnpqkKjpKVvKAgUaC9ZBjH1gnCoA5dne/SDafYaCAYfv6yZn7g2Xm1sTxWCAmMIUkYSALeWr+w== } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.3 + storybook: ^8.5.0 peerDependenciesMeta: react: optional: true react-dom: optional: true - '@storybook/builder-vite@8.4.3': + '@storybook/builder-vite@8.5.0': resolution: - { integrity: sha512-kLM2vPKOo/yAavYmQgt0qO8kU/vDYuHRq3/AH9g4AvU155u9NeY5u5p8V4KtEHIDxWNmIOD2C09nDkk7DA22sw== } + { integrity: sha512-GVJFjAxX/mL3bmXX6N619ShuYprkh6Ix08JU6QGNf/tTkG92BxjgCqQdfovBrviDhFyO2bhkdlEp6ujMo5CbZA== } peerDependencies: - storybook: ^8.4.3 - vite: ^4.0.0 || ^5.0.0 + storybook: ^8.5.0 + vite: ^4.0.0 || ^5.0.0 || ^6.0.0 - '@storybook/components@8.4.3': + '@storybook/components@8.5.0': resolution: - { integrity: sha512-5+krpYrKC0aLUlkfhKLR78Yrai0S9AP7SR3jXMpyuWIny0fIKn+Ak2IQ721A6RGW+zP02GR6/wLHI+A7CDpcAg== } + { integrity: sha512-DhaHtwfEcfWYj3ih/5RBSDHe3Idxyf+oHw2/DmaLKJX6MluhdK3ZqigjRcTmA9Gj/SbR4CkHEEtDzAvBlW0BYw== } peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/core@8.4.3': + '@storybook/core@8.5.0': resolution: - { integrity: sha512-Ly4sR2gU2Xxu+O0qR4RJpq+Bs45Kv0JPlzdkoTDKQD8B2ozRAdvQLgBHjnBbUYw9jUPzC96uusqTJIBxIdBi7w== } + { integrity: sha512-apborO6ynns7SeydBSqE9o0zT6JSU+VY4gLFPJROGcconvSW4bS5xtJCsgjlulceyWVxepFHGXl4jEZw+SktXA== } peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: prettier: optional: true - '@storybook/csf-plugin@8.4.3': + '@storybook/csf-plugin@8.5.0': resolution: - { integrity: sha512-lS3qJ1qBZk7ddu3O+1hmmp+eDsQ/pOTKuTCJY7Zaoyze97LnLtYRs3FbfPhievVWiIoPdnXtK+mcssR9N9AHMw== } + { integrity: sha512-cs6ogviNyLG1h9J8Sb47U3DqIrQmn2EHm4ta3fpCeV3ABbrMgbzYyxtmybz4g/AwlDgjAZAt6PPcXkfCJ6p2CQ== } peerDependencies: - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/csf@0.1.11': + '@storybook/csf@0.1.12': resolution: - { integrity: sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg== } + { integrity: sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw== } '@storybook/global@5.0.0': resolution: { integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ== } - '@storybook/icons@1.2.12': + '@storybook/icons@1.3.0': resolution: - { integrity: sha512-UxgyK5W3/UV4VrI3dl6ajGfHM4aOqMAkFLWe2KibeQudLf6NJpDrDMSHwZj+3iKC4jFU7dkKbbtH2h/al4sW3Q== } + { integrity: sha512-Nz/UzeYQdUZUhacrPyfkiiysSjydyjgg/p0P9HxB4p/WaJUUjMAcaoaLgy3EXx61zZJ3iD36WPuDkZs5QYrA0A== } engines: { node: '>=14.0.0' } peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - '@storybook/instrumenter@8.4.3': + '@storybook/instrumenter@8.5.0': resolution: - { integrity: sha512-jEMi3CFlyeMQv6V/WWPnL10Qgqn5j03pXXnfLylGcrvLnl1pa1A6sDWqeB6XR2L1HuW96XelkMecCvp5pYXAdQ== } + { integrity: sha512-eZ/UY6w4U2vay+wX7QVwKiRoyMzZscuv6v4k4r8BlmHPFWbhiZDO9S2GsG16UkyKnrQrYk432he70n7hn1Xvmg== } peerDependencies: - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/manager-api@8.4.3': + '@storybook/manager-api@8.5.0': resolution: - { integrity: sha512-b09FHQLHrc3VGdodgV+EkA6V8VhpgadygDn9aVIXUULHXMQCfzzsSK9kiunFGVjH5r4BtdanucBXoBRFAi9D/g== } + { integrity: sha512-Ildriueo3eif4M+gMlMxu/mrBIbAnz8+oesmQJKdzZfe/U9eQTI9OUqJsxx/IVBmdzQ3ySsgNmzj5VweRkse4A== } peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/preview-api@8.4.3': + '@storybook/preview-api@8.5.0': resolution: - { integrity: sha512-SQPiGJ5iNk/RMZTfTQZe27MaZz16XfIgb1GTDWuaSrDBWVcelHRCZdh8Ps+9X5Mre6GeZ9wMQ56l+hQf/DO9Ug== } + { integrity: sha512-g0XbD54zMUkl6bpuA7qEBCE9rW1QV6KKmwkO4bkxMOJcMke3x9l00JTaYn7Un8wItjXiS3BIG15B6mnfBG7fng== } peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/react-dom-shim@8.4.3': + '@storybook/react-dom-shim@8.5.0': resolution: - { integrity: sha512-0zFfPJsDzqEMXk6CEHOIPRR8BcST/X4UbZDZmQBVrzOlmJWdyx1nFK7BT9bbJvb6N9v2Qy6yHL3b2wzZqkDezA== } + { integrity: sha512-7P8xg4FiuFpM6kQOzZynno+0zyLVs8NgsmRK58t3JRZXbda1tzlxTXzvqx4hUevvbPJGjmrB0F3xTFH+8Otnvw== } peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/react-vite@8.4.3': + '@storybook/react-vite@8.5.0': resolution: - { integrity: sha512-5M6sZLmD0PogJnhuWNgXySJux/NbRinz7fznj+05to/t8uIgqx6UDu5tZO0LWnSw7K/NsHnvLLwhhzttM3X8zQ== } + { integrity: sha512-4f5AM8aPs2aTBeiycotinaDIPJg/YRtPb0F1dDquS097eUOeImS73+NSSCwrIjmSiapG/KWVkPgFnadEumFkAA== } engines: { node: '>=18.0.0' } peerDependencies: + '@storybook/test': 8.5.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.3 - vite: ^4.0.0 || ^5.0.0 + storybook: ^8.5.0 + vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + '@storybook/test': + optional: true - '@storybook/react@8.4.3': + '@storybook/react@8.5.0': resolution: - { integrity: sha512-Dz7Kt81lGjS+b4LLOKyLK5Ifp9ZzfD0pwOM2r5QYuBcD5b1I4I6gpRoTfQI/dI6bk5WevVqeOZ2iigZAnaXNGw== } + { integrity: sha512-/jbkmGGc95N7KduIennL/k8grNTP5ye/YBnkcS4TbF7uDWBtKy3/Wqvx5BIlFXq3qeUnZJ8YtZc0lPIYeCY8XQ== } engines: { node: '>=18.0.0' } peerDependencies: - '@storybook/test': 8.4.3 + '@storybook/test': 8.5.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - storybook: ^8.4.3 + storybook: ^8.5.0 typescript: '>= 4.2.x' peerDependenciesMeta: '@storybook/test': @@ -4810,15 +4842,15 @@ packages: typescript: optional: true - '@storybook/test@8.4.3': + '@storybook/test@8.5.0': resolution: - { integrity: sha512-R4KMIZE4S7GyFE4AFD9FESv2Ws406lsg9GFrBaiJGrzOlRKe5yJ7w1MWOu76UclqRNlQHzaEOnOE6lEHVISsDQ== } + { integrity: sha512-M/DdPlI6gwL7NGkK5o7GYjdEBp95AsFEUtW29zQfnVIAngYugzi3nIuM/XkQHunidVdAZCYjw2s2Yhhsx/m9sw== } peerDependencies: - storybook: ^8.4.3 + storybook: ^8.5.0 - '@storybook/theming@8.4.3': + '@storybook/theming@8.5.0': resolution: - { integrity: sha512-ORQY2/C488ur5NkQYes6x+fO5rcyRMyh4uX3DlkNhCsA2CJ/Ik3WVGjprrDuLn+9S4+mtXfVUNfvN7xszlT1oA== } + { integrity: sha512-591LbOj/HMmHYUfLgrMerxhF1A9mY61HWKxcRpB6xxalc1Xw1kRtQ49DcwuTXnUu9ktBB3nuOzPNPQPFSh/7PQ== } peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 @@ -4841,91 +4873,91 @@ packages: resolution: { integrity: sha512-JxIvIo/Hrpv0JCHSyRpetAdQ6lB27oFYhv0PKCNf1g2gUXOjpeR1exrXccRxLMuAV5WAmGFBwRnNOJqN38+qtg== } - '@swc/cli@0.4.0': + '@swc/cli@0.6.0': resolution: - { integrity: sha512-4JdVrPtF/4rCMXp6Q1h5I6YkYZrCCcqod7Wk97ZQq7K8vNGzJUryBv4eHCvqx5sJOJBrbYm9fcswe1B0TygNoA== } + { integrity: sha512-Q5FsI3Cw0fGMXhmsg7c08i4EmXCrcl+WnAxb6LYOLHw4JFFC3yzmx9LaXZ7QMbA+JZXbigU2TirI7RAfO0Qlnw== } engines: { node: '>= 16.14.0' } hasBin: true peerDependencies: '@swc/core': ^1.2.66 - chokidar: ^3.5.1 + chokidar: ^4.0.1 peerDependenciesMeta: chokidar: optional: true - '@swc/core-darwin-arm64@1.9.2': + '@swc/core-darwin-arm64@1.10.9': resolution: - { integrity: sha512-nETmsCoY29krTF2PtspEgicb3tqw7Ci5sInTI03EU5zpqYbPjoPH99BVTjj0OsF53jP5MxwnLI5Hm21lUn1d6A== } + { integrity: sha512-XTHLtijFervv2B+i1ngM993umhSj9K1IeMomvU/Db84Asjur2XmD4KXt9QPnGDRFgv2kLSjZ+DDL25Qk0f4r+w== } engines: { node: '>=10' } cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.9.2': + '@swc/core-darwin-x64@1.10.9': resolution: - { integrity: sha512-9gD+bwBz8ZByjP6nZTXe/hzd0tySIAjpDHgkFiUrc+5zGF+rdTwhcNrzxNHJmy6mw+PW38jqII4uspFHUqqxuQ== } + { integrity: sha512-bi3el9/FV/la8HIsolSjeDar+tM7m9AmSF1w7X6ZByW2qgc4Z1tmq0A4M4H9aH3TfHesZbfq8hgaNtc2/VtzzQ== } engines: { node: '>=10' } cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.9.2': + '@swc/core-linux-arm-gnueabihf@1.10.9': resolution: - { integrity: sha512-kYq8ief1Qrn+WmsTWAYo4r+Coul4dXN6cLFjiPZ29Cv5pyU+GFvSPAB4bEdMzwy99rCR0u2P10UExaeCjurjvg== } + { integrity: sha512-xsLHV02S+RTDuI+UJBkA2muNk/s0ETRpoc1K/gNt0i8BqTurPYkrvGDDALN9+leiUPydHvZi9P1qdExbgUJnXw== } engines: { node: '>=10' } cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.9.2': + '@swc/core-linux-arm64-gnu@1.10.9': resolution: - { integrity: sha512-n0W4XiXlmEIVqxt+rD3ZpkogsEWUk1jJ+i5bQNgB+1JuWh0fBE8c/blDgTQXa0GB5lTPVDZQussgdNOCnAZwiA== } + { integrity: sha512-41hJgPoGhIa12U6Tud+yLF/m64YA3mGut3TmBEkj2R7rdJdE0mljdtR0tf4J2RoQaWZPPi0DBSqGdROiAEx9dg== } engines: { node: '>=10' } cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.9.2': + '@swc/core-linux-arm64-musl@1.10.9': resolution: - { integrity: sha512-8xzrOmsyCC1zrx2Wzx/h8dVsdewO1oMCwBTLc1gSJ/YllZYTb04pNm6NsVbzUX2tKddJVRgSJXV10j/NECLwpA== } + { integrity: sha512-DUMRhl49b9r7bLg9oNzCdW4lLcDJKrRBn87Iq5APPvixsm1auGnsVQycGkQcDDKvVllxIFSbmCYzjagx3l8Hnw== } engines: { node: '>=10' } cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.9.2': + '@swc/core-linux-x64-gnu@1.10.9': resolution: - { integrity: sha512-kZrNz/PjRQKcchWF6W292jk3K44EoVu1ad5w+zbS4jekIAxsM8WwQ1kd+yjUlN9jFcF8XBat5NKIs9WphJCVXg== } + { integrity: sha512-xW0y88vQvmzYo3Gn7yFnY03TfHMwuca4aFH3ZmhwDNOYHmTOi6fmhAkg/13F/NrwjMYO+GnF5uJTjdjb3B6tdQ== } engines: { node: '>=10' } cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.9.2': + '@swc/core-linux-x64-musl@1.10.9': resolution: - { integrity: sha512-TTIpR4rjMkhX1lnFR+PSXpaL83TrQzp9znRdp2TzYrODlUd/R20zOwSo9vFLCyH6ZoD47bccY7QeGZDYT3nlRg== } + { integrity: sha512-jYs32BEx+CPVuxN6NdsWEpdehjnmAag25jyJzwjQx+NCGYwHEV3bT5y8TX4eFhaVB1rafmqJOlYQPs4+MSyGCg== } engines: { node: '>=10' } cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.9.2': + '@swc/core-win32-arm64-msvc@1.10.9': resolution: - { integrity: sha512-+Eg2d4icItKC0PMjZxH7cSYFLWk0aIp94LNmOw6tPq0e69ax6oh10upeq0D1fjWsKLmOJAWEvnXlayZcijEXDw== } + { integrity: sha512-Uhh5T3Fq3Nyom96Bm3ACBNASH3iqNc76in7ewZz8PooUqeTIO8aZpsghnncjctRNE9T819/8btpiFIhHo3sKtg== } engines: { node: '>=10' } cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.9.2': + '@swc/core-win32-ia32-msvc@1.10.9': resolution: - { integrity: sha512-nLWBi4vZDdM/LkiQmPCakof8Dh1/t5EM7eudue04V1lIcqx9YHVRS3KMwEaCoHLGg0c312Wm4YgrWQd9vwZ5zQ== } + { integrity: sha512-bD5BpbojEsDfrAvT+1qjQPf5RCKLg4UL+3Uwm019+ZR02hd8qO538BlOnQdOqRqccu+75DF6aRglQ7AJ24Cs0Q== } engines: { node: '>=10' } cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.9.2': + '@swc/core-win32-x64-msvc@1.10.9': resolution: - { integrity: sha512-ik/k+JjRJBFkXARukdU82tSVx0CbExFQoQ78qTO682esbYXzjdB5eLVkoUbwen299pnfr88Kn4kyIqFPTje8Xw== } + { integrity: sha512-NwkuUNeBBQnAaXVvcGw8Zr6RR8kylyjFUnlYZZ3G0QkQZ4rYLXYTafAmiRjrfzgVb0LcMF/sBzJvGOk7SwtIDg== } engines: { node: '>=10' } cpu: [x64] os: [win32] - '@swc/core@1.9.2': + '@swc/core@1.10.9': resolution: - { integrity: sha512-dYyEkO6mRYtZFpnOsnYzv9rY69fHAHoawYOjGOEcxk9WYtaJhowMdP/w6NcOKnz2G7GlZaenjkzkMa6ZeQeMsg== } + { integrity: sha512-MQ97YSXu2oibzm7wi4GNa7hhndjLuVt/lmO2sq53+P37oZmyg/JQ/IYYtSiC6UGK3+cHoiVAykrK+glxLjJbag== } engines: { node: '>=10' } peerDependencies: '@swc/helpers': '*' @@ -4941,14 +4973,14 @@ packages: resolution: { integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== } - '@swc/types@0.1.15': + '@swc/types@0.1.17': resolution: - { integrity: sha512-XKaZ+dzDIQ9Ot9o89oJQ/aluI17+VvUnIpYJTcZtvv1iYX6MzHh3Ik2CSR7MdPKpPwfZXHBeCingb2b4PoDVdw== } + { integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ== } - '@szmarczak/http-timer@4.0.6': + '@szmarczak/http-timer@5.0.1': resolution: - { integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== } - engines: { node: '>=10' } + { integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== } + engines: { node: '>=14.16' } '@tailwindcss/container-queries@0.1.1': resolution: @@ -4956,30 +4988,30 @@ packages: peerDependencies: tailwindcss: '>=3.2.0' - '@tailwindcss/typography@0.5.15': + '@tailwindcss/typography@0.5.16': resolution: - { integrity: sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA== } + { integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA== } peerDependencies: - tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20' + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' - '@tanstack/query-core@5.59.20': + '@tanstack/query-core@5.64.2': resolution: - { integrity: sha512-e8vw0lf7KwfGe1if4uPFhvZRWULqHjFcz3K8AebtieXvnMOz5FSzlZe3mTLlPuUBcydCnBRqYs2YJ5ys68wwLg== } + { integrity: sha512-hdO8SZpWXoADNTWXV9We8CwTkXU88OVWRBcsiFrk7xJQnhm6WRlweDzMD+uH+GnuieTBVSML6xFa17C2cNV8+g== } - '@tanstack/query-devtools@5.59.20': + '@tanstack/query-devtools@5.64.2': resolution: - { integrity: sha512-vxhuQ+8VV4YWQSFxQLsuM+dnEKRY7VeRzpNabFXdhEwsBYLrjXlF1pM38A8WyKNLqZy8JjyRO8oP4Wd/oKHwuQ== } + { integrity: sha512-3DautR5UpVZdk/qNIhioZVF7g8fdQZ1U98sBEEk4Tzz3tihSBNMPgwlP40nzgbPEDBIrn/j/oyyvNBVSo083Vw== } - '@tanstack/react-query-devtools@5.59.20': + '@tanstack/react-query-devtools@5.64.2': resolution: - { integrity: sha512-AL/eQS1NFZhwwzq2Bq9Gd8wTTH+XhPNOJlDFpzPMu9NC5CQVgA0J8lWrte/sXpdWNo5KA4hgHnEdImZsF4h6Lw== } + { integrity: sha512-+ZjJVnPzc8BUV/Eklu2k9T/IAyAyvwoCHqOaOrk2sbU33LFhM52BpX4eyENXn0bx5LwV3DJZgEQlIzucoemfGQ== } peerDependencies: - '@tanstack/react-query': ^5.59.20 + '@tanstack/react-query': ^5.64.2 react: ^18 || ^19 - '@tanstack/react-query@5.59.20': + '@tanstack/react-query@5.64.2': resolution: - { integrity: sha512-Zly0egsK0tFdfSbh5/mapSa+Zfc3Et0Zkar7Wo5sQkFzWyB3p3uZWOHR2wrlAEEV2L953eLuDBtbgFvMYiLvUw== } + { integrity: sha512-3pakNscZNm8KJkxmovvtZ4RaXLyiYYobwleTMvpIGUoKRa8j8VlrQKNl5W8VUEfVfZKkikvXVddLuWMbcSCA1Q== } peerDependencies: react: ^18 || ^19 @@ -5066,10 +5098,6 @@ packages: resolution: { integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== } - '@types/cacheable-request@6.0.3': - resolution: - { integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== } - '@types/compression@1.7.5': resolution: { integrity: sha512-AAQvK5pxMpaT+nDvhHrsBhLSYG5yQdtkaJE1WYieSNY2mVFKAgmU4ks65rkZD5oqnGCFLyQpUr1CqI4DmUMyDg== } @@ -5186,13 +5214,9 @@ packages: resolution: { integrity: sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg== } - '@types/k6@0.53.2': - resolution: - { integrity: sha512-TxFJbeSfD/RfQe+GeMbpdwiOOySRTj3vfHvcA4yoLQ3wvGPjyppCqmyKXgktf3535T+YAc41bB7GkhuCPRmfUg== } - - '@types/keyv@3.1.4': + '@types/k6@0.54.2': resolution: - { integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== } + { integrity: sha512-B5LPxeQm97JnUTpoKNE1UX9jFp+JiJCAXgZOa2P7aChxVoPQXKfWMzK+739xHq3lPkKj1aV+HeOxkP56g/oWBg== } '@types/mdast@4.0.4': resolution: @@ -5242,9 +5266,9 @@ packages: resolution: { integrity: sha512-aciLyx+wDwT2t2/kJGJR2AEeBz0nJU4WuRX04Wu9Dqc5lSUtwu0WERPHYsLhF9PtseiAMPBGNUOtFjxZ56prsg== } - '@types/prop-types@15.7.13': + '@types/prop-types@15.7.14': resolution: - { integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA== } + { integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== } '@types/qs@6.9.17': resolution: @@ -5262,10 +5286,6 @@ packages: resolution: { integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ== } - '@types/responselike@1.0.3': - resolution: - { integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== } - '@types/sax@1.2.7': resolution: { integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A== } @@ -5326,69 +5346,59 @@ packages: resolution: { integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== } - '@typescript-eslint/eslint-plugin@8.14.0': + '@typescript-eslint/eslint-plugin@8.18.0': resolution: - { integrity: sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w== } + { integrity: sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@8.14.0': + '@typescript-eslint/parser@8.18.0': resolution: - { integrity: sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA== } + { integrity: sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@8.14.0': + '@typescript-eslint/scope-manager@8.18.0': resolution: - { integrity: sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw== } + { integrity: sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@typescript-eslint/type-utils@8.14.0': + '@typescript-eslint/type-utils@8.18.0': resolution: - { integrity: sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ== } + { integrity: sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/types@8.14.0': + '@typescript-eslint/types@8.18.0': resolution: - { integrity: sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g== } + { integrity: sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - '@typescript-eslint/typescript-estree@8.14.0': + '@typescript-eslint/typescript-estree@8.18.0': resolution: - { integrity: sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ== } + { integrity: sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.14.0': + '@typescript-eslint/utils@8.18.0': resolution: - { integrity: sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA== } + { integrity: sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/visitor-keys@8.14.0': + '@typescript-eslint/visitor-keys@8.18.0': resolution: - { integrity: sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ== } + { integrity: sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } '@ucast/core@1.10.2': @@ -5411,11 +5421,11 @@ packages: resolution: { integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== } - '@vitejs/plugin-react-swc@3.7.1': + '@vitejs/plugin-react-swc@3.7.2': resolution: - { integrity: sha512-vgWOY0i1EROUK0Ctg1hwhtC3SdcDjZcdit4Ups4aPkDcB1jYhmo+RMYWY87cmXMhvtD5uf8lV89j2w16vkdSVg== } + { integrity: sha512-y0byko2b2tSVVf5Gpng1eEhX1OvPC7x8yns1Fx8jDzlJp4LS6CMkCPfLw47cjyoMrshQDoQw4qcgjsU9VvlCew== } peerDependencies: - vite: ^4 || ^5 + vite: ^4 || ^5 || ^6 '@vitest/browser@2.1.5': resolution: @@ -5529,6 +5539,56 @@ packages: resolution: { integrity: sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ== } + '@xhmikosr/archive-type@7.0.0': + resolution: + { integrity: sha512-sIm84ZneCOJuiy3PpWR5bxkx3HaNt1pqaN+vncUBZIlPZCq8ASZH+hBVdu5H8znR7qYC6sKwx+ie2Q7qztJTxA== } + engines: { node: ^14.14.0 || >=16.0.0 } + + '@xhmikosr/bin-check@7.0.3': + resolution: + { integrity: sha512-4UnCLCs8DB+itHJVkqFp9Zjg+w/205/J2j2wNBsCEAm/BuBmtua2hhUOdAMQE47b1c7P9Xmddj0p+X1XVsfHsA== } + engines: { node: '>=18' } + + '@xhmikosr/bin-wrapper@13.0.5': + resolution: + { integrity: sha512-DT2SAuHDeOw0G5bs7wZbQTbf4hd8pJ14tO0i4cWhRkIJfgRdKmMfkDilpaJ8uZyPA0NVRwasCNAmMJcWA67osw== } + engines: { node: '>=18' } + + '@xhmikosr/decompress-tar@8.0.1': + resolution: + { integrity: sha512-dpEgs0cQKJ2xpIaGSO0hrzz3Kt8TQHYdizHsgDtLorWajuHJqxzot9Hbi0huRxJuAGG2qiHSQkwyvHHQtlE+fg== } + engines: { node: '>=18' } + + '@xhmikosr/decompress-tarbz2@8.0.2': + resolution: + { integrity: sha512-p5A2r/AVynTQSsF34Pig6olt9CvRj6J5ikIhzUd3b57pUXyFDGtmBstcw+xXza0QFUh93zJsmY3zGeNDlR2AQQ== } + engines: { node: '>=18' } + + '@xhmikosr/decompress-targz@8.0.1': + resolution: + { integrity: sha512-mvy5AIDIZjQ2IagMI/wvauEiSNHhu/g65qpdM4EVoYHUJBAmkQWqcPJa8Xzi1aKVTmOA5xLJeDk7dqSjlHq8Mg== } + engines: { node: '>=18' } + + '@xhmikosr/decompress-unzip@7.0.0': + resolution: + { integrity: sha512-GQMpzIpWTsNr6UZbISawsGI0hJ4KA/mz5nFq+cEoPs12UybAqZWKbyIaZZyLbJebKl5FkLpsGBkrplJdjvUoSQ== } + engines: { node: '>=18' } + + '@xhmikosr/decompress@10.0.1': + resolution: + { integrity: sha512-6uHnEEt5jv9ro0CDzqWlFgPycdE+H+kbJnwyxgZregIMLQ7unQSCNVsYG255FoqU8cP46DyggI7F7LohzEl8Ag== } + engines: { node: '>=18' } + + '@xhmikosr/downloader@15.0.1': + resolution: + { integrity: sha512-fiuFHf3Dt6pkX8HQrVBsK0uXtkgkVlhrZEh8b7VgoDqFf+zrgFBPyrwCqE/3nDwn3hLeNz+BsrS7q3mu13Lp1g== } + engines: { node: '>=18' } + + '@xhmikosr/os-filter-obj@3.0.0': + resolution: + { integrity: sha512-siPY6BD5dQ2SZPl3I0OZBHL27ZqZvLEosObsZRQ1NUB8qcxegwt0T9eKtV96JMFQpIz1elhkzqOg4c/Ri6Dp9A== } + engines: { node: ^14.14.0 || >=16.0.0 } + '@zxcvbn-ts/core@3.0.4': resolution: { integrity: sha512-aQeiT0F09FuJaAqNrxynlAwZ2mW/1MdXakKWNmGM1Qp/VaY6CnB/GfnMS2T8gB2231Esp1/maCWd8vTG4OuShw== } @@ -5690,6 +5750,10 @@ packages: resolution: { integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== } + arch@3.0.0: + resolution: + { integrity: sha512-AmIAC+Wtm2AU8lGfTtHsw0Y9Qtftx2YXEEtiBP10xFUtMOA+sHHx6OAddyL52mUKh1vsXQ6/w1mVDptZCyUt4Q== } + are-docs-informative@0.0.2: resolution: { integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig== } @@ -5821,16 +5885,16 @@ packages: { integrity: sha512-F6NW1RJo5pp2kPnnM97M5Ohw8zAGjv83MpxHqfAochH68n/kiXN57+hYaNUCA7XkScoVNr6yzvly3hsY34TGfQ== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - astro-expressive-code@0.35.6: + astro-expressive-code@0.40.1: resolution: - { integrity: sha512-1U4KrvFuodaCV3z4I1bIR16SdhQlPkolGsYTtiANxPZUVv/KitGSCTjzksrkPonn1XuwVqvnwmUUVzTLWngnBA== } + { integrity: sha512-dQ47XhgtxuRTiKQrZOJKdebMuxvvTBR89U439EHzLP6KR45IILFlGDihGQp3//1aUjj4nwpbINSzms1heJ7vmQ== } peerDependencies: - astro: ^4.0.0-beta || ^3.3.0 + astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 - astro@4.16.12: + astro@5.1.8: resolution: - { integrity: sha512-NnFeIKhGW6MdXCQT2hRariUwfxqJUIRs6qKqaovaQkTojzxh2r1L8C49qanKc+huH9wK2C94VZB2T/tosyRl1A== } - engines: { node: ^18.17.1 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0' } + { integrity: sha512-7fNNceI/dXqGIkkZQjxhH31alAfgf33cDv34cPLCGFVSHHOpYG0NSrofnxdYf0BvWRlddqkq393UqDM5cJlv1w== } + engines: { node: ^18.17.1 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0' } hasBin: true astrojs-compiler-sync@1.0.1: @@ -5898,11 +5962,19 @@ packages: resolution: { integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== } + axios@1.7.9: + resolution: + { integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== } + axobject-query@4.1.0: resolution: { integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ== } engines: { node: '>= 0.4' } + b4a@1.6.7: + resolution: + { integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg== } + bail@2.0.2: resolution: { integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== } @@ -5911,6 +5983,10 @@ packages: resolution: { integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== } + bare-events@2.5.4: + resolution: + { integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA== } + base-64@1.0.0: resolution: { integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg== } @@ -5945,11 +6021,6 @@ packages: { integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ== } engines: { node: '>=12.0.0' } - bin-check@4.1.0: - resolution: - { integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA== } - engines: { node: '>=4' } - bin-version-check@5.1.0: resolution: { integrity: sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g== } @@ -6022,9 +6093,9 @@ packages: engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true - bson@6.9.0: + bson@6.10.1: resolution: - { integrity: sha512-X9hJeyeM0//Fus+0pc5dSUMhhrrmWwQUtdavaQeF3Ta6m69matZkGWV/MrBcnwUeLC8W9kwwc2hfkZgUuCX3Ig== } + { integrity: sha512-P92xmHDQjSKPLHqFxefqMxASNq/aWJMEZugpCjf+AF/pgcUpMMQCg7t7+ewko0/u8AapvF3luf/FoehddEK+sA== } engines: { node: '>=16.20.1' } buffer-crc32@0.2.13: @@ -6067,15 +6138,15 @@ packages: { integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== } engines: { node: '>= 10' } - cacheable-lookup@5.0.4: + cacheable-lookup@7.0.0: resolution: - { integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== } - engines: { node: '>=10.6.0' } + { integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== } + engines: { node: '>=14.16' } - cacheable-request@7.0.4: + cacheable-request@10.2.14: resolution: - { integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== } - engines: { node: '>=8' } + { integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== } + engines: { node: '>=14.16' } cachedir@2.4.0: resolution: @@ -6208,16 +6279,6 @@ packages: { integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== } engines: { node: '>=8' } - cli-cursor@5.0.0: - resolution: - { integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== } - engines: { node: '>=18' } - - cli-spinners@2.9.2: - resolution: - { integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== } - engines: { node: '>=6' } - cli-table3@0.6.5: resolution: { integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== } @@ -6238,10 +6299,6 @@ packages: { integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== } engines: { node: '>=12' } - clone-response@1.0.3: - resolution: - { integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== } - clsx@2.0.0: resolution: { integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q== } @@ -6369,9 +6426,9 @@ packages: { integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== } engines: { '0': node >= 0.8 } - concurrently@9.1.0: + concurrently@9.1.2: resolution: - { integrity: sha512-VxkzwMAn4LP7WyMnJNbHN5mKV9L2IbyDjpzemKr99sXNR3GqRNMMHdm7prV1ws9wg7ETj6WUkNOigZVsptwbgg== } + { integrity: sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ== } engines: { node: '>=18' } hasBin: true @@ -6379,6 +6436,11 @@ packages: resolution: { integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== } + consola@3.4.0: + resolution: + { integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA== } + engines: { node: ^14.18.0 || >=16.10.0 } + console-control-strings@1.1.0: resolution: { integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== } @@ -6413,6 +6475,10 @@ packages: resolution: { integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== } + cookie-es@1.2.2: + resolution: + { integrity: sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg== } + cookie-signature@1.0.6: resolution: { integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== } @@ -6444,14 +6510,14 @@ packages: { integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== } engines: { node: '>= 0.10' } - cosmiconfig-typescript-loader@5.1.0: + cosmiconfig-typescript-loader@6.1.0: resolution: - { integrity: sha512-7PtBB+6FdsOvZyJtlF3hEPpACq7RQX6BVGsgC7/lfVXnKMvNCu/XY3ykreqG5w/rBNdu2z8LCIKoF3kpHHdHlA== } - engines: { node: '>=v16' } + { integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g== } + engines: { node: '>=v18' } peerDependencies: '@types/node': '*' - cosmiconfig: '>=8.2' - typescript: '>=4' + cosmiconfig: '>=9' + typescript: '>=5' cosmiconfig@9.0.0: resolution: @@ -6469,15 +6535,20 @@ packages: engines: { node: '>=0.8' } hasBin: true - cross-spawn@5.1.0: - resolution: - { integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== } - cross-spawn@7.0.5: resolution: { integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug== } engines: { node: '>= 8' } + cross-spawn@7.0.6: + resolution: + { integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== } + engines: { node: '>= 8' } + + crossws@0.3.2: + resolution: + { integrity: sha512-S2PpQHRcgYABOS2465b34wqTOn5dbLL+iSvyweJYGGFLDsKq88xrjDXUiEhfYkhWZq1HuS6of3okRHILbkrqxw== } + css-line-break@2.1.0: resolution: { integrity: sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w== } @@ -6626,6 +6697,16 @@ packages: supports-color: optional: true + debug@4.4.0: + resolution: + { integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== } + engines: { node: '>=6.0' } + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decimal.js-light@2.5.1: resolution: { integrity: sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== } @@ -6653,6 +6734,11 @@ packages: resolution: { integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== } + defaults@3.0.0: + resolution: + { integrity: sha512-RsqXDEAALjfRTro+IFNKpcPCt0/Cy2FqHSIlnomiJp9YGadpQnrtbRpSgN2+np21qHcIKiva4fiOQGjS9/qR/A== } + engines: { node: '>=18' } + defer-to-connect@2.0.1: resolution: { integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== } @@ -6673,6 +6759,10 @@ packages: { integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== } engines: { node: '>= 0.4' } + defu@6.1.4: + resolution: + { integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== } + delayed-stream@1.0.0: resolution: { integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== } @@ -6696,6 +6786,10 @@ packages: { integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== } engines: { node: '>=6' } + destr@2.0.3: + resolution: + { integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ== } + destroy@1.2.0: resolution: { integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== } @@ -6801,6 +6895,11 @@ packages: { integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== } engines: { node: '>=12' } + dotenv@16.4.7: + resolution: + { integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== } + engines: { node: '>=12' } + dset@3.1.4: resolution: { integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA== } @@ -6834,6 +6933,10 @@ packages: resolution: { integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ== } + emoji-regex-xs@1.0.0: + resolution: + { integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg== } + emoji-regex@10.4.0: resolution: { integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== } @@ -6913,9 +7016,9 @@ packages: { integrity: sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q== } engines: { node: '>= 0.4' } - es-module-lexer@1.5.4: + es-module-lexer@1.6.0: resolution: - { integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw== } + { integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ== } es-object-atoms@1.0.0: resolution: @@ -6980,9 +7083,9 @@ packages: engines: { node: '>=18' } hasBin: true - esbuild@0.24.0: + esbuild@0.24.2: resolution: - { integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ== } + { integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA== } engines: { node: '>=18' } hasBin: true @@ -7043,16 +7146,16 @@ packages: peerDependencies: eslint: '>=8.57.0' - eslint-plugin-jsdoc@50.5.0: + eslint-plugin-jsdoc@50.6.1: resolution: - { integrity: sha512-xTkshfZrUbiSHXBwZ/9d5ulZ2OcHXxSvm/NPo494H/hadLRJwOq5PMV0EUpMqsb9V+kQo+9BAgi6Z7aJtdBp2A== } + { integrity: sha512-UWyaYi6iURdSfdVVqvfOs2vdCVz0J40O/z/HTsv2sFjdjmdlUI/qlKLOTmwbPQ2tAfQnE5F9vqx+B+poF71DBQ== } engines: { node: '>=18' } peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-jsonc@2.18.1: + eslint-plugin-jsonc@2.18.2: resolution: - { integrity: sha512-6qY8zDpxOwPQNcr8eZ+RxwGX6IPHws5/Qef7aBEjER8rB9+UMB6zQWVIVcbP7xzFmEMHAesNFPe/sIlU4c78dg== } + { integrity: sha512-SDhJiSsWt3nItl/UuIv+ti4g3m4gpGkmnUJS9UWR3TrpyNsIcnJoBRD7Kof6cM4Rk3L0wrmY5Tm3z7ZPjR2uGg== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: eslint: '>=6.0.0' @@ -7091,9 +7194,9 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-svelte@2.46.0: + eslint-plugin-svelte@2.46.1: resolution: - { integrity: sha512-1A7iEMkzmCZ9/Iz+EAfOGYL8IoIG6zeKEq1SmpxGeM5SXmoQq+ZNnCpXFVJpsxPWYx8jIVGMerQMzX20cqUl0g== } + { integrity: sha512-7xYr2o4NID/f9OEYMqxsEQsCsj4KaMy4q5sANaKkAb6/QeCjYFxRmDm2S3YC3A3pl1kyPZ/syOx/i7LcWYSbIw== } engines: { node: ^14.17.0 || >=16.0.0 } peerDependencies: eslint: ^7.0.0 || ^8.0.0-0 || ^9.0.0-0 @@ -7122,9 +7225,9 @@ packages: { integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - eslint@9.14.0: + eslint@9.18.0: resolution: - { integrity: sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g== } + { integrity: sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } hasBin: true peerDependencies: @@ -7232,11 +7335,6 @@ packages: { integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== } engines: { node: '>=0.8.x' } - execa@0.7.0: - resolution: - { integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw== } - engines: { node: '>=4' } - execa@4.1.0: resolution: { integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== } @@ -7272,9 +7370,14 @@ packages: { integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ== } engines: { node: '>= 0.10.0' } - expressive-code@0.35.6: + express@4.21.2: resolution: - { integrity: sha512-+mx+TPTbMqgo0mL92Xh9QgjW0kSQIsEivMgEcOnaqKqL7qCw8Vkqc5Rg/di7ZYw4aMUSr74VTc+w8GQWu05j1g== } + { integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== } + engines: { node: '>= 0.10.0' } + + expressive-code@0.40.1: + resolution: + { integrity: sha512-jBsTRX+MPsqiqYQsE9vRXMiAkUafU11j2zuWAaOX9vubLutNB0er8c0FJWeudVDH5D52V4Lf4vTIqbOE54PUcQ== } ext-list@2.2.2: resolution: @@ -7286,11 +7389,6 @@ packages: { integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== } engines: { node: '>=4' } - extend-shallow@2.0.1: - resolution: - { integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== } - engines: { node: '>=0.10.0' } - extend@3.0.2: resolution: { integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== } @@ -7319,11 +7417,20 @@ packages: { integrity: sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ== } engines: { node: '>=6.0.0' } + fast-fifo@1.3.2: + resolution: + { integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== } + fast-glob@3.3.2: resolution: { integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== } engines: { node: '>=8.6.0' } + fast-glob@3.3.3: + resolution: + { integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== } + engines: { node: '>=8.6.0' } + fast-json-stable-stringify@2.1.0: resolution: { integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== } @@ -7373,10 +7480,10 @@ packages: { integrity: sha512-ZuXAqGePcSPz4JuerOY06Dzzq0hrmQ6VGoXVzGyFI1npeOfBgqGIKKpznfYWRkSLJlXutkqVC5WvGZtkFVhu9Q== } engines: { node: '>= 12' } - file-type@17.1.6: + file-type@19.6.0: resolution: - { integrity: sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw== } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + { integrity: sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ== } + engines: { node: '>=18' } file-uri-to-path@1.0.0: resolution: @@ -7387,10 +7494,10 @@ packages: { integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw== } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - filenamify@5.1.1: + filenamify@6.0.0: resolution: - { integrity: sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA== } - engines: { node: '>=12.20' } + { integrity: sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ== } + engines: { node: '>=16' } fill-range@7.1.1: resolution: @@ -7468,6 +7575,11 @@ packages: resolution: { integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== } + form-data-encoder@2.1.4: + resolution: + { integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== } + engines: { node: '>= 14.17' } + form-data@4.0.1: resolution: { integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== } @@ -7491,13 +7603,13 @@ packages: resolution: { integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== } - framer-motion@11.11.15: + framer-motion@11.15.0: resolution: - { integrity: sha512-fib+OpUe4nap4W1vhaDohnPU+42B5s1q+jNkNkb6TfzmDYtRhDyvn4mkRCAD5a2cQKOI3nJZP7yqGYtxnlmleg== } + { integrity: sha512-MLk8IvZntxOMg7lDBLw2qgTHHv664bYoYmnFTmE0Gm/FW67aOJk0WM3ctMcG+Xhcv+vh5uyyXwxvxhSeJzSe+w== } peerDependencies: '@emotion/is-prop-valid': '*' - react: ^18.0.0 - react-dom: ^18.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: '@emotion/is-prop-valid': optional: true @@ -7598,11 +7710,6 @@ packages: { integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q== } engines: { node: '>=6' } - get-stream@3.0.0: - resolution: - { integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== } - engines: { node: '>=4' } - get-stream@5.2.0: resolution: { integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== } @@ -7613,6 +7720,11 @@ packages: { integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== } engines: { node: '>=10' } + get-stream@9.0.1: + resolution: + { integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== } + engines: { node: '>=18' } + get-symbol-description@1.0.2: resolution: { integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== } @@ -7659,13 +7771,6 @@ packages: { integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== } engines: { node: '>=10.13.0' } - glob-promise@4.2.2: - resolution: - { integrity: sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw== } - engines: { node: '>=12' } - peerDependencies: - glob: ^7.1.6 - glob@10.4.5: resolution: { integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== } @@ -7677,6 +7782,12 @@ packages: engines: { node: 20 || >=22 } hasBin: true + glob@11.0.1: + resolution: + { integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw== } + engines: { node: 20 || >=22 } + hasBin: true + glob@7.2.3: resolution: { integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== } @@ -7702,9 +7813,9 @@ packages: { integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== } engines: { node: '>=18' } - globals@15.12.0: + globals@15.13.0: resolution: - { integrity: sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ== } + { integrity: sha512-49TewVEz0UxZjr1WYYsWpPrhyC/B/pA8Bq0fUmet2n+eR7yn0IvNzNaoBwnK6mdkzcN+se7Ez9zUgULTz2QH4g== } engines: { node: '>=18' } globalthis@1.0.4: @@ -7726,10 +7837,10 @@ packages: resolution: { integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== } - got@11.8.6: + got@13.0.0: resolution: - { integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== } - engines: { node: '>=10.19.0' } + { integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA== } + engines: { node: '>=16' } graceful-fs@4.2.11: resolution: @@ -7744,10 +7855,9 @@ packages: { integrity: sha512-GGTKBX4SD7Wdb8mqeDLni2oaRGYQWjWHGKPQ24ZMnUtKfcsVoiv4uX8+LJr1K6U5VW2Lu1BwJnj7uiori0YtRw== } engines: { node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0 } - gray-matter@4.0.3: + h3@1.14.0: resolution: - { integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== } - engines: { node: '>=6.0' } + { integrity: sha512-ao22eiONdgelqcnknw0iD645qW0s9NnrJHr5OBz4WOMdBdycfSas1EQf1wXRsm+PcB2Yoj43pjBPwqIpJQTeWg== } happy-dom@15.11.4: resolution: @@ -7852,6 +7962,10 @@ packages: resolution: { integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg== } + hast-util-to-html@9.0.4: + resolution: + { integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA== } + hast-util-to-jsx-runtime@2.3.2: resolution: { integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg== } @@ -7937,9 +8051,9 @@ packages: resolution: { integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA== } - http2-wrapper@1.0.3: + http2-wrapper@2.2.1: resolution: - { integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== } + { integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== } engines: { node: '>=10.19.0' } https-proxy-agent@5.0.1: @@ -7961,12 +8075,16 @@ packages: resolution: { integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== } - husky@9.1.6: + husky@9.1.7: resolution: - { integrity: sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A== } + { integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== } engines: { node: '>=18' } hasBin: true + i18next@23.16.8: + resolution: + { integrity: sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg== } + iconv-lite@0.4.24: resolution: { integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== } @@ -8057,6 +8175,10 @@ packages: resolution: { integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q== } + inspect-with-kind@1.0.5: + resolution: + { integrity: sha512-MAQUJuIo7Xqk8EVNP+6d3CKq9c80hi4tjIbIAT6lmGW9W6WzlHiu9PS8uSuUYU+Do+j1baiFp3H25XEVxDIG2g== } + internal-slot@1.0.7: resolution: { integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== } @@ -8081,6 +8203,10 @@ packages: { integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== } engines: { node: '>= 0.10' } + iron-webcrypto@1.2.1: + resolution: + { integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg== } + is-alphabetical@2.0.1: resolution: { integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== } @@ -8162,11 +8288,6 @@ packages: engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } hasBin: true - is-extendable@0.1.1: - resolution: - { integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== } - engines: { node: '>=0.10.0' } - is-extglob@2.1.1: resolution: { integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== } @@ -8206,11 +8327,6 @@ packages: { integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== } engines: { node: '>=10' } - is-interactive@2.0.0: - resolution: - { integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== } - engines: { node: '>=12' } - is-lambda@1.0.1: resolution: { integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== } @@ -8279,16 +8395,16 @@ packages: { integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== } engines: { node: '>= 0.4' } - is-stream@1.1.0: - resolution: - { integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== } - engines: { node: '>=0.10.0' } - is-stream@2.0.1: resolution: { integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== } engines: { node: '>=8' } + is-stream@4.0.1: + resolution: + { integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== } + engines: { node: '>=18' } + is-string@1.0.7: resolution: { integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== } @@ -8318,16 +8434,6 @@ packages: { integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== } engines: { node: '>=10' } - is-unicode-supported@1.3.0: - resolution: - { integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== } - engines: { node: '>=12' } - - is-unicode-supported@2.1.0: - resolution: - { integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== } - engines: { node: '>=18' } - is-weakmap@2.0.2: resolution: { integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== } @@ -8412,6 +8518,11 @@ packages: { integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== } hasBin: true + jiti@2.4.2: + resolution: + { integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A== } + hasBin: true + jju@1.4.0: resolution: { integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== } @@ -8626,6 +8737,11 @@ packages: { integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== } engines: { node: '>=14' } + lilconfig@3.1.3: + resolution: + { integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== } + engines: { node: '>=14' } + lines-and-columns@1.2.4: resolution: { integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== } @@ -8746,11 +8862,6 @@ packages: { integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== } engines: { node: '>=10' } - log-symbols@6.0.0: - resolution: - { integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw== } - engines: { node: '>=18' } - log-update@4.0.0: resolution: { integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== } @@ -8769,10 +8880,10 @@ packages: resolution: { integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg== } - lowercase-keys@2.0.0: + lowercase-keys@3.0.0: resolution: - { integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== } - engines: { node: '>=8' } + { integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } lru-cache@10.4.3: resolution: @@ -8783,10 +8894,6 @@ packages: { integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA== } engines: { node: 20 || >=22 } - lru-cache@4.1.5: - resolution: - { integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== } - lru-cache@5.1.1: resolution: { integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== } @@ -8796,17 +8903,17 @@ packages: { integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== } engines: { node: '>=10' } - lucide-react@0.439.0: + lucide-react@0.451.0: resolution: - { integrity: sha512-PafSWvDTpxdtNEndS2HIHxcNAbd54OaqSYJO90/b63rab2HWYqDbH194j0i82ZFdWOAcf0AHinRykXRRK2PJbw== } + { integrity: sha512-OwQ3uljZLp2cerj8sboy5rnhtGTCl9UCJIhT1J85/yOuGVlEH+xaUPR7tvNdddPvmV5M5VLdr7cQuWE3hzA4jw== } peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc - lucide-react@0.451.0: + lucide-react@0.473.0: resolution: - { integrity: sha512-OwQ3uljZLp2cerj8sboy5rnhtGTCl9UCJIhT1J85/yOuGVlEH+xaUPR7tvNdddPvmV5M5VLdr7cQuWE3hzA4jw== } + { integrity: sha512-KW6u5AKeIjkvrxXZ6WuCu9zHE/gEYSXCay+Gre2ZoInD0Je/e3RBtP4OHpJVJ40nDklSvjVKjgH7VU8/e2dzRw== } peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 lunr@2.3.9: resolution: @@ -8826,6 +8933,10 @@ packages: resolution: { integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw== } + magic-string@0.30.17: + resolution: + { integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== } + magicast@0.3.5: resolution: { integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ== } @@ -9150,26 +9261,27 @@ packages: engines: { node: '>=4.0.0' } hasBin: true + mime@3.0.0: + resolution: + { integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== } + engines: { node: '>=10.0.0' } + hasBin: true + mimic-fn@2.1.0: resolution: { integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== } engines: { node: '>=6' } - mimic-function@5.0.1: - resolution: - { integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== } - engines: { node: '>=18' } - - mimic-response@1.0.1: - resolution: - { integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== } - engines: { node: '>=4' } - mimic-response@3.1.0: resolution: { integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== } engines: { node: '>=10' } + mimic-response@4.0.0: + resolution: + { integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + min-indent@1.0.1: resolution: { integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== } @@ -9257,21 +9369,21 @@ packages: engines: { node: '>=10' } hasBin: true - monaco-editor@0.51.0: + monaco-editor@0.52.2: resolution: - { integrity: sha512-xaGwVV1fq343cM7aOYB6lVE4Ugf0UyimdD/x5PWcWBMKENwectaEu77FAN7c5sFiyumqeJdX1RPTh1ocioyDjw== } + { integrity: sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ== } mongodb-connection-string-url@3.0.1: resolution: { integrity: sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg== } - mongodb@6.10.0: + mongodb@6.12.0: resolution: - { integrity: sha512-gP9vduuYWb9ZkDM546M+MP2qKVk5ZG2wPF63OvSRuUbqCR+11ZCAE1mOfllhlAG0wcoJY5yDL/rV3OmYEwXIzg== } + { integrity: sha512-RM7AHlvYfS7jv7+BXund/kR64DryVI+cHbVAy9P61fnb1RcWZqOW1/Wj2YhqMCx+MuYhqTRGv7AwHBzmsCKBfA== } engines: { node: '>=16.20.1' } peerDependencies: '@aws-sdk/credential-providers': ^3.188.0 - '@mongodb-js/zstd': ^1.1.0 + '@mongodb-js/zstd': ^1.1.0 || ^2.0.0 gcp-metadata: ^5.2.0 kerberos: ^2.0.1 mongodb-client-encryption: '>=6.0.0 <7' @@ -9293,6 +9405,29 @@ packages: socks: optional: true + motion-dom@11.14.3: + resolution: + { integrity: sha512-lW+D2wBy5vxLJi6aCP0xyxTxlTfiu+b+zcpVbGVFUxotwThqhdpPRSmX8xztAgtZMPMeU0WGVn/k1w4I+TbPqA== } + + motion-utils@11.14.3: + resolution: + { integrity: sha512-Xg+8xnqIJTpr0L/cidfTTBFkvRw26ZtGGuIhA94J9PQ2p4mEa06Xx7QVYZH0BP+EpMSaDlu+q0I0mmvwADPsaQ== } + + motion@11.15.0: + resolution: + { integrity: sha512-iZ7dwADQJWGsqsSkBhNHdI2LyYWU+hA1Nhy357wCLZq1yHxGImgt3l7Yv0HT/WOskcYDq9nxdedyl4zUv7UFFw== } + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + mrmime@2.0.0: resolution: { integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== } @@ -9335,9 +9470,9 @@ packages: resolution: { integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== } - nanoid@3.3.7: + nanoid@3.3.8: resolution: - { integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== } + { integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== } engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } hasBin: true @@ -9381,6 +9516,10 @@ packages: resolution: { integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== } + node-fetch-native@1.6.6: + resolution: + { integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ== } + node-fetch@2.7.0: resolution: { integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== } @@ -9423,20 +9562,15 @@ packages: { integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== } engines: { node: '>=0.10.0' } - normalize-url@6.1.0: + normalize-url@8.0.1: resolution: - { integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== } - engines: { node: '>=10' } + { integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== } + engines: { node: '>=14.16' } normalize.css@8.0.1: resolution: { integrity: sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== } - npm-run-path@2.0.2: - resolution: - { integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== } - engines: { node: '>=4' } - npm-run-path@4.0.1: resolution: { integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== } @@ -9492,6 +9626,14 @@ packages: { integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== } engines: { node: '>= 0.4' } + ofetch@1.4.1: + resolution: + { integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw== } + + ohash@1.1.4: + resolution: + { integrity: sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g== } + on-exit-leak-free@2.1.2: resolution: { integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== } @@ -9516,14 +9658,9 @@ packages: { integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== } engines: { node: '>=6' } - onetime@7.0.0: - resolution: - { integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== } - engines: { node: '>=18' } - - oniguruma-to-js@0.4.3: + oniguruma-to-es@2.3.0: resolution: - { integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ== } + { integrity: sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g== } open@8.4.2: resolution: @@ -9535,16 +9672,6 @@ packages: { integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== } engines: { node: '>= 0.8.0' } - ora@8.1.1: - resolution: - { integrity: sha512-YWielGi1XzG1UTvOaCFaNgEnuhZVMSHYkW/FQ7UX8O26PtlpdM84c0f7wLPlkvx2RfiQmnzd61d/MGxmpQeJPw== } - engines: { node: '>=18' } - - os-filter-obj@2.0.0: - resolution: - { integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg== } - engines: { node: '>=4' } - ospath@1.2.2: resolution: { integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== } @@ -9557,15 +9684,10 @@ packages: resolution: { integrity: sha512-YlaCIArvWNKCWZFRrMjhh2l5jK80eXnpYP+bhRc1J/7cW3TiyEY0ngJo73o/5n8hA3+4yLdTmXLNTQ3Ncz50LQ== } - p-cancelable@2.1.1: - resolution: - { integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== } - engines: { node: '>=8' } - - p-finally@1.0.0: + p-cancelable@3.0.0: resolution: - { integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== } - engines: { node: '>=4' } + { integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== } + engines: { node: '>=12.20' } p-limit@2.3.0: resolution: @@ -9582,9 +9704,9 @@ packages: { integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - p-limit@6.1.0: + p-limit@6.2.0: resolution: - { integrity: sha512-H0jc0q1vOzlEk0TqAKXKZxdl7kX3OFUzCnNVUnq5Pc3DGo0kpeaMuPqxQn235HibwBEb0/pm9dgKTjXy66fBkg== } + { integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA== } engines: { node: '>=18' } p-locate@4.1.0: @@ -9626,9 +9748,9 @@ packages: resolution: { integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== } - pagefind@1.2.0: + pagefind@1.3.0: resolution: - { integrity: sha512-sFVv5/x73qCp9KlLHv8/uWDv7rG1tsWcG9MuXc5YTrXIrb8c1Gshm9oc5rMLXNZILXUWai8WczqaK4jjroEzng== } + { integrity: sha512-8KPLGT5g9s+olKMRTU9LFekLizkVIu9tes90O1/aigJ0T5LmyPqTzGJrETnSw3meSYg58YH7JTzhTTW/3z6VAw== } hasBin: true pako@1.0.11: @@ -9704,11 +9826,6 @@ packages: { integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== } engines: { node: '>=0.10.0' } - path-key@2.0.1: - resolution: - { integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== } - engines: { node: '>=4' } - path-key@3.1.1: resolution: { integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== } @@ -9732,6 +9849,10 @@ packages: resolution: { integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== } + path-to-regexp@0.1.12: + resolution: + { integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== } + path-to-regexp@3.3.0: resolution: { integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== } @@ -9803,9 +9924,9 @@ packages: resolution: { integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw== } - pino-http@10.3.0: + pino-http@10.4.0: resolution: - { integrity: sha512-kaHQqt1i5S9LXWmyuw6aPPqYW/TjoDPizPs4PnDW4hSpajz2Uo/oisNliLf7We1xzpiLacdntmw8yaZiEkppQQ== } + { integrity: sha512-vjQsKBE+VN1LVchjbfLE7B6nBeGASZNRNKsR68VS0DolTm5R3zo+47JX1wjm0O96dcbvA7vnqt8YqOWlG5nN0w== } pino-pretty@11.3.0: resolution: @@ -9925,9 +10046,9 @@ packages: resolution: { integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== } - postcss@8.4.49: + postcss@8.5.1: resolution: - { integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== } + { integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ== } engines: { node: ^10 || ^12 || >=14 } prebuild-install@7.1.2: @@ -9951,16 +10072,16 @@ packages: { integrity: sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw== } engines: { node: ^14.15.0 || >=16.0.0 } - prettier-plugin-tailwindcss@0.6.8: + prettier-plugin-tailwindcss@0.6.10: resolution: - { integrity: sha512-dGu3kdm7SXPkiW4nzeWKCl3uoImdd5CTZEJGxyypEPL37Wj0HT2pLqjrvSei1nTeuQfO4PUfjeW5cTUNRLZ4sA== } + { integrity: sha512-ndj2WLDaMzACnr1gAYZiZZLs5ZdOeBYgOsbBmHj3nvW/6q8h8PymsXiEnKvj/9qgCCAoHyvLOisoQdIcsDvIgw== } engines: { node: '>=14.21.3' } peerDependencies: '@ianvs/prettier-plugin-sort-imports': '*' '@prettier/plugin-pug': '*' '@shopify/prettier-plugin-liquid': '*' '@trivago/prettier-plugin-sort-imports': '*' - '@zackad/prettier-plugin-twig-melody': '*' + '@zackad/prettier-plugin-twig': '*' prettier: ^3.0 prettier-plugin-astro: '*' prettier-plugin-css-order: '*' @@ -9982,7 +10103,7 @@ packages: optional: true '@trivago/prettier-plugin-sort-imports': optional: true - '@zackad/prettier-plugin-twig-melody': + '@zackad/prettier-plugin-twig': optional: true prettier-plugin-astro: optional: true @@ -10013,9 +10134,9 @@ packages: engines: { node: '>=10.13.0' } hasBin: true - prettier@3.3.3: + prettier@3.4.2: resolution: - { integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== } + { integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== } engines: { node: '>=14' } hasBin: true @@ -10029,13 +10150,13 @@ packages: { integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== } engines: { node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0 } - prisma-json-types-generator@3.1.1: + prisma-json-types-generator@3.2.2: resolution: - { integrity: sha512-LYVBKWcnh6SSPf6jNJuQEmByyZtj79kuxzilCF8962ViBNciBzk+pQ8qt7HR7lFUIOEN3sUeOOhJe1RuytGk6A== } + { integrity: sha512-kvEbJPIP5gxk65KmLs0nAvY+CxpqVMWb4OsEvXlyXZmp2IGfi5f52BUV7ezTYQNjRPZyR4QlayWJXffoqVVAfA== } engines: { node: '>=14.0' } hasBin: true peerDependencies: - prisma: ^5.20 + prisma: ^5 || ^6 typescript: ^5.6.2 prisma@5.22.0: @@ -10108,10 +10229,6 @@ packages: engines: { node: '>= 0.10' } hasBin: true - pseudomap@1.0.2: - resolution: - { integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== } - psl@1.10.0: resolution: { integrity: sha512-KSKHEbjAnpUuAUserOq0FxGXCUrzC3WniuSJhvdbs102rL55266ZcHBqLWOsG30spQMlPdpy7icATiAQehg/iA== } @@ -10151,6 +10268,10 @@ packages: resolution: { integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== } + queue-tick@1.0.1: + resolution: + { integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== } + quick-format-unescaped@4.0.4: resolution: { integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== } @@ -10160,6 +10281,10 @@ packages: { integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== } engines: { node: '>=10' } + radix3@1.1.2: + resolution: + { integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA== } + random-words@1.3.0: resolution: { integrity: sha512-brwCGe+DN9DqZrAQVNj1Tct1Lody6GrYL/7uei5wfjeQdacFyFd2h/51LNlOoBMzIKMS9xohuL4+wlF/z1g/xg== } @@ -10317,11 +10442,6 @@ packages: { integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - readable-web-to-node-stream@3.0.2: - resolution: - { integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== } - engines: { node: '>=8' } - readdirp@3.6.0: resolution: { integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== } @@ -10358,6 +10478,14 @@ packages: react: ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 + recharts@2.15.0: + resolution: + { integrity: sha512-cIvMxDfpAmqAmVgc4yb7pgm/O1tmmkl/CjrvXuW+62/+7jj/iF9Ykm+hb/UJt42TREHMyd3gb+pkgoa2MxgDIw== } + engines: { node: '>=14' } + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + recma-build-jsx@1.0.0: resolution: { integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew== } @@ -10392,18 +10520,26 @@ packages: resolution: { integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== } - regex@4.4.0: + regex-recursion@5.1.1: + resolution: + { integrity: sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w== } + + regex-utilities@2.3.0: resolution: - { integrity: sha512-uCUSuobNVeqUupowbdZub6ggI5/JZkYyJdDogddJr60L764oxC2pMZov1fQ3wM9bdyzUILDG+Sqx6NAKAz9rKQ== } + { integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng== } + + regex@5.1.1: + resolution: + { integrity: sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw== } regexp.prototype.flags@1.5.3: resolution: { integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== } engines: { node: '>= 0.4' } - rehype-expressive-code@0.35.6: + rehype-expressive-code@0.40.1: resolution: - { integrity: sha512-pPdE+pRcRw01kxMOwHQjuRxgwlblZt5+wAc3w2aPGgmcnn57wYjn07iKO7zaznDxYVxMYVvYlnL+R3vWFQS4Gw== } + { integrity: sha512-EjmhGHcgmcPoIsb4M6vm2FQQDUctdcgFFiKGCYtPJuMpzr1q+ChCNsc443MaE412MyAgL6Q/XUB7I56Mcl6bnw== } rehype-format@5.0.1: resolution: @@ -10512,20 +10648,16 @@ packages: { integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== } hasBin: true - responselike@2.0.1: + responselike@3.0.0: resolution: - { integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== } + { integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== } + engines: { node: '>=14.16' } restore-cursor@3.1.0: resolution: { integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== } engines: { node: '>=8' } - restore-cursor@5.1.0: - resolution: - { integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== } - engines: { node: '>=18' } - retext-latin@4.0.0: resolution: { integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA== } @@ -10567,9 +10699,9 @@ packages: { integrity: sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA== } engines: { node: '>=8.3' } - rollup@4.26.0: + rollup@4.31.0: resolution: - { integrity: sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg== } + { integrity: sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw== } engines: { node: '>=18.0.0', npm: '>=8.0.0' } hasBin: true @@ -10624,11 +10756,6 @@ packages: resolution: { integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== } - section-matter@1.0.0: - resolution: - { integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== } - engines: { node: '>=4' } - secure-json-parse@2.7.0: resolution: { integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== } @@ -10637,6 +10764,11 @@ packages: resolution: { integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== } + seek-bzip@2.0.0: + resolution: + { integrity: sha512-SMguiTnYrhpLdk3PwfzHeotrcwi8bNV4iemL9tx9poR/yeaMYwB9VzR1w7b57DuWpuqR8n6oZboi0hj3AxZxQg== } + hasBin: true + semver-regex@4.0.5: resolution: { integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw== } @@ -10674,6 +10806,11 @@ packages: { integrity: sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g== } engines: { node: '>=14.16' } + serialize-error@12.0.0: + resolution: + { integrity: sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw== } + engines: { node: '>=18' } + serialize-javascript@6.0.2: resolution: { integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== } @@ -10710,21 +10847,11 @@ packages: { integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw== } engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } - shebang-command@1.2.0: - resolution: - { integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== } - engines: { node: '>=0.10.0' } - shebang-command@2.0.0: resolution: { integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== } engines: { node: '>=8' } - shebang-regex@1.0.0: - resolution: - { integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== } - engines: { node: '>=0.10.0' } - shebang-regex@3.0.0: resolution: { integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== } @@ -10734,9 +10861,9 @@ packages: resolution: { integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== } - shiki@1.22.2: + shiki@1.29.1: resolution: - { integrity: sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA== } + { integrity: sha512-TghWKV9pJTd/N+IgAIVJtr0qZkB7FfFCUrrEJc0aRmZupo3D1OCVRknQWVRVA7AX/M0Ld7QfoAruPzr3CnUJuw== } side-channel@1.0.6: resolution: @@ -10935,9 +11062,9 @@ packages: { integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== } engines: { node: '>=6' } - start-server-and-test@2.0.8: + start-server-and-test@2.0.10: resolution: - { integrity: sha512-v2fV6NV2F7tL1ocwfI4Wpait+IKjRbT5l3ZZ+ZikXdMLmxYsS8ynGAsCQAUVXkVyGyS+UibsRnvgHkMvJIvCsw== } + { integrity: sha512-nZphcfcqGqwk74lbZkqSwClkYz+M5ZPGOMgWxNVJrdztPKN96qe6HooRu6L3TpwITn0lKJJdKACqHbJtqythOQ== } engines: { node: '>=16' } hasBin: true @@ -10954,14 +11081,9 @@ packages: resolution: { integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w== } - stdin-discarder@0.2.2: - resolution: - { integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ== } - engines: { node: '>=18' } - - storybook@8.4.3: + storybook@8.5.0: resolution: - { integrity: sha512-n+6ME+APinsx0zjNTmx3SntJ4iCgoTK7TsxUC8+op/rUAA8hNbD+/NT7Qx/F5peHNchVeVFGtebPDAHU9g1M/Q== } + { integrity: sha512-cEx42OlCetManF+cONVJVYP7SYsnI2K922DfWKmZhebP0it0n6TUof4y5/XzJ8YUruwPgyclGLdX8TvdRuNSfw== } hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -10982,6 +11104,10 @@ packages: { integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== } engines: { node: '>=10.0.0' } + streamx@2.21.1: + resolution: + { integrity: sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw== } + strict-event-emitter@0.5.1: resolution: { integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== } @@ -11056,11 +11182,6 @@ packages: { integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== } engines: { node: '>=12' } - strip-bom-string@1.0.0: - resolution: - { integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== } - engines: { node: '>=0.10.0' } - strip-bom@3.0.0: resolution: { integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== } @@ -11071,10 +11192,9 @@ packages: { integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw== } engines: { node: '>=10' } - strip-eof@1.0.0: + strip-dirs@3.0.0: resolution: - { integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== } - engines: { node: '>=0.10.0' } + { integrity: sha512-I0sdgcFTfKQlUPZyAqPJmSG3HLO9rWDFnxonnIbskYNM3DwFOeTNB5KzVq3dA1GdRAc/25b5Y7UO2TQfKWw4aQ== } strip-final-newline@2.0.0: resolution: @@ -11101,14 +11221,9 @@ packages: { integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== } engines: { node: '>=8' } - strip-outer@2.0.0: - resolution: - { integrity: sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg== } - engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - - strtok3@7.1.1: + strtok3@9.1.1: resolution: - { integrity: sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg== } + { integrity: sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw== } engines: { node: '>=16' } style-to-object@0.4.4: @@ -11187,6 +11302,10 @@ packages: resolution: { integrity: sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q== } + tailwind-merge@2.6.0: + resolution: + { integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA== } + tailwindcss-animate@1.0.7: resolution: { integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA== } @@ -11199,6 +11318,12 @@ packages: engines: { node: '>=14.0.0' } hasBin: true + tailwindcss@3.4.17: + resolution: + { integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og== } + engines: { node: '>=14.0.0' } + hasBin: true + tar-fs@2.1.1: resolution: { integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== } @@ -11208,6 +11333,10 @@ packages: { integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== } engines: { node: '>=6' } + tar-stream@3.1.7: + resolution: + { integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== } + tar@6.2.1: resolution: { integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== } @@ -11218,6 +11347,10 @@ packages: { integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg== } engines: { node: '>=18' } + text-decoder@1.2.3: + resolution: + { integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA== } + text-extensions@2.4.0: resolution: { integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g== } @@ -11227,10 +11360,6 @@ packages: resolution: { integrity: sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw== } - text-table@0.2.0: - resolution: - { integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== } - thenify-all@1.6.0: resolution: { integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== } @@ -11264,6 +11393,10 @@ packages: resolution: { integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ== } + tinyexec@0.3.2: + resolution: + { integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== } + tinypool@1.0.1: resolution: { integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA== } @@ -11303,9 +11436,9 @@ packages: { integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== } engines: { node: '>=0.6' } - token-types@5.0.1: + token-types@6.0.0: resolution: - { integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg== } + { integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA== } engines: { node: '>=14.16' } totalist@3.0.1: @@ -11352,11 +11485,6 @@ packages: resolution: { integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== } - trim-repeated@2.0.0: - resolution: - { integrity: sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg== } - engines: { node: '>=12' } - trough@2.2.0: resolution: { integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== } @@ -11424,45 +11552,45 @@ packages: { integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== } engines: { node: '>=0.6.11 <=0.7.0 || >=0.7.3' } - turbo-darwin-64@2.2.3: + turbo-darwin-64@2.3.3: resolution: - { integrity: sha512-Rcm10CuMKQGcdIBS3R/9PMeuYnv6beYIHqfZFeKWVYEWH69sauj4INs83zKMTUiZJ3/hWGZ4jet9AOwhsssLyg== } + { integrity: sha512-bxX82xe6du/3rPmm4aCC5RdEilIN99VUld4HkFQuw+mvFg6darNBuQxyWSHZTtc25XgYjQrjsV05888w1grpaA== } cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.2.3: + turbo-darwin-arm64@2.3.3: resolution: - { integrity: sha512-+EIMHkuLFqUdJYsA3roj66t9+9IciCajgj+DVek+QezEdOJKcRxlvDOS2BUaeN8kEzVSsNiAGnoysFWYw4K0HA== } + { integrity: sha512-DYbQwa3NsAuWkCUYVzfOUBbSUBVQzH5HWUFy2Kgi3fGjIWVZOFk86ss+xsWu//rlEAfYwEmopigsPYSmW4X15A== } cpu: [arm64] os: [darwin] - turbo-linux-64@2.2.3: + turbo-linux-64@2.3.3: resolution: - { integrity: sha512-UBhJCYnqtaeOBQLmLo8BAisWbc9v9daL9G8upLR+XGj6vuN/Nz6qUAhverN4Pyej1g4Nt1BhROnj6GLOPYyqxQ== } + { integrity: sha512-eHj9OIB0dFaP6BxB88jSuaCLsOQSYWBgmhy2ErCu6D2GG6xW3b6e2UWHl/1Ho9FsTg4uVgo4DB9wGsKa5erjUA== } cpu: [x64] os: [linux] - turbo-linux-arm64@2.2.3: + turbo-linux-arm64@2.3.3: resolution: - { integrity: sha512-hJYT9dN06XCQ3jBka/EWvvAETnHRs3xuO/rb5bESmDfG+d9yQjeTMlhRXKrr4eyIMt6cLDt1LBfyi+6CQ+VAwQ== } + { integrity: sha512-NmDE/NjZoDj1UWBhMtOPmqFLEBKhzGS61KObfrDEbXvU3lekwHeoPvAMfcovzswzch+kN2DrtbNIlz+/rp8OCg== } cpu: [arm64] os: [linux] - turbo-windows-64@2.2.3: + turbo-windows-64@2.3.3: resolution: - { integrity: sha512-NPrjacrZypMBF31b4HE4ROg4P3nhMBPHKS5WTpMwf7wydZ8uvdEHpESVNMOtqhlp857zbnKYgP+yJF30H3N2dQ== } + { integrity: sha512-O2+BS4QqjK3dOERscXqv7N2GXNcqHr9hXumkMxDj/oGx9oCatIwnnwx34UmzodloSnJpgSqjl8iRWiY65SmYoQ== } cpu: [x64] os: [win32] - turbo-windows-arm64@2.2.3: + turbo-windows-arm64@2.3.3: resolution: - { integrity: sha512-fnNrYBCqn6zgKPKLHu4sOkihBI/+0oYFr075duRxqUZ+1aLWTAGfHZLgjVeLh3zR37CVzuerGIPWAEkNhkWEIw== } + { integrity: sha512-dW4ZK1r6XLPNYLIKjC4o87HxYidtRRcBeo/hZ9Wng2XM/MqqYkAyzJXJGgRMsc0MMEN9z4+ZIfnSNBrA0b08ag== } cpu: [arm64] os: [win32] - turbo@2.2.3: + turbo@2.3.3: resolution: - { integrity: sha512-5lDvSqIxCYJ/BAd6rQGK/AzFRhBkbu4JHVMLmGh/hCb7U3CqSnr5Tjwfy9vc+/5wG2DJ6wttgAaA7MoCgvBKZQ== } + { integrity: sha512-DUHWQAcC8BTiUZDRzAYGvpSpGLiaOQPfYXlCieQbwUvmml/LRGIe3raKdrOPOoiX0DYlzxs2nH6BoWJoZrj8hA== } hasBin: true tweetnacl@0.14.5: @@ -11494,9 +11622,14 @@ packages: { integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg== } engines: { node: '>=16' } - type-fest@4.28.0: + type-fest@4.30.2: + resolution: + { integrity: sha512-UJShLPYi1aWqCdq9HycOL/gwsuqda1OISdBO3t8RlXQC4QvtuIz4b5FCfe2dQIWEpmlRExKmcTBfP1r9bhY7ig== } + engines: { node: '>=16' } + + type-fest@4.33.0: resolution: - { integrity: sha512-jXMwges/FVbFRe5lTMJZVEZCrO9kI9c8k0PA/z7nF3bo0JSCCLysvokFjNPIUK/itEMas10MQM+AiHoHt/T/XA== } + { integrity: sha512-s6zVrxuyKbbAsSAD5ZPTB77q4YIdRctkTbJ2/Dqlinwz+8ooH2gd+YA7VA6Pa93KML9GockVvoxjZ2vHP+mu8g== } engines: { node: '>=16' } type-is@1.6.18: @@ -11528,20 +11661,20 @@ packages: resolution: { integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== } - typedoc-plugin-markdown@4.2.10: + typedoc-plugin-markdown@4.4.1: resolution: - { integrity: sha512-PLX3pc1/7z13UJm4TDE9vo9jWGcClFUErXXtd5LdnoLjV6mynPpqZLU992DwMGFSRqJFZeKbVyqlNNeNHnk2tQ== } + { integrity: sha512-fx23nSCvewI9IR8lzIYtzDphETcgTDuxKcmHKGD4lo36oexC+B1k4NaCOY58Snqb4OlE8OXDAGVcQXYYuLRCNw== } engines: { node: '>= 18' } peerDependencies: - typedoc: 0.26.x + typedoc: 0.27.x - typedoc@0.26.11: + typedoc@0.27.6: resolution: - { integrity: sha512-sFEgRRtrcDl2FxVP58Ze++ZK2UQAEvtvvH8rRlig1Ja3o7dDaMHmaBfvJmdGnNEFaLTpQsN8dpvZaTqJSu/Ugw== } + { integrity: sha512-oBFRoh2Px6jFx366db0lLlihcalq/JzyCVp7Vaq1yphL/tbgx2e+bkpkCgJPunaPvPwoTOXSwasfklWHm7GfAw== } engines: { node: '>= 18' } hasBin: true peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x + typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x typesafe-path@0.2.2: resolution: @@ -11551,15 +11684,13 @@ packages: resolution: { integrity: sha512-fAIveQKsoYj55CozUiBoj4b/7WpN0i4o74wiGY5JVUEoD0XiqDk1tJqTEjgzL2/AizKQrXxyRosSebyDzBZKjw== } - typescript-eslint@8.14.0: + typescript-eslint@8.18.0: resolution: - { integrity: sha512-K8fBJHxVL3kxMmwByvz8hNdBJ8a0YqKzKDX6jRlrjMuNXyd5T2V02HIq37+OiWXvUUOXgOOGiSSOh26Mh8pC3w== } + { integrity: sha512-Xq2rRjn6tzVpAyHr3+nmSg1/9k9aIHnJ2iZeOH7cfGOWqTkXTm3kwpQglEuLGdNrYvPF+2gtAs+/KF5rjVo+WQ== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' typescript@5.4.2: resolution: @@ -11567,9 +11698,9 @@ packages: engines: { node: '>=14.17' } hasBin: true - typescript@5.5.4: + typescript@5.6.3: resolution: - { integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== } + { integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== } engines: { node: '>=14.17' } hasBin: true @@ -11577,15 +11708,36 @@ packages: resolution: { integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== } + ufo@1.5.4: + resolution: + { integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== } + uid@2.0.2: resolution: { integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g== } engines: { node: '>=8' } + uint8array-extras@1.4.0: + resolution: + { integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ== } + engines: { node: '>=18' } + + ultrahtml@1.5.3: + resolution: + { integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg== } + unbox-primitive@1.0.2: resolution: { integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== } + unbzip2-stream@1.4.3: + resolution: + { integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg== } + + uncrypto@0.1.3: + resolution: + { integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== } + undefsafe@2.0.5: resolution: { integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== } @@ -11599,6 +11751,10 @@ packages: { integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== } engines: { node: '>=14.0' } + unenv@1.10.0: + resolution: + { integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ== } + unicorn-magic@0.1.0: resolution: { integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ== } @@ -11696,6 +11852,71 @@ packages: webpack-sources: optional: true + unplugin@2.1.2: + resolution: + { integrity: sha512-Q3LU0e4zxKfRko1wMV2HmP8lB9KWislY7hxXpxd+lGx0PRInE4vhMBVEZwpdVYHvtqzhSrzuIfErsob6bQfCzw== } + engines: { node: '>=18.12.0' } + + unstorage@1.14.4: + resolution: + { integrity: sha512-1SYeamwuYeQJtJ/USE1x4l17LkmQBzg7deBJ+U9qOBoHo15d1cDxG4jM31zKRgF7pG0kirZy4wVMX6WL6Zoscg== } + peerDependencies: + '@azure/app-configuration': ^1.8.0 + '@azure/cosmos': ^4.2.0 + '@azure/data-tables': ^13.3.0 + '@azure/identity': ^4.5.0 + '@azure/keyvault-secrets': ^4.9.0 + '@azure/storage-blob': ^12.26.0 + '@capacitor/preferences': ^6.0.3 + '@deno/kv': '>=0.8.4' + '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 + '@planetscale/database': ^1.19.0 + '@upstash/redis': ^1.34.3 + '@vercel/blob': '>=0.27.0' + '@vercel/kv': ^1.0.1 + aws4fetch: ^1.0.20 + db0: '>=0.2.1' + idb-keyval: ^6.2.1 + ioredis: ^5.4.2 + uploadthing: ^7.4.1 + peerDependenciesMeta: + '@azure/app-configuration': + optional: true + '@azure/cosmos': + optional: true + '@azure/data-tables': + optional: true + '@azure/identity': + optional: true + '@azure/keyvault-secrets': + optional: true + '@azure/storage-blob': + optional: true + '@capacitor/preferences': + optional: true + '@deno/kv': + optional: true + '@netlify/blobs': + optional: true + '@planetscale/database': + optional: true + '@upstash/redis': + optional: true + '@vercel/blob': + optional: true + '@vercel/kv': + optional: true + aws4fetch: + optional: true + db0: + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + uploadthing: + optional: true + untildify@4.0.0: resolution: { integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== } @@ -11816,9 +12037,9 @@ packages: peerDependencies: vite: '>=2.0.0' - vite@5.4.11: + vite@5.4.14: resolution: - { integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q== } + { integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA== } engines: { node: ^18.0.0 || >=20.0.0 } hasBin: true peerDependencies: @@ -11848,11 +12069,52 @@ packages: terser: optional: true - vitefu@1.0.3: + vite@6.0.11: + resolution: + { integrity: sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg== } + engines: { node: ^18.0.0 || ^20.0.0 || >=22.0.0 } + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitefu@1.0.5: resolution: - { integrity: sha512-iKKfOMBHob2WxEJbqbJjHAkmYgvFDPhuqrO82om83S8RLk+17FtyMBfcyeH8GqD0ihShtkMW/zzJgiA51hCNCQ== } + { integrity: sha512-h4Vflt9gxODPFNGPwp4zAMZRpZR7eslzwH2c5hn5kNZ5rhnKyRJ50U+yGCdc2IRaBs8O4haIgLNGrV5CrpMsCA== } peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0-beta.0 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 peerDependenciesMeta: vite: optional: true @@ -12010,9 +12272,9 @@ packages: resolution: { integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== } - wait-on@8.0.1: + wait-on@8.0.2: resolution: - { integrity: sha512-1wWQOyR2LVVtaqrcIL2+OM+x7bkpmzVROa0Nf6FryXkS+er5Sa1kzFGjzZRqLnHa3n1rACFLeTwUqE1ETL9Mig== } + { integrity: sha512-qHlU6AawrgAIHlueGQHQ+ETcPLAauXbnoTKl3RKq20W0T8x0DKVAo5xWIYjHSyvHxQlcYbFdR0jp4T9bDVITFA== } engines: { node: '>=12.0.0' } hasBin: true @@ -12076,11 +12338,6 @@ packages: { integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== } engines: { node: '>= 0.4' } - which@1.3.1: - resolution: - { integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== } - hasBin: true - which@2.0.2: resolution: { integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== } @@ -12165,19 +12422,15 @@ packages: { integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== } engines: { node: '>=0.4' } - xxhash-wasm@1.0.2: + xxhash-wasm@1.1.0: resolution: - { integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A== } + { integrity: sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA== } y18n@5.0.8: resolution: { integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== } engines: { node: '>=10' } - yallist@2.1.2: - resolution: - { integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== } - yallist@3.1.1: resolution: { integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== } @@ -12207,6 +12460,12 @@ packages: engines: { node: '>= 14' } hasBin: true + yaml@2.7.0: + resolution: + { integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== } + engines: { node: '>= 14' } + hasBin: true + yargs-parser@21.1.1: resolution: { integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== } @@ -12221,6 +12480,11 @@ packages: resolution: { integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== } + yauzl@3.2.0: + resolution: + { integrity: sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w== } + engines: { node: '>=12' } + yocto-queue@0.1.0: resolution: { integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== } @@ -12231,16 +12495,26 @@ packages: { integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g== } engines: { node: '>=12.20' } + yocto-spinner@0.1.2: + resolution: + { integrity: sha512-VfmLIh/ZSZOJnVRQZc/dvpPP90lWL4G0bmxQMP0+U/2vKBA8GSpcBuWv17y7F+CZItRuO97HN1wdbb4p10uhOg== } + engines: { node: '>=18.19' } + yoctocolors-cjs@2.1.2: resolution: { integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== } engines: { node: '>=18' } - zod-to-json-schema@3.23.5: + yoctocolors@2.1.1: + resolution: + { integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ== } + engines: { node: '>=18' } + + zod-to-json-schema@3.24.1: resolution: - { integrity: sha512-5wlSS0bXfF/BrL4jPAbz9da5hDlDptdEppYfe+x4eIJ7jioqKG9uUxOwPzqof09u/XeVdrgFu29lZi+8XNDJtA== } + { integrity: sha512-3h08nf3Vw3Wl3PK+q3ow/lIil81IT2Oa7YpQyUUDsEWbXveMesdfK1xBd2RhCkynwZndAxixji/7SYJJowr62w== } peerDependencies: - zod: ^3.23.3 + zod: ^3.24.1 zod-to-ts@1.2.0: resolution: @@ -12260,6 +12534,10 @@ packages: resolution: { integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g== } + zod@3.24.1: + resolution: + { integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A== } + zustand@4.5.5: resolution: { integrity: sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q== } @@ -12318,12 +12596,12 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@astrojs/check@0.9.4(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.5.4)': + '@astrojs/check@0.9.4(prettier-plugin-astro@0.14.1)(prettier@3.4.2)(typescript@5.6.3)': dependencies: - '@astrojs/language-server': 2.15.4(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.5.4) + '@astrojs/language-server': 2.15.4(prettier-plugin-astro@0.14.1)(prettier@3.4.2)(typescript@5.6.3) chokidar: 4.0.1 kleur: 4.1.5 - typescript: 5.5.4 + typescript: 5.6.3 yargs: 17.7.2 transitivePeerDependencies: - prettier @@ -12331,14 +12609,14 @@ snapshots: '@astrojs/compiler@2.10.3': {} - '@astrojs/internal-helpers@0.4.1': {} + '@astrojs/internal-helpers@0.4.2': {} - '@astrojs/language-server@2.15.4(prettier-plugin-astro@0.14.1)(prettier@3.3.3)(typescript@5.5.4)': + '@astrojs/language-server@2.15.4(prettier-plugin-astro@0.14.1)(prettier@3.4.2)(typescript@5.6.3)': dependencies: '@astrojs/compiler': 2.10.3 '@astrojs/yaml2ts': 0.2.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@volar/kit': 2.4.10(typescript@5.5.4) + '@volar/kit': 2.4.10(typescript@5.6.3) '@volar/language-core': 2.4.10 '@volar/language-server': 2.4.10 '@volar/language-service': 2.4.10 @@ -12347,25 +12625,26 @@ snapshots: volar-service-css: 0.0.62(@volar/language-service@2.4.10) volar-service-emmet: 0.0.62(@volar/language-service@2.4.10) volar-service-html: 0.0.62(@volar/language-service@2.4.10) - volar-service-prettier: 0.0.62(@volar/language-service@2.4.10)(prettier@3.3.3) + volar-service-prettier: 0.0.62(@volar/language-service@2.4.10)(prettier@3.4.2) volar-service-typescript: 0.0.62(@volar/language-service@2.4.10) volar-service-typescript-twoslash-queries: 0.0.62(@volar/language-service@2.4.10) volar-service-yaml: 0.0.62(@volar/language-service@2.4.10) vscode-html-languageservice: 5.3.1 vscode-uri: 3.0.8 optionalDependencies: - prettier: 3.3.3 + prettier: 3.4.2 prettier-plugin-astro: 0.14.1 transitivePeerDependencies: - typescript - '@astrojs/markdown-remark@5.3.0': + '@astrojs/markdown-remark@6.0.2': dependencies: - '@astrojs/prism': 3.1.0 + '@astrojs/prism': 3.2.0 github-slugger: 2.0.0 hast-util-from-html: 2.0.3 hast-util-to-text: 4.0.2 import-meta-resolve: 4.1.0 + js-yaml: 4.1.0 mdast-util-definitions: 6.0.0 rehype-raw: 7.0.0 rehype-stringify: 10.0.1 @@ -12373,7 +12652,7 @@ snapshots: remark-parse: 11.0.0 remark-rehype: 11.1.1 remark-smartypants: 3.0.2 - shiki: 1.22.2 + shiki: 1.29.1 unified: 11.0.5 unist-util-remove-position: 5.0.0 unist-util-visit: 5.0.0 @@ -12382,16 +12661,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@3.1.9(astro@4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4))': + '@astrojs/mdx@4.0.7(astro@5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0))': dependencies: - '@astrojs/markdown-remark': 5.3.0 + '@astrojs/markdown-remark': 6.0.2 '@mdx-js/mdx': 3.1.0(acorn@8.14.0) acorn: 8.14.0 - astro: 4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4) - es-module-lexer: 1.5.4 + astro: 5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0) + es-module-lexer: 1.6.0 estree-util-visit: 2.0.0 - gray-matter: 4.0.3 - hast-util-to-html: 9.0.3 + hast-util-to-html: 9.0.4 kleur: 4.1.5 rehype-raw: 7.0.0 remark-gfm: 4.0.0 @@ -12402,7 +12680,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/prism@3.1.0': + '@astrojs/prism@3.2.0': dependencies: prismjs: 1.29.0 @@ -12412,30 +12690,33 @@ snapshots: stream-replace-string: 2.0.0 zod: 3.23.8 - '@astrojs/starlight-tailwind@2.0.3(@astrojs/starlight@0.27.1(astro@4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4)))(@astrojs/tailwind@5.1.2(astro@4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4))(tailwindcss@3.4.14))(tailwindcss@3.4.14)': + '@astrojs/starlight-tailwind@3.0.0(@astrojs/starlight@0.31.1(astro@5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0)))(@astrojs/tailwind@5.1.5(astro@5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0))(tailwindcss@3.4.17))(tailwindcss@3.4.17)': dependencies: - '@astrojs/starlight': 0.27.1(astro@4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4)) - '@astrojs/tailwind': 5.1.2(astro@4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4))(tailwindcss@3.4.14) - tailwindcss: 3.4.14 + '@astrojs/starlight': 0.31.1(astro@5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0)) + '@astrojs/tailwind': 5.1.5(astro@5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0))(tailwindcss@3.4.17) + tailwindcss: 3.4.17 - '@astrojs/starlight@0.27.1(astro@4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4))': + '@astrojs/starlight@0.31.1(astro@5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0))': dependencies: - '@astrojs/mdx': 3.1.9(astro@4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4)) + '@astrojs/mdx': 4.0.7(astro@5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0)) '@astrojs/sitemap': 3.2.1 - '@pagefind/default-ui': 1.2.0 + '@pagefind/default-ui': 1.3.0 '@types/hast': 3.0.4 + '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4) - astro-expressive-code: 0.35.6(astro@4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4)) + astro: 5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0) + astro-expressive-code: 0.40.1(astro@5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.3 hast-util-to-string: 3.0.1 hastscript: 9.0.0 + i18next: 23.16.8 + js-yaml: 4.1.0 mdast-util-directive: 3.0.0 mdast-util-to-markdown: 2.1.2 mdast-util-to-string: 4.0.0 - pagefind: 1.2.0 + pagefind: 1.3.0 rehype: 13.0.2 rehype-format: 5.0.1 remark-directive: 3.0.0 @@ -12445,20 +12726,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/tailwind@5.1.2(astro@4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4))(tailwindcss@3.4.14)': + '@astrojs/tailwind@5.1.5(astro@5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0))(tailwindcss@3.4.17)': dependencies: - astro: 4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4) - autoprefixer: 10.4.20(postcss@8.4.49) - postcss: 8.4.49 - postcss-load-config: 4.0.2(postcss@8.4.49) - tailwindcss: 3.4.14 + astro: 5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0) + autoprefixer: 10.4.20(postcss@8.5.1) + postcss: 8.5.1 + postcss-load-config: 4.0.2(postcss@8.5.1) + tailwindcss: 3.4.17 transitivePeerDependencies: - ts-node - '@astrojs/telemetry@3.1.0': + '@astrojs/telemetry@3.2.0': dependencies: ci-info: 4.1.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0 dlv: 1.1.3 dset: 3.1.4 is-docker: 3.0.0 @@ -12507,10 +12788,6 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 - '@babel/helper-annotate-as-pure@7.25.9': - dependencies: - '@babel/types': 7.26.0 - '@babel/helper-compilation-targets@7.25.9': dependencies: '@babel/compat-data': 7.26.2 @@ -12535,8 +12812,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-plugin-utils@7.25.9': {} - '@babel/helper-string-parser@7.25.9': {} '@babel/helper-validator-identifier@7.25.9': {} @@ -12552,22 +12827,6 @@ snapshots: dependencies: '@babel/types': 7.26.0 - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - - '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)': - dependencies: - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/types': 7.26.0 - transitivePeerDependencies: - - supports-color - '@babel/runtime@7.26.0': dependencies: regenerator-runtime: 0.14.1 @@ -12621,14 +12880,21 @@ snapshots: '@ucast/core': 1.10.2 '@ucast/js': 3.0.4 + '@casl/prisma@1.5.1(@casl/ability@6.7.2)(@prisma/client@5.22.0(prisma@5.22.0))': + dependencies: + '@casl/ability': 6.7.2 + '@prisma/client': 5.22.0(prisma@5.22.0) + '@ucast/core': 1.10.2 + '@ucast/js': 3.0.4 + '@colors/colors@1.5.0': optional: true - '@commitlint/cli@19.5.0(@types/node@20.17.6)(typescript@5.5.4)': + '@commitlint/cli@19.6.1(@types/node@20.17.6)(typescript@5.6.3)': dependencies: '@commitlint/format': 19.5.0 - '@commitlint/lint': 19.5.0 - '@commitlint/load': 19.5.0(@types/node@20.17.6)(typescript@5.5.4) + '@commitlint/lint': 19.6.0 + '@commitlint/load': 19.6.1(@types/node@20.17.6)(typescript@5.6.3) '@commitlint/read': 19.5.0 '@commitlint/types': 19.5.0 tinyexec: 0.3.1 @@ -12637,7 +12903,7 @@ snapshots: - '@types/node' - typescript - '@commitlint/config-conventional@19.5.0': + '@commitlint/config-conventional@19.6.0': dependencies: '@commitlint/types': 19.5.0 conventional-changelog-conventionalcommits: 7.0.2 @@ -12663,27 +12929,27 @@ snapshots: '@commitlint/types': 19.5.0 chalk: 5.3.0 - '@commitlint/is-ignored@19.5.0': + '@commitlint/is-ignored@19.6.0': dependencies: '@commitlint/types': 19.5.0 semver: 7.6.3 - '@commitlint/lint@19.5.0': + '@commitlint/lint@19.6.0': dependencies: - '@commitlint/is-ignored': 19.5.0 + '@commitlint/is-ignored': 19.6.0 '@commitlint/parse': 19.5.0 - '@commitlint/rules': 19.5.0 + '@commitlint/rules': 19.6.0 '@commitlint/types': 19.5.0 - '@commitlint/load@19.5.0(@types/node@20.17.6)(typescript@5.5.4)': + '@commitlint/load@19.6.1(@types/node@20.17.6)(typescript@5.6.3)': dependencies: '@commitlint/config-validator': 19.5.0 '@commitlint/execute-rule': 19.5.0 '@commitlint/resolve-extends': 19.5.0 '@commitlint/types': 19.5.0 chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.5.4) - cosmiconfig-typescript-loader: 5.1.0(@types/node@20.17.6)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4) + cosmiconfig: 9.0.0(typescript@5.6.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@20.17.6)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -12716,7 +12982,7 @@ snapshots: lodash.mergewith: 4.6.2 resolve-from: 5.0.0 - '@commitlint/rules@19.5.0': + '@commitlint/rules@19.6.0': dependencies: '@commitlint/ensure': 19.5.0 '@commitlint/message': 19.5.0 @@ -12764,7 +13030,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@douglasneuroinformatics/esbuild-plugin-prisma@1.0.0(@prisma/client@5.22.0(prisma@5.22.0))(@prisma/engines@5.22.0)(esbuild@0.23.1)(prisma@5.22.0)': + '@douglasneuroinformatics/esbuild-plugin-prisma@1.0.1(@prisma/client@5.22.0(prisma@5.22.0))(@prisma/engines@5.22.0)(esbuild@0.23.1)(prisma@5.22.0)': dependencies: '@prisma/client': 5.22.0(prisma@5.22.0) '@prisma/engines': 5.22.0 @@ -12772,20 +13038,20 @@ snapshots: esbuild: 0.23.1 prisma: 5.22.0 - '@douglasneuroinformatics/eslint-config@5.2.3(astro-eslint-parser@1.1.0(typescript@5.5.4))(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4)': - dependencies: - eslint: 9.14.0(jiti@1.21.6) - eslint-plugin-astro: 1.3.1(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4) - eslint-plugin-jsdoc: 50.5.0(eslint@9.14.0(jiti@1.21.6)) - eslint-plugin-jsonc: 2.18.1(eslint@9.14.0(jiti@1.21.6)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.14.0(jiti@1.21.6)) - eslint-plugin-perfectionist: 3.9.1(astro-eslint-parser@1.1.0(typescript@5.5.4))(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4) - eslint-plugin-react: 7.37.2(eslint@9.14.0(jiti@1.21.6)) - eslint-plugin-svelte: 2.46.0(eslint@9.14.0(jiti@1.21.6)) - globals: 15.12.0 - typescript-eslint: 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4) + '@douglasneuroinformatics/eslint-config@5.2.4(astro-eslint-parser@1.1.0(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': + dependencies: + eslint: 9.18.0(jiti@2.4.2) + eslint-plugin-astro: 1.3.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + eslint-plugin-jsdoc: 50.6.1(eslint@9.18.0(jiti@2.4.2)) + eslint-plugin-jsonc: 2.18.2(eslint@9.18.0(jiti@2.4.2)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.18.0(jiti@2.4.2)) + eslint-plugin-perfectionist: 3.9.1(astro-eslint-parser@1.1.0(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + eslint-plugin-react: 7.37.2(eslint@9.18.0(jiti@2.4.2)) + eslint-plugin-svelte: 2.46.1(eslint@9.18.0(jiti@2.4.2)) + globals: 15.13.0 + typescript-eslint: 8.18.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 transitivePeerDependencies: - '@eslint/json' - astro-eslint-parser @@ -12799,43 +13065,39 @@ snapshots: dependencies: '@hpke/core': 1.7.1 - '@douglasneuroinformatics/libjs@0.8.0(typescript@5.5.4)': + '@douglasneuroinformatics/libjs@1.2.0(typescript@5.6.3)': dependencies: - type-fest: 4.28.0 - typescript: 5.5.4 + type-fest: 4.30.2 + typescript: 5.6.3 - '@douglasneuroinformatics/libjs@1.0.2(typescript@5.5.4)': + '@douglasneuroinformatics/libnest@0.5.1(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7)(@nestjs/testing@10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7))(@prisma/client@5.22.0(prisma@5.22.0))(express@4.21.2)(mongodb@6.12.0(socks@2.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.1)(typescript@5.6.3)(zod@vendor+zod@3.23.x)': dependencies: - type-fest: 4.26.1 - typescript: 5.5.4 - - '@douglasneuroinformatics/libnest@0.5.0(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7)(@nestjs/testing@10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7))(@prisma/client@5.22.0(prisma@5.22.0))(express@4.21.1)(mongodb@6.10.0(socks@2.8.3))(reflect-metadata@0.1.14)(rxjs@7.8.1)(typescript@5.5.4)(zod@vendor+zod@3.23.x)': - dependencies: - '@douglasneuroinformatics/libjs': 1.0.2(typescript@5.5.4) + '@douglasneuroinformatics/libjs': 1.2.0(typescript@5.6.3) '@nestjs/common': 10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1) '@nestjs/core': 10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(encoding@0.1.13)(reflect-metadata@0.1.14)(rxjs@7.8.1) '@nestjs/platform-express': 10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7) '@nestjs/testing': 10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7)(@nestjs/platform-express@10.4.7) '@prisma/client': 5.22.0(prisma@5.22.0) chalk: 5.3.0 - express: 4.21.1 + express: 4.21.2 lodash: 4.17.21 - mongodb: 6.10.0(socks@2.8.3) + mongodb: 6.12.0(socks@2.8.3) reflect-metadata: 0.1.14 rxjs: 7.8.1 - type-fest: 4.28.0 + serialize-error: 12.0.0 + type-fest: 4.30.2 zod: link:vendor/zod@3.23.x transitivePeerDependencies: - typescript - '@douglasneuroinformatics/libpasswd@0.0.3(typescript@5.5.4)': + '@douglasneuroinformatics/libpasswd@0.0.3(typescript@5.6.3)': dependencies: '@zxcvbn-ts/core': 3.0.4 '@zxcvbn-ts/language-common': 3.0.4 '@zxcvbn-ts/language-en': 3.0.2 '@zxcvbn-ts/language-fr': 3.0.2 type-fest: 4.26.1 - typescript: 5.5.4 + typescript: 5.6.3 '@douglasneuroinformatics/libstats-darwin-arm64@0.2.0': optional: true @@ -12876,9 +13138,9 @@ snapshots: dependencies: type-fest: 4.26.1 - '@douglasneuroinformatics/libui@3.7.3(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.14)(typescript@5.5.4)(zod@3.23.8)': + '@douglasneuroinformatics/libui@3.8.6(@types/react@18.3.12)(immer@10.1.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@3.4.17)(typescript@5.6.3)(zod@3.24.1)': dependencies: - '@douglasneuroinformatics/libjs': 0.8.0(typescript@5.5.4) + '@douglasneuroinformatics/libjs': 1.2.0(typescript@5.6.3) '@douglasneuroinformatics/libui-form-types': 0.11.0 '@radix-ui/react-accordion': 1.2.1(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-alert-dialog': 1.1.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -12902,13 +13164,13 @@ snapshots: '@radix-ui/react-switch': 1.1.1(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tabs': 1.1.1(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-tooltip': 1.1.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@tailwindcss/container-queries': 0.1.1(tailwindcss@3.4.14) + '@tailwindcss/container-queries': 0.1.1(tailwindcss@3.4.17) class-variance-authority: 0.7.0 clsx: 2.1.1 cmdk: 1.0.4(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - framer-motion: 11.11.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1) lodash-es: 4.17.21 lucide-react: 0.451.0(react@18.3.1) + motion: 11.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-dropzone: 14.3.5(react@18.3.1) @@ -12916,12 +13178,12 @@ snapshots: react-resizable-panels: 2.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) recharts: 2.13.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tailwind-merge: 2.5.4 - tailwindcss: 3.4.14 - tailwindcss-animate: 1.0.7(tailwindcss@3.4.14) + tailwindcss: 3.4.17 + tailwindcss-animate: 1.0.7(tailwindcss@3.4.17) ts-pattern: 5.5.0 - type-fest: 4.28.0 + type-fest: 4.30.2 vaul: 0.9.9(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - zod: 3.23.8 + zod: 3.24.1 zustand: 4.5.5(@types/react@18.3.12)(immer@10.1.1)(react@18.3.1) transitivePeerDependencies: - '@emotion/is-prop-valid' @@ -12930,9 +13192,9 @@ snapshots: - immer - typescript - '@douglasneuroinformatics/libui@3.7.3(@types/react@18.3.12)(immer@10.1.1)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x)(tailwindcss@3.4.14)(typescript@5.5.4)(zod@vendor+zod@3.23.x)': + '@douglasneuroinformatics/libui@3.8.6(@types/react@18.3.12)(immer@10.1.1)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x)(tailwindcss@3.4.14)(typescript@5.6.3)(zod@vendor+zod@3.23.x)': dependencies: - '@douglasneuroinformatics/libjs': 0.8.0(typescript@5.5.4) + '@douglasneuroinformatics/libjs': 1.2.0(typescript@5.6.3) '@douglasneuroinformatics/libui-form-types': 0.11.0 '@radix-ui/react-accordion': 1.2.1(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) '@radix-ui/react-alert-dialog': 1.1.2(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) @@ -12960,9 +13222,9 @@ snapshots: class-variance-authority: 0.7.0 clsx: 2.1.1 cmdk: 1.0.4(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) - framer-motion: 11.11.15(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) lodash-es: 4.17.21 lucide-react: 0.451.0(react@vendor+react@18.x) + motion: 11.15.0(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) react: link:vendor/react@18.x react-dom: link:vendor/react-dom@18.x react-dropzone: 14.3.5(react@vendor+react@18.x) @@ -12973,7 +13235,61 @@ snapshots: tailwindcss: 3.4.14 tailwindcss-animate: 1.0.7(tailwindcss@3.4.14) ts-pattern: 5.5.0 - type-fest: 4.28.0 + type-fest: 4.30.2 + vaul: 0.9.9(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + zod: link:vendor/zod@3.23.x + zustand: 4.5.5(@types/react@18.3.12)(immer@10.1.1)(react@vendor+react@18.x) + transitivePeerDependencies: + - '@emotion/is-prop-valid' + - '@types/react' + - '@types/react-dom' + - immer + - typescript + + '@douglasneuroinformatics/libui@3.8.6(@types/react@18.3.12)(immer@10.1.1)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x)(tailwindcss@3.4.17)(typescript@5.6.3)(zod@vendor+zod@3.23.x)': + dependencies: + '@douglasneuroinformatics/libjs': 1.2.0(typescript@5.6.3) + '@douglasneuroinformatics/libui-form-types': 0.11.0 + '@radix-ui/react-accordion': 1.2.1(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-alert-dialog': 1.1.2(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-avatar': 1.1.1(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-checkbox': 1.1.2(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-collapsible': 1.1.1(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-context-menu': 2.2.2(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-dialog': 1.1.2(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-dropdown-menu': 2.1.2(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-hover-card': 1.1.2(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-label': 2.1.0(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-menubar': 1.1.2(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-popover': 1.1.2(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-progress': 1.1.0(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-radio-group': 1.2.1(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-scroll-area': 1.2.1(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-select': 2.1.2(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-separator': 1.1.0(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-slider': 1.2.1(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@vendor+react@18.x) + '@radix-ui/react-switch': 1.1.1(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-tabs': 1.1.1(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@radix-ui/react-tooltip': 1.1.4(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + '@tailwindcss/container-queries': 0.1.1(tailwindcss@3.4.17) + class-variance-authority: 0.7.0 + clsx: 2.1.1 + cmdk: 1.0.4(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + lodash-es: 4.17.21 + lucide-react: 0.451.0(react@vendor+react@18.x) + motion: 11.15.0(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + react: link:vendor/react@18.x + react-dom: link:vendor/react-dom@18.x + react-dropzone: 14.3.5(react@vendor+react@18.x) + react-error-boundary: 4.1.2(react@vendor+react@18.x) + react-resizable-panels: 2.1.6(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + recharts: 2.13.3(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + tailwind-merge: 2.5.4 + tailwindcss: 3.4.17 + tailwindcss-animate: 1.0.7(tailwindcss@3.4.17) + ts-pattern: 5.5.0 + type-fest: 4.30.2 vaul: 0.9.9(@types/react@18.3.12)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) zod: link:vendor/zod@3.23.x zustand: 4.5.5(@types/react@18.3.12)(immer@10.1.1)(react@vendor+react@18.x) @@ -12984,17 +13300,17 @@ snapshots: - immer - typescript - '@douglasneuroinformatics/prettier-config@0.0.1(husky@9.1.6)(prettier-plugin-astro@0.14.1)(prettier-plugin-tailwindcss@0.6.8(prettier-plugin-astro@0.14.1)(prettier@3.3.3))(prettier@3.3.3)': + '@douglasneuroinformatics/prettier-config@0.0.1(husky@9.1.7)(prettier-plugin-astro@0.14.1)(prettier-plugin-tailwindcss@0.6.10(prettier-plugin-astro@0.14.1)(prettier@3.4.2))(prettier@3.4.2)': dependencies: - prettier: 3.3.3 + prettier: 3.4.2 optionalDependencies: - husky: 9.1.6 + husky: 9.1.7 prettier-plugin-astro: 0.14.1 - prettier-plugin-tailwindcss: 0.6.8(prettier-plugin-astro@0.14.1)(prettier@3.3.3) + prettier-plugin-tailwindcss: 0.6.10(prettier-plugin-astro@0.14.1)(prettier@3.4.2) - '@douglasneuroinformatics/tsconfig@1.0.2(typescript@5.5.4)': + '@douglasneuroinformatics/tsconfig@1.0.2(typescript@5.6.3)': dependencies: - typescript: 5.5.4 + typescript: 5.6.3 '@emmetio/abbreviation@2.3.3': dependencies: @@ -13050,7 +13366,7 @@ snapshots: '@esbuild/aix-ppc64@0.23.1': optional: true - '@esbuild/aix-ppc64@0.24.0': + '@esbuild/aix-ppc64@0.24.2': optional: true '@esbuild/android-arm64@0.20.2': @@ -13062,7 +13378,7 @@ snapshots: '@esbuild/android-arm64@0.23.1': optional: true - '@esbuild/android-arm64@0.24.0': + '@esbuild/android-arm64@0.24.2': optional: true '@esbuild/android-arm@0.20.2': @@ -13074,7 +13390,7 @@ snapshots: '@esbuild/android-arm@0.23.1': optional: true - '@esbuild/android-arm@0.24.0': + '@esbuild/android-arm@0.24.2': optional: true '@esbuild/android-x64@0.20.2': @@ -13086,7 +13402,7 @@ snapshots: '@esbuild/android-x64@0.23.1': optional: true - '@esbuild/android-x64@0.24.0': + '@esbuild/android-x64@0.24.2': optional: true '@esbuild/darwin-arm64@0.20.2': @@ -13098,7 +13414,7 @@ snapshots: '@esbuild/darwin-arm64@0.23.1': optional: true - '@esbuild/darwin-arm64@0.24.0': + '@esbuild/darwin-arm64@0.24.2': optional: true '@esbuild/darwin-x64@0.20.2': @@ -13110,7 +13426,7 @@ snapshots: '@esbuild/darwin-x64@0.23.1': optional: true - '@esbuild/darwin-x64@0.24.0': + '@esbuild/darwin-x64@0.24.2': optional: true '@esbuild/freebsd-arm64@0.20.2': @@ -13122,7 +13438,7 @@ snapshots: '@esbuild/freebsd-arm64@0.23.1': optional: true - '@esbuild/freebsd-arm64@0.24.0': + '@esbuild/freebsd-arm64@0.24.2': optional: true '@esbuild/freebsd-x64@0.20.2': @@ -13134,7 +13450,7 @@ snapshots: '@esbuild/freebsd-x64@0.23.1': optional: true - '@esbuild/freebsd-x64@0.24.0': + '@esbuild/freebsd-x64@0.24.2': optional: true '@esbuild/linux-arm64@0.20.2': @@ -13146,7 +13462,7 @@ snapshots: '@esbuild/linux-arm64@0.23.1': optional: true - '@esbuild/linux-arm64@0.24.0': + '@esbuild/linux-arm64@0.24.2': optional: true '@esbuild/linux-arm@0.20.2': @@ -13158,7 +13474,7 @@ snapshots: '@esbuild/linux-arm@0.23.1': optional: true - '@esbuild/linux-arm@0.24.0': + '@esbuild/linux-arm@0.24.2': optional: true '@esbuild/linux-ia32@0.20.2': @@ -13170,7 +13486,7 @@ snapshots: '@esbuild/linux-ia32@0.23.1': optional: true - '@esbuild/linux-ia32@0.24.0': + '@esbuild/linux-ia32@0.24.2': optional: true '@esbuild/linux-loong64@0.20.2': @@ -13182,7 +13498,7 @@ snapshots: '@esbuild/linux-loong64@0.23.1': optional: true - '@esbuild/linux-loong64@0.24.0': + '@esbuild/linux-loong64@0.24.2': optional: true '@esbuild/linux-mips64el@0.20.2': @@ -13194,7 +13510,7 @@ snapshots: '@esbuild/linux-mips64el@0.23.1': optional: true - '@esbuild/linux-mips64el@0.24.0': + '@esbuild/linux-mips64el@0.24.2': optional: true '@esbuild/linux-ppc64@0.20.2': @@ -13206,7 +13522,7 @@ snapshots: '@esbuild/linux-ppc64@0.23.1': optional: true - '@esbuild/linux-ppc64@0.24.0': + '@esbuild/linux-ppc64@0.24.2': optional: true '@esbuild/linux-riscv64@0.20.2': @@ -13218,7 +13534,7 @@ snapshots: '@esbuild/linux-riscv64@0.23.1': optional: true - '@esbuild/linux-riscv64@0.24.0': + '@esbuild/linux-riscv64@0.24.2': optional: true '@esbuild/linux-s390x@0.20.2': @@ -13230,7 +13546,7 @@ snapshots: '@esbuild/linux-s390x@0.23.1': optional: true - '@esbuild/linux-s390x@0.24.0': + '@esbuild/linux-s390x@0.24.2': optional: true '@esbuild/linux-x64@0.20.2': @@ -13242,7 +13558,10 @@ snapshots: '@esbuild/linux-x64@0.23.1': optional: true - '@esbuild/linux-x64@0.24.0': + '@esbuild/linux-x64@0.24.2': + optional: true + + '@esbuild/netbsd-arm64@0.24.2': optional: true '@esbuild/netbsd-x64@0.20.2': @@ -13254,13 +13573,13 @@ snapshots: '@esbuild/netbsd-x64@0.23.1': optional: true - '@esbuild/netbsd-x64@0.24.0': + '@esbuild/netbsd-x64@0.24.2': optional: true '@esbuild/openbsd-arm64@0.23.1': optional: true - '@esbuild/openbsd-arm64@0.24.0': + '@esbuild/openbsd-arm64@0.24.2': optional: true '@esbuild/openbsd-x64@0.20.2': @@ -13272,7 +13591,7 @@ snapshots: '@esbuild/openbsd-x64@0.23.1': optional: true - '@esbuild/openbsd-x64@0.24.0': + '@esbuild/openbsd-x64@0.24.2': optional: true '@esbuild/sunos-x64@0.20.2': @@ -13284,7 +13603,7 @@ snapshots: '@esbuild/sunos-x64@0.23.1': optional: true - '@esbuild/sunos-x64@0.24.0': + '@esbuild/sunos-x64@0.24.2': optional: true '@esbuild/win32-arm64@0.20.2': @@ -13296,7 +13615,7 @@ snapshots: '@esbuild/win32-arm64@0.23.1': optional: true - '@esbuild/win32-arm64@0.24.0': + '@esbuild/win32-arm64@0.24.2': optional: true '@esbuild/win32-ia32@0.20.2': @@ -13308,7 +13627,7 @@ snapshots: '@esbuild/win32-ia32@0.23.1': optional: true - '@esbuild/win32-ia32@0.24.0': + '@esbuild/win32-ia32@0.24.2': optional: true '@esbuild/win32-x64@0.20.2': @@ -13320,27 +13639,29 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@esbuild/win32-x64@0.24.0': + '@esbuild/win32-x64@0.24.2': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.14.0(jiti@1.21.6))': + '@eslint-community/eslint-utils@4.4.1(eslint@9.18.0(jiti@2.4.2))': dependencies: - eslint: 9.14.0(jiti@1.21.6) + eslint: 9.18.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.18.0': + '@eslint/config-array@0.19.1': dependencies: - '@eslint/object-schema': 2.1.4 + '@eslint/object-schema': 2.1.5 debug: 4.3.7(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/core@0.7.0': {} + '@eslint/core@0.10.0': + dependencies: + '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.1.0': + '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 debug: 4.3.7(supports-color@8.1.1) @@ -13354,40 +13675,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.14.0': {} + '@eslint/js@9.18.0': {} - '@eslint/object-schema@2.1.4': {} + '@eslint/object-schema@2.1.5': {} - '@eslint/plugin-kit@0.2.2': + '@eslint/plugin-kit@0.2.5': dependencies: + '@eslint/core': 0.10.0 levn: 0.4.1 - '@expressive-code/core@0.35.6': + '@expressive-code/core@0.40.1': dependencies: '@ctrl/tinycolor': 4.1.0 hast-util-select: 6.0.3 hast-util-to-html: 9.0.3 hast-util-to-text: 4.0.2 hastscript: 9.0.0 - postcss: 8.4.49 - postcss-nested: 6.2.0(postcss@8.4.49) + postcss: 8.5.1 + postcss-nested: 6.2.0(postcss@8.5.1) unist-util-visit: 5.0.0 unist-util-visit-parents: 6.0.1 - '@expressive-code/plugin-frames@0.35.6': + '@expressive-code/plugin-frames@0.40.1': dependencies: - '@expressive-code/core': 0.35.6 + '@expressive-code/core': 0.40.1 - '@expressive-code/plugin-shiki@0.35.6': + '@expressive-code/plugin-shiki@0.40.1': dependencies: - '@expressive-code/core': 0.35.6 - shiki: 1.22.2 + '@expressive-code/core': 0.40.1 + shiki: 1.29.1 - '@expressive-code/plugin-text-markers@0.35.6': + '@expressive-code/plugin-text-markers@0.40.1': dependencies: - '@expressive-code/core': 0.35.6 + '@expressive-code/core': 0.40.1 - '@faker-js/faker@9.2.0': {} + '@faker-js/faker@9.4.0': {} '@fastify/busboy@2.1.1': {} @@ -13417,13 +13739,19 @@ snapshots: '@gar/promisify@1.1.3': optional: true + '@gerrit0/mini-shiki@1.27.2': + dependencies: + '@shikijs/engine-oniguruma': 1.29.1 + '@shikijs/types': 1.29.1 + '@shikijs/vscode-textmate': 10.0.1 + '@hapi/hoek@9.3.0': {} '@hapi/topo@5.1.0': dependencies: '@hapi/hoek': 9.3.0 - '@heroicons/react@2.1.5(react@vendor+react@18.x)': + '@heroicons/react@2.2.0(react@vendor+react@18.x)': dependencies: react: link:vendor/react@18.x @@ -13521,27 +13849,25 @@ snapshots: '@img/sharp-win32-x64@0.33.5': optional: true - '@import-meta-env/cli@0.7.1(@import-meta-env/unplugin@0.6.0)': + '@import-meta-env/cli@0.7.2(@import-meta-env/unplugin@0.6.2)': dependencies: commander: 12.1.0 - dotenv: 16.4.5 + dotenv: 16.4.7 glob: 11.0.0 picocolors: 1.1.1 serialize-javascript: 6.0.2 optionalDependencies: - '@import-meta-env/unplugin': 0.6.0(@import-meta-env/cli@0.7.1) + '@import-meta-env/unplugin': 0.6.2(@import-meta-env/cli@0.7.2) - '@import-meta-env/unplugin@0.6.0(@import-meta-env/cli@0.7.1)': + '@import-meta-env/unplugin@0.6.2(@import-meta-env/cli@0.7.2)': dependencies: - dotenv: 16.4.5 - magic-string: 0.30.12 + dotenv: 16.4.7 + magic-string: 0.30.17 object-hash: 3.0.0 picocolors: 1.1.1 - unplugin: 1.15.0 + unplugin: 2.1.2 optionalDependencies: - '@import-meta-env/cli': 0.7.1(@import-meta-env/unplugin@0.6.0) - transitivePeerDependencies: - - webpack-sources + '@import-meta-env/cli': 0.7.2(@import-meta-env/unplugin@0.6.2) '@inquirer/confirm@5.0.2(@types/node@20.17.6)': dependencies: @@ -13580,15 +13906,13 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@joshwooding/vite-plugin-react-docgen-typescript@0.3.0(typescript@5.5.4)(vite@5.4.11(@types/node@20.17.6))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2(typescript@5.6.3)(vite@5.4.14(@types/node@20.17.6))': dependencies: - glob: 7.2.3 - glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 - react-docgen-typescript: 2.2.2(typescript@5.5.4) - vite: 5.4.11(@types/node@20.17.6) + react-docgen-typescript: 2.2.2(typescript@5.6.3) + vite: 5.4.14(@types/node@20.17.6) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -13740,26 +14064,15 @@ snapshots: '@microsoft/tsdoc@0.15.0': {} - '@mole-inc/bin-wrapper@8.0.1': - dependencies: - bin-check: 4.1.0 - bin-version-check: 5.1.0 - content-disposition: 0.5.4 - ext-name: 5.0.0 - file-type: 17.1.6 - filenamify: 5.1.1 - got: 11.8.6 - os-filter-obj: 2.0.0 - - '@monaco-editor/loader@1.4.0(monaco-editor@0.51.0)': + '@monaco-editor/loader@1.4.0(monaco-editor@0.52.2)': dependencies: - monaco-editor: 0.51.0 + monaco-editor: 0.52.2 state-local: 1.0.7 - '@monaco-editor/react@4.6.0(monaco-editor@0.51.0)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x)': + '@monaco-editor/react@4.6.0(monaco-editor@0.52.2)(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x)': dependencies: - '@monaco-editor/loader': 1.4.0(monaco-editor@0.51.0) - monaco-editor: 0.51.0 + '@monaco-editor/loader': 1.4.0(monaco-editor@0.52.2) + monaco-editor: 0.52.2 react: link:vendor/react@18.x react-dom: link:vendor/react-dom@18.x @@ -13854,7 +14167,7 @@ snapshots: '@nestjs/axios@3.1.2(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(axios@1.7.7)(rxjs@7.8.1)': dependencies: '@nestjs/common': 10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1) - axios: 1.7.7(debug@4.3.7) + axios: 1.7.7 rxjs: 7.8.1 '@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1)': @@ -13900,6 +14213,11 @@ snapshots: '@nestjs/common': 10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1) reflect-metadata: 0.1.14 + '@nestjs/mapped-types@2.1.0(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(reflect-metadata@0.1.14)': + dependencies: + '@nestjs/common': 10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1) + reflect-metadata: 0.1.14 + '@nestjs/passport@10.0.3(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(passport@0.7.0)': dependencies: '@nestjs/common': 10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1) @@ -13937,7 +14255,7 @@ snapshots: optionalDependencies: '@nestjs/platform-express': 10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7) - '@nestjs/throttler@6.2.1(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.1.14)': + '@nestjs/throttler@6.3.0(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.7)(reflect-metadata@0.1.14)': dependencies: '@nestjs/common': 10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1) '@nestjs/core': 10.4.7(@nestjs/common@10.4.7(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/platform-express@10.4.7)(encoding@0.1.13)(reflect-metadata@0.1.14)(rxjs@7.8.1) @@ -14090,21 +14408,21 @@ snapshots: '@oxc-resolver/binding-win32-x64-msvc@1.12.0': optional: true - '@pagefind/darwin-arm64@1.2.0': + '@pagefind/darwin-arm64@1.3.0': optional: true - '@pagefind/darwin-x64@1.2.0': + '@pagefind/darwin-x64@1.3.0': optional: true - '@pagefind/default-ui@1.2.0': {} + '@pagefind/default-ui@1.3.0': {} - '@pagefind/linux-arm64@1.2.0': + '@pagefind/linux-arm64@1.3.0': optional: true - '@pagefind/linux-x64@1.2.0': + '@pagefind/linux-x64@1.3.0': optional: true - '@pagefind/windows-x64@1.2.0': + '@pagefind/windows-x64@1.3.0': optional: true '@pkgjs/parseargs@0.11.0': @@ -14118,10 +14436,10 @@ snapshots: optionalDependencies: prisma: 5.22.0 - '@prisma/debug@5.20.0': {} - '@prisma/debug@5.22.0': {} + '@prisma/debug@6.0.0': {} + '@prisma/engines-version@5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2': {} '@prisma/engines@5.22.0': @@ -14137,9 +14455,9 @@ snapshots: '@prisma/engines-version': 5.22.0-44.605197351a3c8bdd595af2d2a9bc3025bca48ea2 '@prisma/get-platform': 5.22.0 - '@prisma/generator-helper@5.20.0': + '@prisma/generator-helper@6.0.0': dependencies: - '@prisma/debug': 5.20.0 + '@prisma/debug': 6.0.0 '@prisma/get-platform@5.22.0': dependencies: @@ -15249,66 +15567,77 @@ snapshots: '@remix-run/router@1.21.0': {} - '@rollup/pluginutils@5.1.3(rollup@4.26.0)': + '@rollup/pluginutils@5.1.3(rollup@4.31.0)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.26.0 + rollup: 4.31.0 - '@rollup/rollup-android-arm-eabi@4.26.0': + '@rollup/pluginutils@5.1.4(rollup@4.31.0)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.31.0 + + '@rollup/rollup-android-arm-eabi@4.31.0': + optional: true + + '@rollup/rollup-android-arm64@4.31.0': optional: true - '@rollup/rollup-android-arm64@4.26.0': + '@rollup/rollup-darwin-arm64@4.31.0': optional: true - '@rollup/rollup-darwin-arm64@4.26.0': + '@rollup/rollup-darwin-x64@4.31.0': optional: true - '@rollup/rollup-darwin-x64@4.26.0': + '@rollup/rollup-freebsd-arm64@4.31.0': optional: true - '@rollup/rollup-freebsd-arm64@4.26.0': + '@rollup/rollup-freebsd-x64@4.31.0': optional: true - '@rollup/rollup-freebsd-x64@4.26.0': + '@rollup/rollup-linux-arm-gnueabihf@4.31.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.26.0': + '@rollup/rollup-linux-arm-musleabihf@4.31.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.26.0': + '@rollup/rollup-linux-arm64-gnu@4.31.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.26.0': + '@rollup/rollup-linux-arm64-musl@4.31.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.26.0': + '@rollup/rollup-linux-loongarch64-gnu@4.31.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.26.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.31.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.26.0': + '@rollup/rollup-linux-riscv64-gnu@4.31.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.26.0': + '@rollup/rollup-linux-s390x-gnu@4.31.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.26.0': + '@rollup/rollup-linux-x64-gnu@4.31.0': optional: true - '@rollup/rollup-linux-x64-musl@4.26.0': + '@rollup/rollup-linux-x64-musl@4.31.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.26.0': + '@rollup/rollup-win32-arm64-msvc@4.31.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.26.0': + '@rollup/rollup-win32-ia32-msvc@4.31.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.26.0': + '@rollup/rollup-win32-x64-msvc@4.31.0': optional: true '@rushstack/node-core-library@5.9.0(@types/node@20.17.6)': @@ -15345,32 +15674,42 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@shikijs/core@1.22.2': + '@sec-ant/readable-stream@0.4.1': {} + + '@shikijs/core@1.29.1': dependencies: - '@shikijs/engine-javascript': 1.22.2 - '@shikijs/engine-oniguruma': 1.22.2 - '@shikijs/types': 1.22.2 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/engine-javascript': 1.29.1 + '@shikijs/engine-oniguruma': 1.29.1 + '@shikijs/types': 1.29.1 + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 - hast-util-to-html: 9.0.3 + hast-util-to-html: 9.0.4 + + '@shikijs/engine-javascript@1.29.1': + dependencies: + '@shikijs/types': 1.29.1 + '@shikijs/vscode-textmate': 10.0.1 + oniguruma-to-es: 2.3.0 - '@shikijs/engine-javascript@1.22.2': + '@shikijs/engine-oniguruma@1.29.1': dependencies: - '@shikijs/types': 1.22.2 - '@shikijs/vscode-textmate': 9.3.0 - oniguruma-to-js: 0.4.3 + '@shikijs/types': 1.29.1 + '@shikijs/vscode-textmate': 10.0.1 - '@shikijs/engine-oniguruma@1.22.2': + '@shikijs/langs@1.29.1': dependencies: - '@shikijs/types': 1.22.2 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/types': 1.29.1 - '@shikijs/types@1.22.2': + '@shikijs/themes@1.29.1': dependencies: - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/types': 1.29.1 + + '@shikijs/types@1.29.1': + dependencies: + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 - '@shikijs/vscode-textmate@9.3.0': {} + '@shikijs/vscode-textmate@10.0.1': {} '@sideway/address@4.1.5': dependencies: @@ -15380,142 +15719,142 @@ snapshots: '@sideway/pinpoint@2.0.0': {} - '@sindresorhus/is@4.6.0': {} + '@sindresorhus/is@5.6.0': {} - '@storybook/addon-actions@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/addon-actions@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) uuid: 9.0.1 - '@storybook/addon-backgrounds@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/addon-backgrounds@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 - '@storybook/addon-controls@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/addon-controls@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 dequal: 2.0.3 - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 - '@storybook/addon-docs@8.4.3(@types/react@18.3.12)(storybook@8.4.3(prettier@3.3.3))': + '@storybook/addon-docs@8.5.0(@types/react@18.3.12)(storybook@8.5.0(prettier@3.4.2))': dependencies: '@mdx-js/react': 3.1.0(@types/react@18.3.12)(react@18.3.1) - '@storybook/blocks': 8.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.3(prettier@3.3.3)) - '@storybook/csf-plugin': 8.4.3(storybook@8.4.3(prettier@3.3.3)) - '@storybook/react-dom-shim': 8.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.3(prettier@3.3.3)) + '@storybook/blocks': 8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2)) + '@storybook/csf-plugin': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/react-dom-shim': 8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - webpack-sources - '@storybook/addon-essentials@8.4.3(@types/react@18.3.12)(storybook@8.4.3(prettier@3.3.3))': - dependencies: - '@storybook/addon-actions': 8.4.3(storybook@8.4.3(prettier@3.3.3)) - '@storybook/addon-backgrounds': 8.4.3(storybook@8.4.3(prettier@3.3.3)) - '@storybook/addon-controls': 8.4.3(storybook@8.4.3(prettier@3.3.3)) - '@storybook/addon-docs': 8.4.3(@types/react@18.3.12)(storybook@8.4.3(prettier@3.3.3)) - '@storybook/addon-highlight': 8.4.3(storybook@8.4.3(prettier@3.3.3)) - '@storybook/addon-measure': 8.4.3(storybook@8.4.3(prettier@3.3.3)) - '@storybook/addon-outline': 8.4.3(storybook@8.4.3(prettier@3.3.3)) - '@storybook/addon-toolbars': 8.4.3(storybook@8.4.3(prettier@3.3.3)) - '@storybook/addon-viewport': 8.4.3(storybook@8.4.3(prettier@3.3.3)) - storybook: 8.4.3(prettier@3.3.3) + '@storybook/addon-essentials@8.5.0(@types/react@18.3.12)(storybook@8.5.0(prettier@3.4.2))': + dependencies: + '@storybook/addon-actions': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-backgrounds': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-controls': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-docs': 8.5.0(@types/react@18.3.12)(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-highlight': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-measure': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-outline': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-toolbars': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/addon-viewport': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - webpack-sources - '@storybook/addon-highlight@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/addon-highlight@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/addon-interactions@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/addon-interactions@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.4.3(storybook@8.4.3(prettier@3.3.3)) - '@storybook/test': 8.4.3(storybook@8.4.3(prettier@3.3.3)) + '@storybook/instrumenter': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/test': 8.5.0(storybook@8.5.0(prettier@3.4.2)) polished: 4.3.1 - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 - '@storybook/addon-links@8.4.3(react@18.3.1)(storybook@8.4.3(prettier@3.3.3))': + '@storybook/addon-links@8.5.0(react@18.3.1)(storybook@8.5.0(prettier@3.4.2))': dependencies: - '@storybook/csf': 0.1.11 + '@storybook/csf': 0.1.12 '@storybook/global': 5.0.0 - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 optionalDependencies: react: 18.3.1 - '@storybook/addon-measure@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/addon-measure@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) tiny-invariant: 1.3.3 - '@storybook/addon-outline@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/addon-outline@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 - '@storybook/addon-themes@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/addon-themes@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 - '@storybook/addon-toolbars@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/addon-toolbars@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/addon-viewport@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/addon-viewport@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: memoizerific: 1.11.3 - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/blocks@8.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.3(prettier@3.3.3))': + '@storybook/blocks@8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2))': dependencies: - '@storybook/csf': 0.1.11 - '@storybook/icons': 1.2.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - storybook: 8.4.3(prettier@3.3.3) + '@storybook/csf': 0.1.12 + '@storybook/icons': 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@8.4.3(storybook@8.4.3(prettier@3.3.3))(vite@5.4.11(@types/node@20.17.6))': + '@storybook/builder-vite@8.5.0(storybook@8.5.0(prettier@3.4.2))(vite@5.4.14(@types/node@20.17.6))': dependencies: - '@storybook/csf-plugin': 8.4.3(storybook@8.4.3(prettier@3.3.3)) + '@storybook/csf-plugin': 8.5.0(storybook@8.5.0(prettier@3.4.2)) browser-assert: 1.2.1 - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) ts-dedent: 2.2.0 - vite: 5.4.11(@types/node@20.17.6) + vite: 5.4.14(@types/node@20.17.6) transitivePeerDependencies: - webpack-sources - '@storybook/components@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/components@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/core@8.4.3(prettier@3.3.3)': + '@storybook/core@8.5.0(prettier@3.4.2)': dependencies: - '@storybook/csf': 0.1.11 + '@storybook/csf': 0.1.12 better-opn: 3.0.2 browser-assert: 1.2.1 - esbuild: 0.24.0 - esbuild-register: 3.6.0(esbuild@0.24.0) + esbuild: 0.24.2 + esbuild-register: 3.6.0(esbuild@0.24.2) jsdoc-type-pratt-parser: 4.1.0 process: 0.11.10 recast: 0.23.9 @@ -15523,119 +15862,120 @@ snapshots: util: 0.12.5 ws: 8.18.0 optionalDependencies: - prettier: 3.3.3 + prettier: 3.4.2 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@storybook/csf-plugin@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/csf-plugin@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) unplugin: 1.15.0 transitivePeerDependencies: - webpack-sources - '@storybook/csf@0.1.11': + '@storybook/csf@0.1.12': dependencies: type-fest: 2.19.0 '@storybook/global@5.0.0': {} - '@storybook/icons@1.2.12(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/icons@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/instrumenter@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/instrumenter@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 '@vitest/utils': 2.1.5 - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/manager-api@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/manager-api@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/preview-api@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/preview-api@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/react-dom-shim@8.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.3(prettier@3.3.3))': + '@storybook/react-dom-shim@8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2))': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/react-vite@8.4.3(@storybook/test@8.4.3(storybook@8.4.3(prettier@3.3.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.26.0)(storybook@8.4.3(prettier@3.3.3))(typescript@5.5.4)(vite@5.4.11(@types/node@20.17.6))': + '@storybook/react-vite@8.5.0(@storybook/test@8.5.0(storybook@8.5.0(prettier@3.4.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.31.0)(storybook@8.5.0(prettier@3.4.2))(typescript@5.6.3)(vite@5.4.14(@types/node@20.17.6))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.0(typescript@5.5.4)(vite@5.4.11(@types/node@20.17.6)) - '@rollup/pluginutils': 5.1.3(rollup@4.26.0) - '@storybook/builder-vite': 8.4.3(storybook@8.4.3(prettier@3.3.3))(vite@5.4.11(@types/node@20.17.6)) - '@storybook/react': 8.4.3(@storybook/test@8.4.3(storybook@8.4.3(prettier@3.3.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.3(prettier@3.3.3))(typescript@5.5.4) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.6.3)(vite@5.4.14(@types/node@20.17.6)) + '@rollup/pluginutils': 5.1.3(rollup@4.31.0) + '@storybook/builder-vite': 8.5.0(storybook@8.5.0(prettier@3.4.2))(vite@5.4.14(@types/node@20.17.6)) + '@storybook/react': 8.5.0(@storybook/test@8.5.0(storybook@8.5.0(prettier@3.4.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2))(typescript@5.6.3) find-up: 5.0.0 - magic-string: 0.30.12 + magic-string: 0.30.17 react: 18.3.1 react-docgen: 7.1.0 react-dom: 18.3.1(react@18.3.1) resolve: 1.22.8 - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) tsconfig-paths: 4.2.0 - vite: 5.4.11(@types/node@20.17.6) + vite: 5.4.14(@types/node@20.17.6) + optionalDependencies: + '@storybook/test': 8.5.0(storybook@8.5.0(prettier@3.4.2)) transitivePeerDependencies: - - '@storybook/test' - rollup - supports-color - typescript - webpack-sources - '@storybook/react@8.4.3(@storybook/test@8.4.3(storybook@8.4.3(prettier@3.3.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.3(prettier@3.3.3))(typescript@5.5.4)': + '@storybook/react@8.5.0(@storybook/test@8.5.0(storybook@8.5.0(prettier@3.4.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2))(typescript@5.6.3)': dependencies: - '@storybook/components': 8.4.3(storybook@8.4.3(prettier@3.3.3)) + '@storybook/components': 8.5.0(storybook@8.5.0(prettier@3.4.2)) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.4.3(storybook@8.4.3(prettier@3.3.3)) - '@storybook/preview-api': 8.4.3(storybook@8.4.3(prettier@3.3.3)) - '@storybook/react-dom-shim': 8.4.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.4.3(prettier@3.3.3)) - '@storybook/theming': 8.4.3(storybook@8.4.3(prettier@3.3.3)) + '@storybook/manager-api': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/preview-api': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + '@storybook/react-dom-shim': 8.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.0(prettier@3.4.2)) + '@storybook/theming': 8.5.0(storybook@8.5.0(prettier@3.4.2)) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) optionalDependencies: - '@storybook/test': 8.4.3(storybook@8.4.3(prettier@3.3.3)) - typescript: 5.5.4 + '@storybook/test': 8.5.0(storybook@8.5.0(prettier@3.4.2)) + typescript: 5.6.3 - '@storybook/test@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/test@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: - '@storybook/csf': 0.1.11 + '@storybook/csf': 0.1.12 '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.4.3(storybook@8.4.3(prettier@3.3.3)) + '@storybook/instrumenter': 8.5.0(storybook@8.5.0(prettier@3.4.2)) '@testing-library/dom': 10.4.0 '@testing-library/jest-dom': 6.5.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) '@vitest/expect': 2.0.5 '@vitest/spy': 2.0.5 - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) - '@storybook/theming@8.4.3(storybook@8.4.3(prettier@3.3.3))': + '@storybook/theming@8.5.0(storybook@8.5.0(prettier@3.4.2))': dependencies: - storybook: 8.4.3(prettier@3.3.3) + storybook: 8.5.0(prettier@3.4.2) - '@swc-node/core@1.13.3(@swc/core@1.9.2(@swc/helpers@0.5.15))(@swc/types@0.1.15)': + '@swc-node/core@1.13.3(@swc/core@1.10.9(@swc/helpers@0.5.15))(@swc/types@0.1.17)': dependencies: - '@swc/core': 1.9.2(@swc/helpers@0.5.15) - '@swc/types': 0.1.15 + '@swc/core': 1.10.9(@swc/helpers@0.5.15) + '@swc/types': 0.1.17 - '@swc-node/register@1.10.9(@swc/core@1.9.2(@swc/helpers@0.5.15))(@swc/types@0.1.15)(typescript@5.5.4)': + '@swc-node/register@1.10.9(@swc/core@1.10.9(@swc/helpers@0.5.15))(@swc/types@0.1.17)(typescript@5.6.3)': dependencies: - '@swc-node/core': 1.13.3(@swc/core@1.9.2(@swc/helpers@0.5.15))(@swc/types@0.1.15) + '@swc-node/core': 1.13.3(@swc/core@1.10.9(@swc/helpers@0.5.15))(@swc/types@0.1.17) '@swc-node/sourcemap-support': 0.5.1 - '@swc/core': 1.9.2(@swc/helpers@0.5.15) + '@swc/core': 1.10.9(@swc/helpers@0.5.15) colorette: 2.0.20 debug: 4.3.7(supports-color@8.1.1) oxc-resolver: 1.12.0 pirates: 4.0.6 tslib: 2.8.1 - typescript: 5.5.4 + typescript: 5.6.3 transitivePeerDependencies: - '@swc/types' - supports-color @@ -15645,11 +15985,11 @@ snapshots: source-map-support: 0.5.21 tslib: 2.8.1 - '@swc/cli@0.4.0(@swc/core@1.9.2(@swc/helpers@0.5.15))(chokidar@3.6.0)': + '@swc/cli@0.6.0(@swc/core@1.10.9(@swc/helpers@0.5.15))(chokidar@4.0.1)': dependencies: - '@mole-inc/bin-wrapper': 8.0.1 - '@swc/core': 1.9.2(@swc/helpers@0.5.15) + '@swc/core': 1.10.9(@swc/helpers@0.5.15) '@swc/counter': 0.1.3 + '@xhmikosr/bin-wrapper': 13.0.5 commander: 8.3.0 fast-glob: 3.3.2 minimatch: 9.0.5 @@ -15658,53 +15998,53 @@ snapshots: slash: 3.0.0 source-map: 0.7.4 optionalDependencies: - chokidar: 3.6.0 + chokidar: 4.0.1 - '@swc/core-darwin-arm64@1.9.2': + '@swc/core-darwin-arm64@1.10.9': optional: true - '@swc/core-darwin-x64@1.9.2': + '@swc/core-darwin-x64@1.10.9': optional: true - '@swc/core-linux-arm-gnueabihf@1.9.2': + '@swc/core-linux-arm-gnueabihf@1.10.9': optional: true - '@swc/core-linux-arm64-gnu@1.9.2': + '@swc/core-linux-arm64-gnu@1.10.9': optional: true - '@swc/core-linux-arm64-musl@1.9.2': + '@swc/core-linux-arm64-musl@1.10.9': optional: true - '@swc/core-linux-x64-gnu@1.9.2': + '@swc/core-linux-x64-gnu@1.10.9': optional: true - '@swc/core-linux-x64-musl@1.9.2': + '@swc/core-linux-x64-musl@1.10.9': optional: true - '@swc/core-win32-arm64-msvc@1.9.2': + '@swc/core-win32-arm64-msvc@1.10.9': optional: true - '@swc/core-win32-ia32-msvc@1.9.2': + '@swc/core-win32-ia32-msvc@1.10.9': optional: true - '@swc/core-win32-x64-msvc@1.9.2': + '@swc/core-win32-x64-msvc@1.10.9': optional: true - '@swc/core@1.9.2(@swc/helpers@0.5.15)': + '@swc/core@1.10.9(@swc/helpers@0.5.15)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.15 + '@swc/types': 0.1.17 optionalDependencies: - '@swc/core-darwin-arm64': 1.9.2 - '@swc/core-darwin-x64': 1.9.2 - '@swc/core-linux-arm-gnueabihf': 1.9.2 - '@swc/core-linux-arm64-gnu': 1.9.2 - '@swc/core-linux-arm64-musl': 1.9.2 - '@swc/core-linux-x64-gnu': 1.9.2 - '@swc/core-linux-x64-musl': 1.9.2 - '@swc/core-win32-arm64-msvc': 1.9.2 - '@swc/core-win32-ia32-msvc': 1.9.2 - '@swc/core-win32-x64-msvc': 1.9.2 + '@swc/core-darwin-arm64': 1.10.9 + '@swc/core-darwin-x64': 1.10.9 + '@swc/core-linux-arm-gnueabihf': 1.10.9 + '@swc/core-linux-arm64-gnu': 1.10.9 + '@swc/core-linux-arm64-musl': 1.10.9 + '@swc/core-linux-x64-gnu': 1.10.9 + '@swc/core-linux-x64-musl': 1.10.9 + '@swc/core-win32-arm64-msvc': 1.10.9 + '@swc/core-win32-ia32-msvc': 1.10.9 + '@swc/core-win32-x64-msvc': 1.10.9 '@swc/helpers': 0.5.15 '@swc/counter@0.1.3': {} @@ -15713,11 +16053,11 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/types@0.1.15': + '@swc/types@0.1.17': dependencies: '@swc/counter': 0.1.3 - '@szmarczak/http-timer@4.0.6': + '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 @@ -15725,27 +16065,31 @@ snapshots: dependencies: tailwindcss: 3.4.14 - '@tailwindcss/typography@0.5.15(tailwindcss@3.4.14)': + '@tailwindcss/container-queries@0.1.1(tailwindcss@3.4.17)': + dependencies: + tailwindcss: 3.4.17 + + '@tailwindcss/typography@0.5.16(tailwindcss@3.4.17)': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.14 + tailwindcss: 3.4.17 - '@tanstack/query-core@5.59.20': {} + '@tanstack/query-core@5.64.2': {} - '@tanstack/query-devtools@5.59.20': {} + '@tanstack/query-devtools@5.64.2': {} - '@tanstack/react-query-devtools@5.59.20(@tanstack/react-query@5.59.20(react@vendor+react@18.x))(react@vendor+react@18.x)': + '@tanstack/react-query-devtools@5.64.2(@tanstack/react-query@5.64.2(react@vendor+react@18.x))(react@vendor+react@18.x)': dependencies: - '@tanstack/query-devtools': 5.59.20 - '@tanstack/react-query': 5.59.20(react@vendor+react@18.x) + '@tanstack/query-devtools': 5.64.2 + '@tanstack/react-query': 5.64.2(react@vendor+react@18.x) react: link:vendor/react@18.x - '@tanstack/react-query@5.59.20(react@vendor+react@18.x)': + '@tanstack/react-query@5.64.2(react@vendor+react@18.x)': dependencies: - '@tanstack/query-core': 5.59.20 + '@tanstack/query-core': 5.64.2 react: link:vendor/react@18.x '@testing-library/dom@10.4.0': @@ -15836,13 +16180,6 @@ snapshots: '@types/connect': 3.4.38 '@types/node': 20.17.6 - '@types/cacheable-request@6.0.3': - dependencies: - '@types/http-cache-semantics': 4.0.4 - '@types/keyv': 3.1.4 - '@types/node': 20.17.6 - '@types/responselike': 1.0.3 - '@types/compression@1.7.5': dependencies: '@types/express': 4.17.21 @@ -15938,11 +16275,7 @@ snapshots: dependencies: '@types/node': 20.17.6 - '@types/k6@0.53.2': {} - - '@types/keyv@3.1.4': - dependencies: - '@types/node': 20.17.6 + '@types/k6@0.54.2': {} '@types/mdast@4.0.4': dependencies: @@ -15982,7 +16315,7 @@ snapshots: dependencies: '@types/express': 4.17.21 - '@types/prop-types@15.7.13': {} + '@types/prop-types@15.7.14': {} '@types/qs@6.9.17': {} @@ -15990,15 +16323,11 @@ snapshots: '@types/react@18.3.12': dependencies: - '@types/prop-types': 15.7.13 + '@types/prop-types': 15.7.14 csstype: 3.1.3 '@types/resolve@1.20.6': {} - '@types/responselike@1.0.3': - dependencies: - '@types/node': 20.17.6 - '@types/sax@1.2.7': dependencies: '@types/node': 20.17.6 @@ -16051,86 +16380,82 @@ snapshots: '@types/node': 20.17.6 optional: true - '@typescript-eslint/eslint-plugin@8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4) - '@typescript-eslint/scope-manager': 8.14.0 - '@typescript-eslint/type-utils': 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4) - '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.14.0 - eslint: 9.14.0(jiti@1.21.6) + '@typescript-eslint/parser': 8.18.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/type-utils': 8.18.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/utils': 8.18.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.18.0 + eslint: 9.18.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.4.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 + ts-api-utils: 1.4.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4)': + '@typescript-eslint/parser@8.18.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: - '@typescript-eslint/scope-manager': 8.14.0 - '@typescript-eslint/types': 8.14.0 - '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.14.0 + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.18.0 debug: 4.3.7(supports-color@8.1.1) - eslint: 9.14.0(jiti@1.21.6) - optionalDependencies: - typescript: 5.5.4 + eslint: 9.18.0(jiti@2.4.2) + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.14.0': + '@typescript-eslint/scope-manager@8.18.0': dependencies: - '@typescript-eslint/types': 8.14.0 - '@typescript-eslint/visitor-keys': 8.14.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/visitor-keys': 8.18.0 - '@typescript-eslint/type-utils@8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4)': + '@typescript-eslint/type-utils@8.18.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.18.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) debug: 4.3.7(supports-color@8.1.1) - ts-api-utils: 1.4.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 + eslint: 9.18.0(jiti@2.4.2) + ts-api-utils: 1.4.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - - eslint - supports-color - '@typescript-eslint/types@8.14.0': {} + '@typescript-eslint/types@8.18.0': {} - '@typescript-eslint/typescript-estree@8.14.0(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@8.18.0(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 8.14.0 - '@typescript-eslint/visitor-keys': 8.14.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/visitor-keys': 8.18.0 debug: 4.3.7(supports-color@8.1.1) fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.4.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 + ts-api-utils: 1.4.0(typescript@5.6.3) + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4)': + '@typescript-eslint/utils@8.18.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@1.21.6)) - '@typescript-eslint/scope-manager': 8.14.0 - '@typescript-eslint/types': 8.14.0 - '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.5.4) - eslint: 9.14.0(jiti@1.21.6) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.6.3) + eslint: 9.18.0(jiti@2.4.2) + typescript: 5.6.3 transitivePeerDependencies: - supports-color - - typescript - '@typescript-eslint/visitor-keys@8.14.0': + '@typescript-eslint/visitor-keys@8.18.0': dependencies: - '@typescript-eslint/types': 8.14.0 - eslint-visitor-keys: 3.4.3 + '@typescript-eslint/types': 8.18.0 + eslint-visitor-keys: 4.2.0 '@ucast/core@1.10.2': {} @@ -16150,24 +16475,24 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vitejs/plugin-react-swc@3.7.1(@swc/helpers@0.5.15)(vite@5.4.11(@types/node@20.17.6))': + '@vitejs/plugin-react-swc@3.7.2(@swc/helpers@0.5.15)(vite@5.4.14(@types/node@20.17.6))': dependencies: - '@swc/core': 1.9.2(@swc/helpers@0.5.15) - vite: 5.4.11(@types/node@20.17.6) + '@swc/core': 1.10.9(@swc/helpers@0.5.15) + vite: 5.4.14(@types/node@20.17.6) transitivePeerDependencies: - '@swc/helpers' - '@vitest/browser@2.1.5(@types/node@20.17.6)(typescript@5.5.4)(vite@5.4.11(@types/node@20.17.6))(vitest@2.1.5)': + '@vitest/browser@2.1.5(@types/node@20.17.6)(typescript@5.6.3)(vite@5.4.14(@types/node@20.17.6))(vitest@2.1.5)': dependencies: '@testing-library/dom': 10.4.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) - '@vitest/mocker': 2.1.5(msw@2.6.4(@types/node@20.17.6)(typescript@5.5.4))(vite@5.4.11(@types/node@20.17.6)) + '@vitest/mocker': 2.1.5(msw@2.6.4(@types/node@20.17.6)(typescript@5.6.3))(vite@5.4.14(@types/node@20.17.6)) '@vitest/utils': 2.1.5 magic-string: 0.30.12 - msw: 2.6.4(@types/node@20.17.6)(typescript@5.5.4) + msw: 2.6.4(@types/node@20.17.6)(typescript@5.6.3) sirv: 3.0.0 tinyrainbow: 1.2.0 - vitest: 2.1.5(@types/node@20.17.6)(@vitest/browser@2.1.5)(happy-dom@15.11.4)(msw@2.6.4(@types/node@20.17.6)(typescript@5.5.4)) + vitest: 2.1.5(@types/node@20.17.6)(@vitest/browser@2.1.5)(happy-dom@15.11.4)(msw@2.6.4(@types/node@20.17.6)(typescript@5.6.3)) ws: 8.18.0 transitivePeerDependencies: - '@types/node' @@ -16190,9 +16515,9 @@ snapshots: std-env: 3.8.0 test-exclude: 7.0.1 tinyrainbow: 1.2.0 - vitest: 2.1.5(@types/node@20.17.6)(@vitest/browser@2.1.5)(happy-dom@15.11.4)(msw@2.6.4(@types/node@20.17.6)(typescript@5.5.4)) + vitest: 2.1.5(@types/node@20.17.6)(@vitest/browser@2.1.5)(happy-dom@15.11.4)(msw@2.6.4(@types/node@20.17.6)(typescript@5.6.3)) optionalDependencies: - '@vitest/browser': 2.1.5(@types/node@20.17.6)(typescript@5.5.4)(vite@5.4.11(@types/node@20.17.6))(vitest@2.1.5) + '@vitest/browser': 2.1.5(@types/node@20.17.6)(typescript@5.6.3)(vite@5.4.14(@types/node@20.17.6))(vitest@2.1.5) transitivePeerDependencies: - supports-color @@ -16210,14 +16535,14 @@ snapshots: chai: 5.1.2 tinyrainbow: 1.2.0 - '@vitest/mocker@2.1.5(msw@2.6.4(@types/node@20.17.6)(typescript@5.5.4))(vite@5.4.11(@types/node@20.17.6))': + '@vitest/mocker@2.1.5(msw@2.6.4(@types/node@20.17.6)(typescript@5.6.3))(vite@5.4.14(@types/node@20.17.6))': dependencies: '@vitest/spy': 2.1.5 estree-walker: 3.0.3 - magic-string: 0.30.12 + magic-string: 0.30.17 optionalDependencies: - msw: 2.6.4(@types/node@20.17.6)(typescript@5.5.4) - vite: 5.4.11(@types/node@20.17.6) + msw: 2.6.4(@types/node@20.17.6)(typescript@5.6.3) + vite: 5.4.14(@types/node@20.17.6) '@vitest/pretty-format@2.0.5': dependencies: @@ -16235,7 +16560,7 @@ snapshots: '@vitest/snapshot@2.1.5': dependencies: '@vitest/pretty-format': 2.1.5 - magic-string: 0.30.12 + magic-string: 0.30.17 pathe: 1.1.2 '@vitest/spy@2.0.5': @@ -16259,12 +16584,12 @@ snapshots: loupe: 3.1.2 tinyrainbow: 1.2.0 - '@volar/kit@2.4.10(typescript@5.5.4)': + '@volar/kit@2.4.10(typescript@5.6.3)': dependencies: '@volar/language-service': 2.4.10 '@volar/typescript': 2.4.10 typesafe-path: 0.2.2 - typescript: 5.5.4 + typescript: 5.6.3 vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.0.8 @@ -16309,6 +16634,74 @@ snapshots: '@vscode/l10n@0.0.18': {} + '@xhmikosr/archive-type@7.0.0': + dependencies: + file-type: 19.6.0 + + '@xhmikosr/bin-check@7.0.3': + dependencies: + execa: 5.1.1 + isexe: 2.0.0 + + '@xhmikosr/bin-wrapper@13.0.5': + dependencies: + '@xhmikosr/bin-check': 7.0.3 + '@xhmikosr/downloader': 15.0.1 + '@xhmikosr/os-filter-obj': 3.0.0 + bin-version-check: 5.1.0 + + '@xhmikosr/decompress-tar@8.0.1': + dependencies: + file-type: 19.6.0 + is-stream: 2.0.1 + tar-stream: 3.1.7 + + '@xhmikosr/decompress-tarbz2@8.0.2': + dependencies: + '@xhmikosr/decompress-tar': 8.0.1 + file-type: 19.6.0 + is-stream: 2.0.1 + seek-bzip: 2.0.0 + unbzip2-stream: 1.4.3 + + '@xhmikosr/decompress-targz@8.0.1': + dependencies: + '@xhmikosr/decompress-tar': 8.0.1 + file-type: 19.6.0 + is-stream: 2.0.1 + + '@xhmikosr/decompress-unzip@7.0.0': + dependencies: + file-type: 19.6.0 + get-stream: 6.0.1 + yauzl: 3.2.0 + + '@xhmikosr/decompress@10.0.1': + dependencies: + '@xhmikosr/decompress-tar': 8.0.1 + '@xhmikosr/decompress-tarbz2': 8.0.2 + '@xhmikosr/decompress-targz': 8.0.1 + '@xhmikosr/decompress-unzip': 7.0.0 + graceful-fs: 4.2.11 + make-dir: 4.0.0 + strip-dirs: 3.0.0 + + '@xhmikosr/downloader@15.0.1': + dependencies: + '@xhmikosr/archive-type': 7.0.0 + '@xhmikosr/decompress': 10.0.1 + content-disposition: 0.5.4 + defaults: 3.0.0 + ext-name: 5.0.0 + file-type: 19.6.0 + filenamify: 6.0.0 + get-stream: 6.0.1 + got: 13.0.0 + + '@xhmikosr/os-filter-obj@3.0.0': + dependencies: + arch: 3.0.0 + '@zxcvbn-ts/core@3.0.4': dependencies: fastest-levenshtein: 1.0.16 @@ -16433,6 +16826,8 @@ snapshots: arch@2.2.0: {} + arch@3.0.0: {} + are-docs-informative@0.0.2: {} are-we-there-yet@3.0.1: @@ -16543,12 +16938,12 @@ snapshots: astring@1.9.0: {} - astro-eslint-parser@1.1.0(typescript@5.5.4): + astro-eslint-parser@1.1.0(typescript@5.6.3): dependencies: '@astrojs/compiler': 2.10.3 - '@typescript-eslint/scope-manager': 8.14.0 - '@typescript-eslint/types': 8.14.0 - '@typescript-eslint/typescript-estree': 8.14.0(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.6.3) astrojs-compiler-sync: 1.0.1(@astrojs/compiler@2.10.3) debug: 4.3.7(supports-color@8.1.1) entities: 4.5.0 @@ -16562,23 +16957,19 @@ snapshots: - supports-color - typescript - astro-expressive-code@0.35.6(astro@4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4)): + astro-expressive-code@0.40.1(astro@5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0)): dependencies: - astro: 4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4) - rehype-expressive-code: 0.35.6 + astro: 5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0) + rehype-expressive-code: 0.40.1 - astro@4.16.12(@types/node@20.17.6)(rollup@4.26.0)(typescript@5.5.4): + astro@5.1.8(@types/node@20.17.6)(jiti@2.4.2)(rollup@4.31.0)(tsx@4.8.2)(typescript@5.6.3)(yaml@2.7.0): dependencies: '@astrojs/compiler': 2.10.3 - '@astrojs/internal-helpers': 0.4.1 - '@astrojs/markdown-remark': 5.3.0 - '@astrojs/telemetry': 3.1.0 - '@babel/core': 7.26.0 - '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/types': 7.26.0 + '@astrojs/internal-helpers': 0.4.2 + '@astrojs/markdown-remark': 6.0.2 + '@astrojs/telemetry': 3.2.0 '@oslojs/encoding': 1.1.0 - '@rollup/pluginutils': 5.1.3(rollup@4.26.0) - '@types/babel__core': 7.20.5 + '@rollup/pluginutils': 5.1.4(rollup@4.31.0) '@types/cookie': 0.6.0 acorn: 8.14.0 aria-query: 5.3.2 @@ -16589,52 +16980,71 @@ snapshots: common-ancestor-path: 1.0.1 cookie: 0.7.2 cssesc: 3.0.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0 deterministic-object-hash: 2.0.2 devalue: 5.1.1 diff: 5.2.0 dlv: 1.1.3 dset: 3.1.4 - es-module-lexer: 1.5.4 - esbuild: 0.21.5 + es-module-lexer: 1.6.0 + esbuild: 0.24.2 estree-walker: 3.0.3 - fast-glob: 3.3.2 + fast-glob: 3.3.3 flattie: 1.1.1 github-slugger: 2.0.0 - gray-matter: 4.0.3 html-escaper: 3.0.3 http-cache-semantics: 4.1.1 js-yaml: 4.1.0 kleur: 4.1.5 - magic-string: 0.30.12 + magic-string: 0.30.17 magicast: 0.3.5 micromatch: 4.0.8 mrmime: 2.0.0 neotraverse: 0.6.18 - ora: 8.1.1 - p-limit: 6.1.0 + p-limit: 6.2.0 p-queue: 8.0.1 preferred-pm: 4.0.0 prompts: 2.4.2 rehype: 13.0.2 semver: 7.6.3 - shiki: 1.22.2 - tinyexec: 0.3.1 - tsconfck: 3.1.4(typescript@5.5.4) + shiki: 1.29.1 + tinyexec: 0.3.2 + tsconfck: 3.1.4(typescript@5.6.3) + ultrahtml: 1.5.3 unist-util-visit: 5.0.0 + unstorage: 1.14.4 vfile: 6.0.3 - vite: 5.4.11(@types/node@20.17.6) - vitefu: 1.0.3(vite@5.4.11(@types/node@20.17.6)) + vite: 6.0.11(@types/node@20.17.6)(jiti@2.4.2)(tsx@4.8.2)(yaml@2.7.0) + vitefu: 1.0.5(vite@6.0.11(@types/node@20.17.6)(jiti@2.4.2)(tsx@4.8.2)(yaml@2.7.0)) which-pm: 3.0.0 - xxhash-wasm: 1.0.2 + xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 - zod: 3.23.8 - zod-to-json-schema: 3.23.5(zod@3.23.8) - zod-to-ts: 1.2.0(typescript@5.5.4)(zod@3.23.8) + yocto-spinner: 0.1.2 + zod: 3.24.1 + zod-to-json-schema: 3.24.1(zod@3.24.1) + zod-to-ts: 1.2.0(typescript@5.6.3)(zod@3.24.1) optionalDependencies: sharp: 0.33.5 transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - db0 + - idb-keyval + - ioredis + - jiti - less - lightningcss - rollup @@ -16644,7 +17054,10 @@ snapshots: - sugarss - supports-color - terser + - tsx - typescript + - uploadthing + - yaml astrojs-compiler-sync@1.0.1(@astrojs/compiler@2.10.3): dependencies: @@ -16663,14 +17076,14 @@ snapshots: auto-bind@4.0.0: {} - autoprefixer@10.4.20(postcss@8.4.49): + autoprefixer@10.4.20(postcss@8.5.1): dependencies: browserslist: 4.24.2 caniuse-lite: 1.0.30001680 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.4.49 + postcss: 8.5.1 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -16683,9 +17096,17 @@ snapshots: axe-core@4.10.2: {} - axios@1.7.7(debug@4.3.7): + axios@1.7.7: + dependencies: + follow-redirects: 1.15.9(debug@4.4.0) + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axios@1.7.9(debug@4.4.0): dependencies: - follow-redirects: 1.15.9(debug@4.3.7) + follow-redirects: 1.15.9(debug@4.4.0) form-data: 4.0.1 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -16693,10 +17114,15 @@ snapshots: axobject-query@4.1.0: {} + b4a@1.6.7: {} + bail@2.0.2: {} balanced-match@1.0.2: {} + bare-events@2.5.4: + optional: true + base-64@1.0.0: {} base64-arraybuffer@1.0.2: {} @@ -16721,11 +17147,6 @@ snapshots: dependencies: open: 8.4.2 - bin-check@4.1.0: - dependencies: - execa: 0.7.0 - executable: 4.1.1 - bin-version-check@5.1.0: dependencies: bin-version: 6.0.0 @@ -16781,7 +17202,7 @@ snapshots: chalk: 5.3.0 cli-boxes: 3.0.0 string-width: 7.2.0 - type-fest: 4.26.1 + type-fest: 4.30.2 widest-line: 5.0.0 wrap-ansi: 9.0.0 @@ -16807,7 +17228,7 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) - bson@6.9.0: {} + bson@6.10.1: {} buffer-crc32@0.2.13: {} @@ -16857,17 +17278,17 @@ snapshots: - bluebird optional: true - cacheable-lookup@5.0.4: {} + cacheable-lookup@7.0.0: {} - cacheable-request@7.0.4: + cacheable-request@10.2.14: dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 + '@types/http-cache-semantics': 4.0.4 + get-stream: 6.0.1 http-cache-semantics: 4.1.1 keyv: 4.5.4 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.1 + mimic-response: 4.0.0 + normalize-url: 8.0.1 + responselike: 3.0.0 cachedir@2.4.0: {} @@ -16962,12 +17383,6 @@ snapshots: dependencies: restore-cursor: 3.1.0 - cli-cursor@5.0.0: - dependencies: - restore-cursor: 5.1.0 - - cli-spinners@2.9.2: {} - cli-table3@0.6.5: dependencies: string-width: 4.2.3 @@ -16987,10 +17402,6 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone-response@1.0.3: - dependencies: - mimic-response: 1.0.1 - clsx@2.0.0: {} clsx@2.1.1: {} @@ -17098,7 +17509,7 @@ snapshots: readable-stream: 2.3.8 typedarray: 0.0.6 - concurrently@9.1.0: + concurrently@9.1.2: dependencies: chalk: 4.1.2 lodash: 4.17.21 @@ -17110,6 +17521,8 @@ snapshots: consola@2.15.3: {} + consola@3.4.0: {} + console-control-strings@1.1.0: optional: true @@ -17136,6 +17549,8 @@ snapshots: convert-source-map@2.0.0: {} + cookie-es@1.2.2: {} + cookie-signature@1.0.6: {} cookie@0.7.1: {} @@ -17153,36 +17568,40 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig-typescript-loader@5.1.0(@types/node@20.17.6)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4): + cosmiconfig-typescript-loader@6.1.0(@types/node@20.17.6)(cosmiconfig@9.0.0(typescript@5.6.3))(typescript@5.6.3): dependencies: '@types/node': 20.17.6 - cosmiconfig: 9.0.0(typescript@5.5.4) - jiti: 1.21.6 - typescript: 5.5.4 + cosmiconfig: 9.0.0(typescript@5.6.3) + jiti: 2.4.2 + typescript: 5.6.3 - cosmiconfig@9.0.0(typescript@5.5.4): + cosmiconfig@9.0.0(typescript@5.6.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 crc-32@1.2.2: {} - cross-spawn@5.1.0: + cross-spawn@7.0.5: dependencies: - lru-cache: 4.1.5 - shebang-command: 1.2.0 - which: 1.3.1 + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 - cross-spawn@7.0.5: + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + crossws@0.3.2: + dependencies: + uncrypto: 0.1.3 + css-line-break@2.1.0: dependencies: utrie: 1.0.2 @@ -17331,6 +17750,10 @@ snapshots: optionalDependencies: supports-color: 8.1.1 + debug@4.4.0: + dependencies: + ms: 2.1.3 + decimal.js-light@2.5.1: {} decode-named-character-reference@1.0.2: @@ -17347,6 +17770,8 @@ snapshots: deep-is@0.1.4: {} + defaults@3.0.0: {} + defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -17363,6 +17788,8 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + defu@6.1.4: {} + delayed-stream@1.0.0: {} delegates@1.0.0: @@ -17374,6 +17801,8 @@ snapshots: dequal@2.0.3: {} + destr@2.0.3: {} + destroy@1.2.0: {} detect-indent@5.0.0: {} @@ -17438,6 +17867,8 @@ snapshots: dotenv@16.4.5: {} + dotenv@16.4.7: {} + dset@3.1.4: {} duplexer@0.1.2: {} @@ -17462,6 +17893,8 @@ snapshots: '@emmetio/abbreviation': 2.3.3 '@emmetio/css-abbreviation': 2.1.8 + emoji-regex-xs@1.0.0: {} + emoji-regex@10.4.0: {} emoji-regex@8.0.0: {} @@ -17575,7 +18008,7 @@ snapshots: iterator.prototype: 1.1.3 safe-array-concat: 1.1.2 - es-module-lexer@1.5.4: {} + es-module-lexer@1.6.0: {} es-object-atoms@1.0.0: dependencies: @@ -17611,15 +18044,15 @@ snapshots: esast-util-from-estree: 2.0.0 vfile-message: 4.0.2 - esbuild-plugin-tsc@0.4.0(typescript@5.5.4): + esbuild-plugin-tsc@0.4.0(typescript@5.6.3): dependencies: strip-comments: 2.0.1 - typescript: 5.5.4 + typescript: 5.6.3 - esbuild-register@3.6.0(esbuild@0.24.0): + esbuild-register@3.6.0(esbuild@0.24.2): dependencies: debug: 4.3.7(supports-color@8.1.1) - esbuild: 0.24.0 + esbuild: 0.24.2 transitivePeerDependencies: - supports-color @@ -17704,32 +18137,33 @@ snapshots: '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 - esbuild@0.24.0: + esbuild@0.24.2: optionalDependencies: - '@esbuild/aix-ppc64': 0.24.0 - '@esbuild/android-arm': 0.24.0 - '@esbuild/android-arm64': 0.24.0 - '@esbuild/android-x64': 0.24.0 - '@esbuild/darwin-arm64': 0.24.0 - '@esbuild/darwin-x64': 0.24.0 - '@esbuild/freebsd-arm64': 0.24.0 - '@esbuild/freebsd-x64': 0.24.0 - '@esbuild/linux-arm': 0.24.0 - '@esbuild/linux-arm64': 0.24.0 - '@esbuild/linux-ia32': 0.24.0 - '@esbuild/linux-loong64': 0.24.0 - '@esbuild/linux-mips64el': 0.24.0 - '@esbuild/linux-ppc64': 0.24.0 - '@esbuild/linux-riscv64': 0.24.0 - '@esbuild/linux-s390x': 0.24.0 - '@esbuild/linux-x64': 0.24.0 - '@esbuild/netbsd-x64': 0.24.0 - '@esbuild/openbsd-arm64': 0.24.0 - '@esbuild/openbsd-x64': 0.24.0 - '@esbuild/sunos-x64': 0.24.0 - '@esbuild/win32-arm64': 0.24.0 - '@esbuild/win32-ia32': 0.24.0 - '@esbuild/win32-x64': 0.24.0 + '@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 escalade@3.2.0: {} @@ -17741,45 +18175,45 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.14.0(jiti@1.21.6)): + eslint-compat-utils@0.5.1(eslint@9.18.0(jiti@2.4.2)): dependencies: - eslint: 9.14.0(jiti@1.21.6) + eslint: 9.18.0(jiti@2.4.2) semver: 7.6.3 - eslint-compat-utils@0.6.0(eslint@9.14.0(jiti@1.21.6)): + eslint-compat-utils@0.6.0(eslint@9.18.0(jiti@2.4.2)): dependencies: - eslint: 9.14.0(jiti@1.21.6) + eslint: 9.18.0(jiti@2.4.2) semver: 7.6.3 - eslint-json-compat-utils@0.2.1(eslint@9.14.0(jiti@1.21.6))(jsonc-eslint-parser@2.4.0): + eslint-json-compat-utils@0.2.1(eslint@9.18.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0): dependencies: - eslint: 9.14.0(jiti@1.21.6) + eslint: 9.18.0(jiti@2.4.2) esquery: 1.6.0 jsonc-eslint-parser: 2.4.0 - eslint-plugin-astro@1.3.1(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4): + eslint-plugin-astro@1.3.1(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@1.21.6)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@2.4.2)) '@jridgewell/sourcemap-codec': 1.5.0 - '@typescript-eslint/types': 8.14.0 - astro-eslint-parser: 1.1.0(typescript@5.5.4) - eslint: 9.14.0(jiti@1.21.6) - eslint-compat-utils: 0.6.0(eslint@9.14.0(jiti@1.21.6)) - globals: 15.12.0 - postcss: 8.4.49 + '@typescript-eslint/types': 8.18.0 + astro-eslint-parser: 1.1.0(typescript@5.6.3) + eslint: 9.18.0(jiti@2.4.2) + eslint-compat-utils: 0.6.0(eslint@9.18.0(jiti@2.4.2)) + globals: 15.13.0 + postcss: 8.5.1 postcss-selector-parser: 7.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-jsdoc@50.5.0(eslint@9.14.0(jiti@1.21.6)): + eslint-plugin-jsdoc@50.6.1(eslint@9.18.0(jiti@2.4.2)): dependencies: '@es-joy/jsdoccomment': 0.49.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.3.7(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 9.14.0(jiti@1.21.6) + eslint: 9.18.0(jiti@2.4.2) espree: 10.3.0 esquery: 1.6.0 parse-imports: 2.2.1 @@ -17789,12 +18223,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.18.1(eslint@9.14.0(jiti@1.21.6)): + eslint-plugin-jsonc@2.18.2(eslint@9.18.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@1.21.6)) - eslint: 9.14.0(jiti@1.21.6) - eslint-compat-utils: 0.6.0(eslint@9.14.0(jiti@1.21.6)) - eslint-json-compat-utils: 0.2.1(eslint@9.14.0(jiti@1.21.6))(jsonc-eslint-parser@2.4.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@2.4.2)) + eslint: 9.18.0(jiti@2.4.2) + eslint-compat-utils: 0.6.0(eslint@9.18.0(jiti@2.4.2)) + eslint-json-compat-utils: 0.2.1(eslint@9.18.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0) espree: 9.6.1 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 @@ -17803,7 +18237,7 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-jsx-a11y@6.10.2(eslint@9.14.0(jiti@1.21.6)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.18.0(jiti@2.4.2)): dependencies: aria-query: 5.3.2 array-includes: 3.1.8 @@ -17813,7 +18247,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.14.0(jiti@1.21.6) + eslint: 9.18.0(jiti@2.4.2) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -17822,20 +18256,20 @@ snapshots: safe-regex-test: 1.0.3 string.prototype.includes: 2.0.1 - eslint-plugin-perfectionist@3.9.1(astro-eslint-parser@1.1.0(typescript@5.5.4))(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4): + eslint-plugin-perfectionist@3.9.1(astro-eslint-parser@1.1.0(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3): dependencies: - '@typescript-eslint/types': 8.14.0 - '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4) - eslint: 9.14.0(jiti@1.21.6) + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/utils': 8.18.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + eslint: 9.18.0(jiti@2.4.2) minimatch: 9.0.5 natural-compare-lite: 1.4.0 optionalDependencies: - astro-eslint-parser: 1.1.0(typescript@5.5.4) + astro-eslint-parser: 1.1.0(typescript@5.6.3) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-react@7.37.2(eslint@9.14.0(jiti@1.21.6)): + eslint-plugin-react@7.37.2(eslint@9.18.0(jiti@2.4.2)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -17843,7 +18277,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.0 - eslint: 9.14.0(jiti@1.21.6) + eslint: 9.18.0(jiti@2.4.2) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -17857,17 +18291,17 @@ snapshots: string.prototype.matchall: 4.0.11 string.prototype.repeat: 1.0.0 - eslint-plugin-svelte@2.46.0(eslint@9.14.0(jiti@1.21.6)): + eslint-plugin-svelte@2.46.1(eslint@9.18.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@1.21.6)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@2.4.2)) '@jridgewell/sourcemap-codec': 1.5.0 - eslint: 9.14.0(jiti@1.21.6) - eslint-compat-utils: 0.5.1(eslint@9.14.0(jiti@1.21.6)) + eslint: 9.18.0(jiti@2.4.2) + eslint-compat-utils: 0.5.1(eslint@9.18.0(jiti@2.4.2)) esutils: 2.0.3 known-css-properties: 0.35.0 - postcss: 8.4.49 - postcss-load-config: 3.1.4(postcss@8.4.49) - postcss-safe-parser: 6.0.0(postcss@8.4.49) + postcss: 8.5.1 + postcss-load-config: 3.1.4(postcss@8.5.1) + postcss-safe-parser: 6.0.0(postcss@8.5.1) postcss-selector-parser: 6.1.2 semver: 7.6.3 svelte-eslint-parser: 0.43.0 @@ -17888,15 +18322,15 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.14.0(jiti@1.21.6): + eslint@9.18.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0(jiti@1.21.6)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.18.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.18.0 - '@eslint/core': 0.7.0 - '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.14.0 - '@eslint/plugin-kit': 0.2.2 + '@eslint/config-array': 0.19.1 + '@eslint/core': 0.10.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.18.0 + '@eslint/plugin-kit': 0.2.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.1 @@ -17904,7 +18338,7 @@ snapshots: '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.5 + cross-spawn: 7.0.6 debug: 4.3.7(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint-scope: 8.2.0 @@ -17924,9 +18358,8 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - text-table: 0.2.0 optionalDependencies: - jiti: 1.21.6 + jiti: 2.4.2 transitivePeerDependencies: - supports-color @@ -18013,16 +18446,6 @@ snapshots: events@3.3.0: {} - execa@0.7.0: - dependencies: - cross-spawn: 5.1.0 - get-stream: 3.0.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - execa@4.1.0: dependencies: cross-spawn: 7.0.5 @@ -18057,7 +18480,43 @@ snapshots: expect-type@1.1.0: {} - express@4.21.1: + express@4.21.1: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.10 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + express@4.21.2: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 @@ -18078,7 +18537,7 @@ snapshots: methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.10 + path-to-regexp: 0.1.12 proxy-addr: 2.0.7 qs: 6.13.0 range-parser: 1.2.1 @@ -18093,12 +18552,12 @@ snapshots: transitivePeerDependencies: - supports-color - expressive-code@0.35.6: + expressive-code@0.40.1: dependencies: - '@expressive-code/core': 0.35.6 - '@expressive-code/plugin-frames': 0.35.6 - '@expressive-code/plugin-shiki': 0.35.6 - '@expressive-code/plugin-text-markers': 0.35.6 + '@expressive-code/core': 0.40.1 + '@expressive-code/plugin-frames': 0.40.1 + '@expressive-code/plugin-shiki': 0.40.1 + '@expressive-code/plugin-text-markers': 0.40.1 ext-list@2.2.2: dependencies: @@ -18109,10 +18568,6 @@ snapshots: ext-list: 2.2.2 sort-keys-length: 1.0.1 - extend-shallow@2.0.1: - dependencies: - is-extendable: 0.1.1 - extend@3.0.2: {} extract-zip@2.0.1(supports-color@8.1.1): @@ -18133,6 +18588,8 @@ snapshots: fast-equals@5.0.1: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -18141,6 +18598,14 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} @@ -18173,21 +18638,20 @@ snapshots: dependencies: tslib: 2.8.1 - file-type@17.1.6: + file-type@19.6.0: dependencies: - readable-web-to-node-stream: 3.0.2 - strtok3: 7.1.1 - token-types: 5.0.1 + get-stream: 9.0.1 + strtok3: 9.1.1 + token-types: 6.0.0 + uint8array-extras: 1.4.0 file-uri-to-path@1.0.0: {} filename-reserved-regex@3.0.0: {} - filenamify@5.1.1: + filenamify@6.0.0: dependencies: filename-reserved-regex: 3.0.0 - strip-outer: 2.0.0 - trim-repeated: 2.0.0 fill-range@7.1.1: dependencies: @@ -18241,9 +18705,9 @@ snapshots: flattie@1.1.1: {} - follow-redirects@1.15.9(debug@4.3.7): + follow-redirects@1.15.9(debug@4.4.0): optionalDependencies: - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0 for-each@0.3.3: dependencies: @@ -18256,6 +18720,8 @@ snapshots: forever-agent@0.6.1: {} + form-data-encoder@2.1.4: {} + form-data@4.0.1: dependencies: asynckit: 0.4.0 @@ -18274,15 +18740,19 @@ snapshots: fraction.js@4.3.7: {} - framer-motion@11.11.15(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + framer-motion@11.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: + motion-dom: 11.14.3 + motion-utils: 11.14.3 tslib: 2.8.1 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - framer-motion@11.11.15(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x): + framer-motion@11.15.0(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x): dependencies: + motion-dom: 11.14.3 + motion-utils: 11.14.3 tslib: 2.8.1 optionalDependencies: react: link:vendor/react@18.x @@ -18367,14 +18837,17 @@ snapshots: get-nonce@1.0.1: {} - get-stream@3.0.0: {} - get-stream@5.2.0: dependencies: pump: 3.0.2 get-stream@6.0.1: {} + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 @@ -18423,11 +18896,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-promise@4.2.2(glob@7.2.3): - dependencies: - '@types/glob': 7.2.0 - glob: 7.2.3 - glob@10.4.5: dependencies: foreground-child: 3.3.0 @@ -18446,6 +18914,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 2.0.0 + glob@11.0.1: + dependencies: + foreground-child: 3.3.0 + jackspeak: 4.0.2 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -18467,7 +18944,7 @@ snapshots: globals@14.0.0: {} - globals@15.12.0: {} + globals@15.13.0: {} globalthis@1.0.4: dependencies: @@ -18498,19 +18975,19 @@ snapshots: dependencies: get-intrinsic: 1.2.4 - got@11.8.6: + got@13.0.0: dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 - cacheable-lookup: 5.0.4 - cacheable-request: 7.0.4 + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 decompress-response: 6.0.0 - http2-wrapper: 1.0.3 - lowercase-keys: 2.0.0 - p-cancelable: 2.1.1 - responselike: 2.0.1 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 graceful-fs@4.2.11: {} @@ -18518,12 +18995,18 @@ snapshots: graphql@16.9.0: {} - gray-matter@4.0.3: + h3@1.14.0: dependencies: - js-yaml: 3.14.1 - kind-of: 6.0.3 - section-matter: 1.0.0 - strip-bom-string: 1.0.0 + cookie-es: 1.2.2 + crossws: 0.3.2 + defu: 6.1.4 + destr: 2.0.3 + iron-webcrypto: 1.2.1 + ohash: 1.1.4 + radix3: 1.1.2 + ufo: 1.5.4 + uncrypto: 0.1.3 + unenv: 1.10.0 happy-dom@15.11.4: dependencies: @@ -18692,6 +19175,20 @@ snapshots: stringify-entities: 4.0.4 zwitch: 2.0.4 + hast-util-to-html@9.0.4: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + hast-util-to-jsx-runtime@2.3.2: dependencies: '@types/estree': 1.0.6 @@ -18799,7 +19296,7 @@ snapshots: http-status-codes@2.3.0: {} - http2-wrapper@1.0.3: + http2-wrapper@2.2.1: dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 @@ -18821,7 +19318,11 @@ snapshots: ms: 2.1.3 optional: true - husky@9.1.6: {} + husky@9.1.7: {} + + i18next@23.16.8: + dependencies: + '@babel/runtime': 7.26.0 iconv-lite@0.4.24: dependencies: @@ -18875,6 +19376,10 @@ snapshots: inline-style-parser@0.2.4: {} + inspect-with-kind@1.0.5: + dependencies: + kind-of: 6.0.3 + internal-slot@1.0.7: dependencies: es-errors: 1.3.0 @@ -18895,6 +19400,8 @@ snapshots: ipaddr.js@1.9.1: {} + iron-webcrypto@1.2.1: {} + is-alphabetical@2.0.1: {} is-alphanumerical@2.0.1: @@ -18953,8 +19460,6 @@ snapshots: is-docker@3.0.0: {} - is-extendable@0.1.1: {} - is-extglob@2.1.1: {} is-finalizationregistry@1.0.2: @@ -18982,8 +19487,6 @@ snapshots: global-dirs: 3.0.1 is-path-inside: 3.0.3 - is-interactive@2.0.0: {} - is-lambda@1.0.1: optional: true @@ -19020,10 +19523,10 @@ snapshots: dependencies: call-bind: 1.0.7 - is-stream@1.1.0: {} - is-stream@2.0.1: {} + is-stream@4.0.1: {} + is-string@1.0.7: dependencies: has-tostringtag: 1.0.2 @@ -19044,10 +19547,6 @@ snapshots: is-unicode-supported@0.1.0: {} - is-unicode-supported@1.3.0: {} - - is-unicode-supported@2.1.0: {} - is-weakmap@2.0.2: {} is-weakref@1.0.2: @@ -19118,6 +19617,8 @@ snapshots: jiti@1.21.6: {} + jiti@2.4.2: {} + jju@1.4.0: {} joi@17.13.3: @@ -19290,6 +19791,8 @@ snapshots: lilconfig@3.1.2: {} + lilconfig@3.1.3: {} + lines-and-columns@1.2.4: {} linkify-it@5.0.0: @@ -19371,11 +19874,6 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 - log-symbols@6.0.0: - dependencies: - chalk: 5.3.0 - is-unicode-supported: 1.3.0 - log-update@4.0.0: dependencies: ansi-escapes: 4.3.2 @@ -19391,17 +19889,12 @@ snapshots: loupe@3.1.2: {} - lowercase-keys@2.0.0: {} + lowercase-keys@3.0.0: {} lru-cache@10.4.3: {} lru-cache@11.0.2: {} - lru-cache@4.1.5: - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -19410,10 +19903,6 @@ snapshots: dependencies: yallist: 4.0.0 - lucide-react@0.439.0(react@vendor+react@18.x): - dependencies: - react: link:vendor/react@18.x - lucide-react@0.451.0(react@18.3.1): dependencies: react: 18.3.1 @@ -19422,6 +19911,10 @@ snapshots: dependencies: react: link:vendor/react@18.x + lucide-react@0.473.0(react@vendor+react@18.x): + dependencies: + react: link:vendor/react@18.x + lunr@2.3.9: {} lz-string@1.5.0: {} @@ -19434,6 +19927,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + magicast@0.3.5: dependencies: '@babel/parser': 7.26.2 @@ -19979,14 +20476,14 @@ snapshots: mime@2.6.0: {} - mimic-fn@2.1.0: {} - - mimic-function@5.0.1: {} + mime@3.0.0: {} - mimic-response@1.0.1: {} + mimic-fn@2.1.0: {} mimic-response@3.1.0: {} + mimic-response@4.0.0: {} + min-indent@1.0.1: {} minimatch@10.0.1: @@ -20057,28 +20554,48 @@ snapshots: mkdirp@1.0.4: {} - monaco-editor@0.51.0: {} + monaco-editor@0.52.2: {} mongodb-connection-string-url@3.0.1: dependencies: '@types/whatwg-url': 11.0.5 whatwg-url: 13.0.0 - mongodb@6.10.0(socks@2.8.3): + mongodb@6.12.0(socks@2.8.3): dependencies: '@mongodb-js/saslprep': 1.1.9 - bson: 6.9.0 + bson: 6.10.1 mongodb-connection-string-url: 3.0.1 optionalDependencies: socks: 2.8.3 + motion-dom@11.14.3: {} + + motion-utils@11.14.3: {} + + motion@11.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + framer-motion: 11.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tslib: 2.8.1 + optionalDependencies: + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + motion@11.15.0(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x): + dependencies: + framer-motion: 11.15.0(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + tslib: 2.8.1 + optionalDependencies: + react: link:vendor/react@18.x + react-dom: link:vendor/react-dom@18.x + mrmime@2.0.0: {} ms@2.0.0: {} ms@2.1.3: {} - msw@2.6.4(@types/node@20.17.6)(typescript@5.5.4): + msw@2.6.4(@types/node@20.17.6)(typescript@5.6.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 @@ -20099,7 +20616,7 @@ snapshots: type-fest: 4.26.1 yargs: 17.7.2 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 transitivePeerDependencies: - '@types/node' @@ -20123,7 +20640,7 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.7: {} + nanoid@3.3.8: {} napi-build-utils@1.0.2: {} @@ -20147,6 +20664,8 @@ snapshots: node-addon-api@7.1.1: {} + node-fetch-native@1.6.6: {} + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 @@ -20194,14 +20713,10 @@ snapshots: normalize-range@0.1.2: {} - normalize-url@6.1.0: {} + normalize-url@8.0.1: {} normalize.css@8.0.1: {} - npm-run-path@2.0.2: - dependencies: - path-key: 2.0.1 - npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -20252,6 +20767,14 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 + ofetch@1.4.1: + dependencies: + destr: 2.0.3 + node-fetch-native: 1.6.6 + ufo: 1.5.4 + + ohash@1.1.4: {} + on-exit-leak-free@2.1.2: {} on-finished@2.4.1: @@ -20268,13 +20791,11 @@ snapshots: dependencies: mimic-fn: 2.1.0 - onetime@7.0.0: - dependencies: - mimic-function: 5.0.1 - - oniguruma-to-js@0.4.3: + oniguruma-to-es@2.3.0: dependencies: - regex: 4.4.0 + emoji-regex-xs: 1.0.0 + regex: 5.1.1 + regex-recursion: 5.1.1 open@8.4.2: dependencies: @@ -20291,22 +20812,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - ora@8.1.1: - dependencies: - chalk: 5.3.0 - cli-cursor: 5.0.0 - cli-spinners: 2.9.2 - is-interactive: 2.0.0 - is-unicode-supported: 2.1.0 - log-symbols: 6.0.0 - stdin-discarder: 0.2.2 - string-width: 7.2.0 - strip-ansi: 7.1.0 - - os-filter-obj@2.0.0: - dependencies: - arch: 2.2.0 - ospath@1.2.2: {} outvariant@1.4.3: {} @@ -20325,9 +20830,7 @@ snapshots: '@oxc-resolver/binding-win32-arm64-msvc': 1.12.0 '@oxc-resolver/binding-win32-x64-msvc': 1.12.0 - p-cancelable@2.1.1: {} - - p-finally@1.0.0: {} + p-cancelable@3.0.0: {} p-limit@2.3.0: dependencies: @@ -20341,7 +20844,7 @@ snapshots: dependencies: yocto-queue: 1.1.1 - p-limit@6.1.0: + p-limit@6.2.0: dependencies: yocto-queue: 1.1.1 @@ -20372,13 +20875,13 @@ snapshots: package-json-from-dist@1.0.1: {} - pagefind@1.2.0: + pagefind@1.3.0: optionalDependencies: - '@pagefind/darwin-arm64': 1.2.0 - '@pagefind/darwin-x64': 1.2.0 - '@pagefind/linux-arm64': 1.2.0 - '@pagefind/linux-x64': 1.2.0 - '@pagefind/windows-x64': 1.2.0 + '@pagefind/darwin-arm64': 1.3.0 + '@pagefind/darwin-x64': 1.3.0 + '@pagefind/linux-arm64': 1.3.0 + '@pagefind/linux-x64': 1.3.0 + '@pagefind/windows-x64': 1.3.0 pako@1.0.11: {} @@ -20401,7 +20904,7 @@ snapshots: parse-imports@2.2.1: dependencies: - es-module-lexer: 1.5.4 + es-module-lexer: 1.6.0 slashes: 3.0.12 parse-json@5.2.0: @@ -20447,8 +20950,6 @@ snapshots: path-is-absolute@1.0.1: {} - path-key@2.0.1: {} - path-key@3.1.1: {} path-parse@1.0.7: {} @@ -20465,6 +20966,8 @@ snapshots: path-to-regexp@0.1.10: {} + path-to-regexp@0.1.12: {} + path-to-regexp@3.3.0: {} path-to-regexp@6.3.0: {} @@ -20501,7 +21004,7 @@ snapshots: dependencies: split2: 4.2.0 - pino-http@10.3.0: + pino-http@10.4.0: dependencies: get-caller-file: 2.0.5 pino: 9.5.0 @@ -20557,44 +21060,44 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-import@15.1.0(postcss@8.4.49): + postcss-import@15.1.0(postcss@8.5.1): dependencies: - postcss: 8.4.49 + postcss: 8.5.1 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.49): + postcss-js@4.0.1(postcss@8.5.1): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.49 + postcss: 8.5.1 - postcss-load-config@3.1.4(postcss@8.4.49): + postcss-load-config@3.1.4(postcss@8.5.1): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: - postcss: 8.4.49 + postcss: 8.5.1 - postcss-load-config@4.0.2(postcss@8.4.49): + postcss-load-config@4.0.2(postcss@8.5.1): dependencies: lilconfig: 3.1.2 yaml: 2.6.0 optionalDependencies: - postcss: 8.4.49 + postcss: 8.5.1 - postcss-nested@6.2.0(postcss@8.4.49): + postcss-nested@6.2.0(postcss@8.5.1): dependencies: - postcss: 8.4.49 + postcss: 8.5.1 postcss-selector-parser: 6.1.2 - postcss-safe-parser@6.0.0(postcss@8.4.49): + postcss-safe-parser@6.0.0(postcss@8.5.1): dependencies: - postcss: 8.4.49 + postcss: 8.5.1 - postcss-scss@4.0.9(postcss@8.4.49): + postcss-scss@4.0.9(postcss@8.5.1): dependencies: - postcss: 8.4.49 + postcss: 8.5.1 postcss-selector-parser@6.0.10: dependencies: @@ -20613,9 +21116,9 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.4.49: + postcss@8.5.1: dependencies: - nanoid: 3.3.7 + nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -20645,19 +21148,19 @@ snapshots: prettier-plugin-astro@0.14.1: dependencies: '@astrojs/compiler': 2.10.3 - prettier: 3.3.3 + prettier: 3.4.2 sass-formatter: 0.7.9 - prettier-plugin-tailwindcss@0.6.8(prettier-plugin-astro@0.14.1)(prettier@3.3.3): + prettier-plugin-tailwindcss@0.6.10(prettier-plugin-astro@0.14.1)(prettier@3.4.2): dependencies: - prettier: 3.3.3 + prettier: 3.4.2 optionalDependencies: prettier-plugin-astro: 0.14.1 prettier@2.8.7: optional: true - prettier@3.3.3: {} + prettier@3.4.2: {} pretty-bytes@5.6.0: {} @@ -20667,12 +21170,12 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 - prisma-json-types-generator@3.1.1(prisma@5.22.0)(typescript@5.5.4): + prisma-json-types-generator@3.2.2(prisma@5.22.0)(typescript@5.6.3): dependencies: - '@prisma/generator-helper': 5.20.0 + '@prisma/generator-helper': 6.0.0 prisma: 5.22.0 - tslib: 2.7.0 - typescript: 5.5.4 + tslib: 2.8.1 + typescript: 5.6.3 prisma@5.22.0: dependencies: @@ -20723,8 +21226,6 @@ snapshots: dependencies: event-stream: 3.3.4 - pseudomap@1.0.2: {} - psl@1.10.0: dependencies: punycode: 2.3.1 @@ -20750,10 +21251,14 @@ snapshots: queue-microtask@1.2.3: {} + queue-tick@1.0.1: {} + quick-format-unescaped@4.0.4: {} quick-lru@5.1.1: {} + radix3@1.1.2: {} + random-words@1.3.0: dependencies: seedrandom: 3.0.5 @@ -20778,9 +21283,9 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-docgen-typescript@2.2.2(typescript@5.5.4): + react-docgen-typescript@2.2.2(typescript@5.6.3): dependencies: - typescript: 5.5.4 + typescript: 5.6.3 react-docgen@7.1.0: dependencies: @@ -20977,10 +21482,6 @@ snapshots: process: 0.11.10 string_decoder: 1.3.0 - readable-web-to-node-stream@3.0.2: - dependencies: - readable-stream: 3.6.2 - readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -21029,6 +21530,19 @@ snapshots: tiny-invariant: 1.3.3 victory-vendor: 36.9.2 + recharts@2.15.0(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x): + dependencies: + clsx: 2.1.1 + eventemitter3: 4.0.7 + lodash: 4.17.21 + react: link:vendor/react@18.x + react-dom: link:vendor/react-dom@18.x + react-is: 18.3.1 + react-smooth: 4.0.1(react-dom@vendor+react-dom@18.x)(react@vendor+react@18.x) + recharts-scale: 0.4.5 + tiny-invariant: 1.3.3 + victory-vendor: 36.9.2 + recma-build-jsx@1.0.0: dependencies: '@types/estree': 1.0.6 @@ -21078,7 +21592,16 @@ snapshots: regenerator-runtime@0.14.1: {} - regex@4.4.0: {} + regex-recursion@5.1.1: + dependencies: + regex: 5.1.1 + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@5.1.1: + dependencies: + regex-utilities: 2.3.0 regexp.prototype.flags@1.5.3: dependencies: @@ -21087,9 +21610,9 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 - rehype-expressive-code@0.35.6: + rehype-expressive-code@0.40.1: dependencies: - expressive-code: 0.35.6 + expressive-code: 0.40.1 rehype-format@5.0.1: dependencies: @@ -21220,20 +21743,15 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - responselike@2.0.1: + responselike@3.0.0: dependencies: - lowercase-keys: 2.0.0 + lowercase-keys: 3.0.0 restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - restore-cursor@5.1.0: - dependencies: - onetime: 7.0.0 - signal-exit: 4.1.0 - retext-latin@4.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -21279,28 +21797,29 @@ snapshots: globby: 10.0.1 is-plain-object: 3.0.1 - rollup@4.26.0: + rollup@4.31.0: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.26.0 - '@rollup/rollup-android-arm64': 4.26.0 - '@rollup/rollup-darwin-arm64': 4.26.0 - '@rollup/rollup-darwin-x64': 4.26.0 - '@rollup/rollup-freebsd-arm64': 4.26.0 - '@rollup/rollup-freebsd-x64': 4.26.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.26.0 - '@rollup/rollup-linux-arm-musleabihf': 4.26.0 - '@rollup/rollup-linux-arm64-gnu': 4.26.0 - '@rollup/rollup-linux-arm64-musl': 4.26.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.26.0 - '@rollup/rollup-linux-riscv64-gnu': 4.26.0 - '@rollup/rollup-linux-s390x-gnu': 4.26.0 - '@rollup/rollup-linux-x64-gnu': 4.26.0 - '@rollup/rollup-linux-x64-musl': 4.26.0 - '@rollup/rollup-win32-arm64-msvc': 4.26.0 - '@rollup/rollup-win32-ia32-msvc': 4.26.0 - '@rollup/rollup-win32-x64-msvc': 4.26.0 + '@rollup/rollup-android-arm-eabi': 4.31.0 + '@rollup/rollup-android-arm64': 4.31.0 + '@rollup/rollup-darwin-arm64': 4.31.0 + '@rollup/rollup-darwin-x64': 4.31.0 + '@rollup/rollup-freebsd-arm64': 4.31.0 + '@rollup/rollup-freebsd-x64': 4.31.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.31.0 + '@rollup/rollup-linux-arm-musleabihf': 4.31.0 + '@rollup/rollup-linux-arm64-gnu': 4.31.0 + '@rollup/rollup-linux-arm64-musl': 4.31.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.31.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.31.0 + '@rollup/rollup-linux-riscv64-gnu': 4.31.0 + '@rollup/rollup-linux-s390x-gnu': 4.31.0 + '@rollup/rollup-linux-x64-gnu': 4.31.0 + '@rollup/rollup-linux-x64-musl': 4.31.0 + '@rollup/rollup-win32-arm64-msvc': 4.31.0 + '@rollup/rollup-win32-ia32-msvc': 4.31.0 + '@rollup/rollup-win32-x64-msvc': 4.31.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -21344,15 +21863,14 @@ snapshots: dependencies: loose-envify: 1.4.0 - section-matter@1.0.0: - dependencies: - extend-shallow: 2.0.1 - kind-of: 6.0.3 - secure-json-parse@2.7.0: {} seedrandom@3.0.5: {} + seek-bzip@2.0.0: + dependencies: + commander: 6.2.1 + semver-regex@4.0.5: {} semver-truncate@3.0.0: @@ -21389,6 +21907,10 @@ snapshots: dependencies: type-fest: 2.19.0 + serialize-error@12.0.0: + dependencies: + type-fest: 4.33.0 + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 @@ -21451,27 +21973,23 @@ snapshots: '@img/sharp-win32-ia32': 0.33.5 '@img/sharp-win32-x64': 0.33.5 - shebang-command@1.2.0: - dependencies: - shebang-regex: 1.0.0 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - shebang-regex@1.0.0: {} - shebang-regex@3.0.0: {} shell-quote@1.8.1: {} - shiki@1.22.2: + shiki@1.29.1: dependencies: - '@shikijs/core': 1.22.2 - '@shikijs/engine-javascript': 1.22.2 - '@shikijs/engine-oniguruma': 1.22.2 - '@shikijs/types': 1.22.2 - '@shikijs/vscode-textmate': 9.3.0 + '@shikijs/core': 1.29.1 + '@shikijs/engine-javascript': 1.29.1 + '@shikijs/engine-oniguruma': 1.29.1 + '@shikijs/langs': 1.29.1 + '@shikijs/themes': 1.29.1 + '@shikijs/types': 1.29.1 + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 side-channel@1.0.6: @@ -21654,16 +22172,16 @@ snapshots: dependencies: type-fest: 0.7.1 - start-server-and-test@2.0.8: + start-server-and-test@2.0.10: dependencies: arg: 5.0.2 bluebird: 3.7.2 check-more-types: 2.24.0 - debug: 4.3.7(supports-color@8.1.1) + debug: 4.4.0 execa: 5.1.1 lazy-ass: 1.6.0 ps-tree: 1.2.0 - wait-on: 8.0.1(debug@4.3.7) + wait-on: 8.0.2(debug@4.4.0) transitivePeerDependencies: - supports-color @@ -21673,13 +22191,11 @@ snapshots: std-env@3.8.0: {} - stdin-discarder@0.2.2: {} - - storybook@8.4.3(prettier@3.3.3): + storybook@8.5.0(prettier@3.4.2): dependencies: - '@storybook/core': 8.4.3(prettier@3.3.3) + '@storybook/core': 8.5.0(prettier@3.4.2) optionalDependencies: - prettier: 3.3.3 + prettier: 3.4.2 transitivePeerDependencies: - bufferutil - supports-color @@ -21693,6 +22209,14 @@ snapshots: streamsearch@1.1.0: {} + streamx@2.21.1: + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.5.4 + strict-event-emitter@0.5.1: {} string-argv@0.3.2: {} @@ -21781,13 +22305,14 @@ snapshots: dependencies: ansi-regex: 6.1.0 - strip-bom-string@1.0.0: {} - strip-bom@3.0.0: {} strip-comments@2.0.1: {} - strip-eof@1.0.0: {} + strip-dirs@3.0.0: + dependencies: + inspect-with-kind: 1.0.5 + is-plain-obj: 1.1.0 strip-final-newline@2.0.0: {} @@ -21803,9 +22328,7 @@ snapshots: strip-json-comments@3.1.1: {} - strip-outer@2.0.0: {} - - strtok3@7.1.1: + strtok3@9.1.1: dependencies: '@tokenizer/token': 0.3.0 peek-readable: 5.3.1 @@ -21872,8 +22395,8 @@ snapshots: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - postcss: 8.4.49 - postcss-scss: 4.0.9(postcss@8.4.49) + postcss: 8.5.1 + postcss-scss: 4.0.9(postcss@8.5.1) swagger-ui-dist@5.17.14: {} @@ -21888,10 +22411,16 @@ snapshots: tailwind-merge@2.5.4: {} + tailwind-merge@2.6.0: {} + tailwindcss-animate@1.0.7(tailwindcss@3.4.14): dependencies: tailwindcss: 3.4.14 + tailwindcss-animate@1.0.7(tailwindcss@3.4.17): + dependencies: + tailwindcss: 3.4.17 + tailwindcss@3.4.14: dependencies: '@alloc/quick-lru': 5.2.0 @@ -21908,11 +22437,38 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.4.49 - postcss-import: 15.1.0(postcss@8.4.49) - postcss-js: 4.0.1(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49) - postcss-nested: 6.2.0(postcss@8.4.49) + postcss: 8.5.1 + postcss-import: 15.1.0(postcss@8.5.1) + postcss-js: 4.0.1(postcss@8.5.1) + postcss-load-config: 4.0.2(postcss@8.5.1) + postcss-nested: 6.2.0(postcss@8.5.1) + postcss-selector-parser: 6.1.2 + resolve: 1.22.8 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + tailwindcss@3.4.17: + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.2 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.6 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.1 + postcss-import: 15.1.0(postcss@8.5.1) + postcss-js: 4.0.1(postcss@8.5.1) + postcss-load-config: 4.0.2(postcss@8.5.1) + postcss-nested: 6.2.0(postcss@8.5.1) postcss-selector-parser: 6.1.2 resolve: 1.22.8 sucrase: 3.35.0 @@ -21934,6 +22490,12 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.21.1 + tar@6.2.1: dependencies: chownr: 2.0.0 @@ -21949,14 +22511,16 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + text-extensions@2.4.0: {} text-segmentation@1.0.3: dependencies: utrie: 1.0.2 - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -21979,6 +22543,8 @@ snapshots: tinyexec@0.3.1: {} + tinyexec@0.3.2: {} + tinypool@1.0.1: {} tinyrainbow@1.2.0: {} @@ -21999,7 +22565,7 @@ snapshots: toidentifier@1.0.1: {} - token-types@5.0.1: + token-types@6.0.0: dependencies: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 @@ -22033,15 +22599,11 @@ snapshots: trim-lines@3.0.1: {} - trim-repeated@2.0.0: - dependencies: - escape-string-regexp: 5.0.0 - trough@2.2.0: {} - ts-api-utils@1.4.0(typescript@5.5.4): + ts-api-utils@1.4.0(typescript@5.6.3): dependencies: - typescript: 5.5.4 + typescript: 5.6.3 ts-dedent@2.2.0: {} @@ -22051,9 +22613,9 @@ snapshots: ts-pattern@5.5.0: {} - tsconfck@3.1.4(typescript@5.5.4): + tsconfck@3.1.4(typescript@5.6.3): optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.3 tsconfig-paths@4.2.0: dependencies: @@ -22078,32 +22640,32 @@ snapshots: tunnel@0.0.6: {} - turbo-darwin-64@2.2.3: + turbo-darwin-64@2.3.3: optional: true - turbo-darwin-arm64@2.2.3: + turbo-darwin-arm64@2.3.3: optional: true - turbo-linux-64@2.2.3: + turbo-linux-64@2.3.3: optional: true - turbo-linux-arm64@2.2.3: + turbo-linux-arm64@2.3.3: optional: true - turbo-windows-64@2.2.3: + turbo-windows-64@2.3.3: optional: true - turbo-windows-arm64@2.2.3: + turbo-windows-arm64@2.3.3: optional: true - turbo@2.2.3: + turbo@2.3.3: optionalDependencies: - turbo-darwin-64: 2.2.3 - turbo-darwin-arm64: 2.2.3 - turbo-linux-64: 2.2.3 - turbo-linux-arm64: 2.2.3 - turbo-windows-64: 2.2.3 - turbo-windows-arm64: 2.2.3 + turbo-darwin-64: 2.3.3 + turbo-darwin-arm64: 2.3.3 + turbo-linux-64: 2.3.3 + turbo-linux-arm64: 2.3.3 + turbo-windows-64: 2.3.3 + turbo-windows-arm64: 2.3.3 tweetnacl@0.14.5: {} @@ -22119,7 +22681,9 @@ snapshots: type-fest@4.26.1: {} - type-fest@4.28.0: {} + type-fest@4.30.2: {} + + type-fest@4.33.0: {} type-is@1.6.18: dependencies: @@ -22160,18 +22724,18 @@ snapshots: typedarray@0.0.6: {} - typedoc-plugin-markdown@4.2.10(typedoc@0.26.11(typescript@5.5.4)): + typedoc-plugin-markdown@4.4.1(typedoc@0.27.6(typescript@5.6.3)): dependencies: - typedoc: 0.26.11(typescript@5.5.4) + typedoc: 0.27.6(typescript@5.6.3) - typedoc@0.26.11(typescript@5.5.4): + typedoc@0.27.6(typescript@5.6.3): dependencies: + '@gerrit0/mini-shiki': 1.27.2 lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 - shiki: 1.22.2 - typescript: 5.5.4 - yaml: 2.6.0 + typescript: 5.6.3 + yaml: 2.7.0 typesafe-path@0.2.2: {} @@ -22179,27 +22743,32 @@ snapshots: dependencies: semver: 7.6.3 - typescript-eslint@8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4): + typescript-eslint@8.18.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.14.0(@typescript-eslint/parser@8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4) - '@typescript-eslint/parser': 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4) - '@typescript-eslint/utils': 8.14.0(eslint@9.14.0(jiti@1.21.6))(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 + '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3))(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/parser': 8.18.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + '@typescript-eslint/utils': 8.18.0(eslint@9.18.0(jiti@2.4.2))(typescript@5.6.3) + eslint: 9.18.0(jiti@2.4.2) + typescript: 5.6.3 transitivePeerDependencies: - - eslint - supports-color typescript@5.4.2: {} - typescript@5.5.4: {} + typescript@5.6.3: {} uc.micro@2.1.0: {} + ufo@1.5.4: {} + uid@2.0.2: dependencies: '@lukeed/csprng': 1.1.0 + uint8array-extras@1.4.0: {} + + ultrahtml@1.5.3: {} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.7 @@ -22207,6 +22776,13 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + + uncrypto@0.1.3: {} + undefsafe@2.0.5: {} undici-types@6.19.8: {} @@ -22215,6 +22791,14 @@ snapshots: dependencies: '@fastify/busboy': 2.1.1 + unenv@1.10.0: + dependencies: + consola: 3.4.0 + defu: 6.1.4 + mime: 3.0.0 + node-fetch-native: 1.6.6 + pathe: 1.1.2 + unicorn-magic@0.1.0: {} unified@11.0.5: @@ -22293,10 +22877,10 @@ snapshots: unpipe@1.0.0: {} - unplugin-swc@1.5.1(@swc/core@1.9.2(@swc/helpers@0.5.15))(rollup@4.26.0): + unplugin-swc@1.5.1(@swc/core@1.10.9(@swc/helpers@0.5.15))(rollup@4.31.0): dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.26.0) - '@swc/core': 1.9.2(@swc/helpers@0.5.15) + '@rollup/pluginutils': 5.1.3(rollup@4.31.0) + '@swc/core': 1.10.9(@swc/helpers@0.5.15) load-tsconfig: 0.2.5 unplugin: 1.15.0 transitivePeerDependencies: @@ -22308,6 +22892,22 @@ snapshots: acorn: 8.14.0 webpack-virtual-modules: 0.6.2 + unplugin@2.1.2: + dependencies: + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 + + unstorage@1.14.4: + dependencies: + anymatch: 3.1.3 + chokidar: 3.6.0 + destr: 2.0.3 + h3: 1.14.0 + lru-cache: 10.4.3 + node-fetch-native: 1.6.6 + ofetch: 1.4.1 + ufo: 1.5.4 + untildify@4.0.0: {} update-browserslist-db@1.1.1(browserslist@4.24.2): @@ -22445,9 +23045,9 @@ snapshots: dependencies: cac: 6.7.14 debug: 4.3.7(supports-color@8.1.1) - es-module-lexer: 1.5.4 + es-module-lexer: 1.6.0 pathe: 1.1.2 - vite: 5.4.11(@types/node@20.17.6) + vite: 5.4.14(@types/node@20.17.6) transitivePeerDependencies: - '@types/node' - less @@ -22459,32 +23059,44 @@ snapshots: - supports-color - terser - vite-plugin-compression@0.5.1(vite@5.4.11(@types/node@20.17.6)): + vite-plugin-compression@0.5.1(vite@5.4.14(@types/node@20.17.6)): dependencies: chalk: 4.1.2 debug: 4.3.7(supports-color@8.1.1) fs-extra: 10.1.0 - vite: 5.4.11(@types/node@20.17.6) + vite: 5.4.14(@types/node@20.17.6) transitivePeerDependencies: - supports-color - vite@5.4.11(@types/node@20.17.6): + vite@5.4.14(@types/node@20.17.6): dependencies: esbuild: 0.21.5 - postcss: 8.4.49 - rollup: 4.26.0 + postcss: 8.5.1 + rollup: 4.31.0 + optionalDependencies: + '@types/node': 20.17.6 + fsevents: 2.3.3 + + vite@6.0.11(@types/node@20.17.6)(jiti@2.4.2)(tsx@4.8.2)(yaml@2.7.0): + dependencies: + esbuild: 0.24.2 + postcss: 8.5.1 + rollup: 4.31.0 optionalDependencies: '@types/node': 20.17.6 fsevents: 2.3.3 + jiti: 2.4.2 + tsx: 4.8.2 + yaml: 2.7.0 - vitefu@1.0.3(vite@5.4.11(@types/node@20.17.6)): + vitefu@1.0.5(vite@6.0.11(@types/node@20.17.6)(jiti@2.4.2)(tsx@4.8.2)(yaml@2.7.0)): optionalDependencies: - vite: 5.4.11(@types/node@20.17.6) + vite: 6.0.11(@types/node@20.17.6)(jiti@2.4.2)(tsx@4.8.2)(yaml@2.7.0) - vitest@2.1.5(@types/node@20.17.6)(@vitest/browser@2.1.5)(happy-dom@15.11.4)(msw@2.6.4(@types/node@20.17.6)(typescript@5.5.4)): + vitest@2.1.5(@types/node@20.17.6)(@vitest/browser@2.1.5)(happy-dom@15.11.4)(msw@2.6.4(@types/node@20.17.6)(typescript@5.6.3)): dependencies: '@vitest/expect': 2.1.5 - '@vitest/mocker': 2.1.5(msw@2.6.4(@types/node@20.17.6)(typescript@5.5.4))(vite@5.4.11(@types/node@20.17.6)) + '@vitest/mocker': 2.1.5(msw@2.6.4(@types/node@20.17.6)(typescript@5.6.3))(vite@5.4.14(@types/node@20.17.6)) '@vitest/pretty-format': 2.1.5 '@vitest/runner': 2.1.5 '@vitest/snapshot': 2.1.5 @@ -22500,12 +23112,12 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.11(@types/node@20.17.6) + vite: 5.4.14(@types/node@20.17.6) vite-node: 2.1.5(@types/node@20.17.6) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.17.6 - '@vitest/browser': 2.1.5(@types/node@20.17.6)(typescript@5.5.4)(vite@5.4.11(@types/node@20.17.6))(vitest@2.1.5) + '@vitest/browser': 2.1.5(@types/node@20.17.6)(typescript@5.6.3)(vite@5.4.14(@types/node@20.17.6))(vitest@2.1.5) happy-dom: 15.11.4 transitivePeerDependencies: - less @@ -22543,12 +23155,12 @@ snapshots: optionalDependencies: '@volar/language-service': 2.4.10 - volar-service-prettier@0.0.62(@volar/language-service@2.4.10)(prettier@3.3.3): + volar-service-prettier@0.0.62(@volar/language-service@2.4.10)(prettier@3.4.2): dependencies: vscode-uri: 3.0.8 optionalDependencies: '@volar/language-service': 2.4.10 - prettier: 3.3.3 + prettier: 3.4.2 volar-service-typescript-twoslash-queries@0.0.62(@volar/language-service@2.4.10): dependencies: @@ -22628,9 +23240,9 @@ snapshots: vscode-uri@3.0.8: {} - wait-on@8.0.1(debug@4.3.7): + wait-on@8.0.2(debug@4.4.0): dependencies: - axios: 1.7.7(debug@4.3.7) + axios: 1.7.9(debug@4.4.0) joi: 17.13.3 lodash: 4.17.21 minimist: 1.2.8 @@ -22702,10 +23314,6 @@ snapshots: gopd: 1.0.1 has-tostringtag: 1.0.2 - which@1.3.1: - dependencies: - isexe: 2.0.0 - which@2.0.2: dependencies: isexe: 2.0.0 @@ -22770,12 +23378,10 @@ snapshots: xtend@4.0.2: {} - xxhash-wasm@1.0.2: {} + xxhash-wasm@1.1.0: {} y18n@5.0.8: {} - yallist@2.1.2: {} - yallist@3.1.1: {} yallist@4.0.0: {} @@ -22801,6 +23407,8 @@ snapshots: yaml@2.6.0: {} + yaml@2.7.0: {} + yargs-parser@21.1.1: {} yargs@17.7.2: @@ -22818,20 +23426,31 @@ snapshots: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 + yauzl@3.2.0: + dependencies: + buffer-crc32: 0.2.13 + pend: 1.2.0 + yocto-queue@0.1.0: {} yocto-queue@1.1.1: {} + yocto-spinner@0.1.2: + dependencies: + yoctocolors: 2.1.1 + yoctocolors-cjs@2.1.2: {} - zod-to-json-schema@3.23.5(zod@3.23.8): + yoctocolors@2.1.1: {} + + zod-to-json-schema@3.24.1(zod@3.24.1): dependencies: - zod: 3.23.8 + zod: 3.24.1 - zod-to-ts@1.2.0(typescript@5.5.4)(zod@3.23.8): + zod-to-ts@1.2.0(typescript@5.6.3)(zod@3.24.1): dependencies: - typescript: 5.5.4 - zod: 3.23.8 + typescript: 5.6.3 + zod: 3.24.1 zod-validation-error@3.4.0(zod@vendor+zod@3.23.x): dependencies: @@ -22839,6 +23458,8 @@ snapshots: zod@3.23.8: {} + zod@3.24.1: {} + zustand@4.5.5(@types/react@18.3.12)(immer@10.1.1)(react@18.3.1): dependencies: use-sync-external-store: 1.2.2(react@18.3.1) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index b3aac0190..53c8307b9 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,10 +5,10 @@ catalog: '@douglasneuroinformatics/eslint-config': latest '@douglasneuroinformatics/libcrypto': latest '@douglasneuroinformatics/libjs': latest - '@douglasneuroinformatics/libnest': latest + '@douglasneuroinformatics/libnest': ^0.5.1 '@douglasneuroinformatics/libpasswd': latest '@douglasneuroinformatics/libstats': latest - '@douglasneuroinformatics/libui': latest + '@douglasneuroinformatics/libui': ^3.8.6 '@douglasneuroinformatics/libui-form-types': latest '@douglasneuroinformatics/prettier-config': latest '@douglasneuroinformatics/tsconfig': latest @@ -25,6 +25,7 @@ catalog: nodemon: ^3.1.4 prisma: ^5.18.0 tsx: 4.8.2 + vite: ^5.4.12 packages: - apps/* - packages/* diff --git a/runtime/v1/env.d.ts b/runtime/v1/env.d.ts index 245846a92..60df361e7 100644 --- a/runtime/v1/env.d.ts +++ b/runtime/v1/env.d.ts @@ -28,6 +28,16 @@ declare module '*.webp' { export default src; } +declare module '*.mp4' { + const src: string; + export default src; +} + +declare module '*.json' { + const src: any; + export default src; +} + declare module 'react/jsx-runtime' { export * from '/runtime/v1/react@18.x/jsx-runtime'; } diff --git a/runtime/v1/package.json b/runtime/v1/package.json index 6b4e5edf1..0c60412f3 100644 --- a/runtime/v1/package.json +++ b/runtime/v1/package.json @@ -1,7 +1,7 @@ { "name": "@opendatacapture/runtime-v1", "type": "module", - "version": "1.6.1", + "version": "1.6.3", "author": { "name": "Douglas Neuroinformatics", "email": "support@douglasneuroinformatics.ca" diff --git a/testing/cypress/package.json b/testing/cypress/package.json index 858e03b18..0bcc6aeb0 100644 --- a/testing/cypress/package.json +++ b/testing/cypress/package.json @@ -15,7 +15,7 @@ "dependencies": { "@casl/ability": "catalog:", "@douglasneuroinformatics/libjs": "catalog:", - "@faker-js/faker": "^9.0.0", + "@faker-js/faker": "^9.4.0", "@opendatacapture/schemas": "workspace:", "cypress": "^13.14.2" }, diff --git a/testing/k6/package.json b/testing/k6/package.json index 86ef9a6b0..b9966f5a8 100644 --- a/testing/k6/package.json +++ b/testing/k6/package.json @@ -15,7 +15,7 @@ "lodash-es": "workspace:lodash-es__4.x@*" }, "devDependencies": { - "@types/k6": "~0.53.1", + "@types/k6": "~0.54.2", "esbuild": "catalog:" } }