diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 76791509d..ed1e4584e 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -36,4 +36,12 @@ module.exports = { }, ], }, + overrides: [ + { + files: ["**/*.test.ts"], + rules: { + "sonarjs/no-duplicate-string": "off", + }, + }, + ], }; diff --git a/.github/workflows/ci-pipeline.yml b/.github/workflows/ci-pipeline.yml index 50b783bde..968986add 100644 --- a/.github/workflows/ci-pipeline.yml +++ b/.github/workflows/ci-pipeline.yml @@ -74,13 +74,13 @@ jobs: - run: ./docker.sh --build prod - run: echo "PROD_IMAGE_TAG=$(./docker.sh --prodImageTag)" >> $GITHUB_ENV - name: Generate cosign vulnerability scan record for PROD image - uses: aquasecurity/trivy-action@84384bd6e777ef152729993b8145ea352e9dd3ef + uses: aquasecurity/trivy-action@062f2592684a31eb3aa050cc61e7ca1451cecd3d with: image-ref: ${{ env.REGISTRY }}/${{ github.repository }}:${{ env.PROD_IMAGE_TAG }} format: "cosign-vuln" output: "vulnerabilities.json" - name: Run Trivy vulnerability scanner - uses: aquasecurity/trivy-action@84384bd6e777ef152729993b8145ea352e9dd3ef + uses: aquasecurity/trivy-action@062f2592684a31eb3aa050cc61e7ca1451cecd3d with: image-ref: ${{ env.REGISTRY }}/${{ github.repository }}:${{ env.PROD_IMAGE_TAG }} format: "sarif" diff --git a/.github/workflows/scan.yml b/.github/workflows/scan.yml index 8d274e1dc..e77e4e1c2 100644 --- a/.github/workflows/scan.yml +++ b/.github/workflows/scan.yml @@ -16,14 +16,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Remove all caches and database of the trivy scanner - uses: aquasecurity/trivy-action@84384bd6e777ef152729993b8145ea352e9dd3ef + uses: aquasecurity/trivy-action@062f2592684a31eb3aa050cc61e7ca1451cecd3d env: TRIVY_RESET: true TRIVY_DEBUG: true with: scan-type: "image" - name: Download trivy vulnerabilities DB - uses: aquasecurity/trivy-action@84384bd6e777ef152729993b8145ea352e9dd3ef + uses: aquasecurity/trivy-action@062f2592684a31eb3aa050cc61e7ca1451cecd3d env: TRIVY_DEBUG: true TRIVY_DOWNLOAD_DB_ONLY: true @@ -42,7 +42,7 @@ jobs: - name: Run Trivy vulnerability scanner # Third-party action, pin to commit SHA! # See https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions - uses: aquasecurity/trivy-action@84384bd6e777ef152729993b8145ea352e9dd3ef + uses: aquasecurity/trivy-action@062f2592684a31eb3aa050cc61e7ca1451cecd3d env: TRIVY_USERNAME: ${{ github.actor }} TRIVY_PASSWORD: ${{ secrets.GITHUB_TOKEN }} @@ -67,7 +67,7 @@ jobs: - name: Generate cosign vulnerability scan record # Third-party action, pin to commit SHA! # See https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions - uses: aquasecurity/trivy-action@84384bd6e777ef152729993b8145ea352e9dd3ef + uses: aquasecurity/trivy-action@062f2592684a31eb3aa050cc61e7ca1451cecd3d env: TRIVY_USERNAME: ${{ github.actor }} TRIVY_PASSWORD: ${{ secrets.GITHUB_TOKEN }} diff --git a/app/components/MigrationDataOverview.tsx b/app/components/MigrationDataOverview.tsx index 0c7b9f25a..2846a3c42 100644 --- a/app/components/MigrationDataOverview.tsx +++ b/app/components/MigrationDataOverview.tsx @@ -10,7 +10,7 @@ type MigrationDataProps = { }; export default function MigrationDataOverview(props: MigrationDataProps) { - if (!props.migrationData || Object.keys(props.migrationData).length == 0) + if (!props.migrationData || Object.keys(props.migrationData).length === 0) return null; return ( @@ -18,13 +18,25 @@ export default function MigrationDataOverview(props: MigrationDataProps) { - `**${lookupOrKey(key, props.translations)}:**\n\n${lookupOrKey( - field as string, - props.translations, - )}\n\n`, - ) + .map(([key, value]) => { + const formattedKey = `**${lookupOrKey(key, props.translations)}:**\n\n`; + + if (typeof value === "object" && value !== null) { + const objectProperties = Object.entries(value) + .map( + ([subKey, subValue]) => + `${lookupOrKey( + subValue as string, + props.translations, + )}`, + ) + .join("\n\n"); + + return `${formattedKey}\n\n${objectProperties}\n\n`; + } else { + return `${formattedKey}${lookupOrKey(value as string, props.translations)}\n\n`; + } + }) .join(""), }} /> diff --git a/app/entry.server.tsx b/app/entry.server.tsx index fe7801cef..12c71d301 100644 --- a/app/entry.server.tsx +++ b/app/entry.server.tsx @@ -98,7 +98,7 @@ function handleBrowserRequest( const cspNonce = generateNonce(); responseHeaders.set( "Content-Security-Policy", - `default-src 'self'; script-src 'self' 'nonce-${cspNonce}' https://eu.posthog.com/static/recorder-v2.js; style-src 'self' 'unsafe-inline'; connect-src ${ + `default-src 'self'; script-src 'self' 'nonce-${cspNonce}' https://*.posthog.com; style-src 'self' 'unsafe-inline'; connect-src ${ configServer().TRUSTED_CSP_CONNECT_SOURCES }; img-src 'self' localhost:* ${configServer().TRUSTED_IMAGE_SOURCES}`, ); diff --git a/app/models/flows/contexts.ts b/app/models/flows/contexts.ts index 5db318fb3..738ee8cfe 100644 --- a/app/models/flows/contexts.ts +++ b/app/models/flows/contexts.ts @@ -11,7 +11,6 @@ export type ObjectType = Record< string, BasicTypes | Record> // TODO: check whether GeldEinklagenFormularContext should be triple nested >; -export type ArrayCollection = Record; export type Context = Record< string, BasicTypes | ObjectType | ObjectType[] | undefined diff --git a/app/models/flows/fluggastrechte/context.ts b/app/models/flows/fluggastrechte/context.ts index cc80a96e4..d3c66c55a 100644 --- a/app/models/flows/fluggastrechte/context.ts +++ b/app/models/flows/fluggastrechte/context.ts @@ -24,6 +24,14 @@ export const fluggastBereichSchema = z.enum( customRequiredErrorMessage, ); +export const zustaendigesAmtsgerichtSchema = z.array( + z.object({ + bezeichnung: z.string(), + strasseMitHausnummer: z.string(), + plzUndStadt: z.string(), + }), +); + export const fluggastrechteVorabcheckContext = { startAirport: airportSchema, endAirport: airportSchema, @@ -38,6 +46,7 @@ export const fluggastrechteVorabcheckContext = { kostenlos: YesNoAnswer, rabatt: YesNoAnswer, buchung: YesNoAnswer, + zustaendigesAmtsgericht: zustaendigesAmtsgerichtSchema.optional(), } as const; const contextObject = z.object(fluggastrechteVorabcheckContext).partial(); diff --git a/app/models/flows/fluggastrechteFormular/context.ts b/app/models/flows/fluggastrechteFormular/context.ts index 868b90c8d..9eba581ba 100644 --- a/app/models/flows/fluggastrechteFormular/context.ts +++ b/app/models/flows/fluggastrechteFormular/context.ts @@ -13,6 +13,7 @@ import { inputRequiredSchema } from "~/services/validation/inputRequired"; import { airlineSchema, fluggastBereichSchema, + zustaendigesAmtsgerichtSchema, } from "../fluggastrechte/context"; import { checkedOptional, @@ -73,6 +74,7 @@ export const fluggastrechtContext = { doMigration: YesNoAnswer, aenderungMitteilung: checkedRequired, zahlungOptional: checkedOptional, + zustaendigesAmtsgericht: zustaendigesAmtsgerichtSchema.optional(), } as const; const contextObject = z.object(fluggastrechtContext).partial(); diff --git a/app/routes/shared/formular.server.ts b/app/routes/shared/formular.server.ts index e902973eb..24e3b1f35 100644 --- a/app/routes/shared/formular.server.ts +++ b/app/routes/shared/formular.server.ts @@ -1,7 +1,11 @@ import type { ActionFunctionArgs, LoaderFunctionArgs } from "@remix-run/node"; import { json, redirectDocument } from "@remix-run/node"; import { validationError } from "remix-validated-form"; -import { getSessionForContext, updateSession } from "~/services/session.server"; +import { + getSessionData, + getSessionForContext, + updateSession, +} from "~/services/session.server"; import { fetchCollectionEntry, fetchMeta, @@ -13,19 +17,14 @@ import type { Context } from "~/models/flows/contexts"; import { parsePathname } from "~/models/flows/contexts"; import { flows } from "~/models/flows/flows.server"; import { isStrapiSelectComponent } from "~/services/cms/models/StrapiSelect"; -import { - createCSRFToken, - csrfSessionFromRequest, - validatedSession, -} from "~/services/security/csrf.server"; +import { validatedSession } from "~/services/security/csrf.server"; import { throw404IfFeatureFlagEnabled } from "~/services/errorPages/throw404"; import { logError } from "~/services/logging"; -import { lastStepKey } from "~/services/flow/constants"; import { getMigrationData } from "~/services/session.server/crossFlowMigration"; import { navItemsFromFlowSpecifics } from "~/services/flowNavigation.server"; import type { z } from "zod"; import type { CollectionSchemas } from "~/services/cms/schemas"; -import { buttonProps } from "~/util/buttonProps"; +import { getButtonNavigationProps } from "~/util/buttonProps"; import { sendCustomEvent } from "~/services/analytics/customEvent"; import { parentFromParams } from "~/services/params"; import { isStrapiArraySummary } from "~/services/cms/models/StrapiArraySummary"; @@ -37,6 +36,7 @@ import { } from "~/services/session.server/arrayDeletion"; import { interpolateDeep } from "~/util/fillTemplate"; import { stepMeta } from "~/services/meta/formStepMeta"; +import { updateSessionInHeader } from "~/services/session.server/updateSessionInHeader"; const structureCmsContent = ( formPageContent: z.infer, @@ -88,10 +88,11 @@ export const loader = async ({ const { flowId, stepId, arrayIndex } = parsePathname(pathname); const cookieId = request.headers.get("Cookie"); - // get data from redis - const { data, id } = await getSessionForContext(flowId).getSession(cookieId); - const userDataFromRedis: Context = data; // Recast for now to get type safety - context.sessionId = getSessionForContext(flowId).getSessionId(id); // For showing in errors + const { userDataFromRedis, sessionId } = await getSessionData( + flowId, + cookieId, + ); + context.sessionId = sessionId; // For showing in errors // get flow controller const currentFlow = flows[flowId]; @@ -149,7 +150,11 @@ export const loader = async ({ // filter user data for current step const fieldNames = formPageContent.form.map((entry) => entry.name); - const stepData = stepDataFromFieldNames(fieldNames, data, arrayIndex); + const stepData = stepDataFromFieldNames( + fieldNames, + userDataFromRedis, + arrayIndex, + ); // get array data to display in ArraySummary -> Formular + Vorabcheck? const arrayData = Object.fromEntries( @@ -162,30 +167,19 @@ export const loader = async ({ }), ); - // update session with csrf - const csrf = createCSRFToken(); - const session = await csrfSessionFromRequest(csrf, request); - - // update session with last valid step - session.set(lastStepKey, { [flowId]: stepId }); - - // set session in header - const sessionContext = getSessionForContext("main"); - const headers = { "Set-Cookie": await sessionContext.commitSession(session) }; + const { headers, csrf } = await updateSessionInHeader({ + request, + flowId, + stepId, + }); - // get navigation destinations + labels - const buttonNavigationProps = { - next: flowController.isFinal(stepId) - ? undefined - : buttonProps( - cmsContent.nextButtonLabel ?? - defaultStrings["nextButtonDefaultLabel"], - ), - back: buttonProps( - defaultStrings["backButtonDefaultLabel"], - returnTo ?? flowController.getPrevious(stepId), - ), - }; + const buttonNavigationProps = getButtonNavigationProps({ + flowController, + stepId, + nextButtonLabel: cmsContent.nextButtonLabel, + defaultStrings, + returnTo, + }); // get navigation items -> Formular const navItems = navItemsFromFlowSpecifics( diff --git a/app/routes/shared/result.server.ts b/app/routes/shared/result.server.ts index 6efc5e106..c75f80ffa 100644 --- a/app/routes/shared/result.server.ts +++ b/app/routes/shared/result.server.ts @@ -1,6 +1,6 @@ import type { ActionFunction, LoaderFunctionArgs } from "@remix-run/node"; import { json, redirect } from "@remix-run/node"; -import { getSessionForContext } from "~/services/session.server"; +import { getSessionForContext, updateSession } from "~/services/session.server"; import { fetchCollectionEntry, fetchMeta, @@ -23,6 +23,7 @@ import { partnerCourtAirports, } from "~/models/flows/fluggastrechte"; import { findCourt } from "~/services/gerichtsfinder/amtsgerichtData.server"; +import type { Jmtd14VTErwerberGerbeh } from "~/services/gerichtsfinder/types"; export const loader = async ({ request, context }: LoaderFunctionArgs) => { await throw404IfFeatureFlagEnabled(request); @@ -31,9 +32,29 @@ export const loader = async ({ request, context }: LoaderFunctionArgs) => { const { pathname } = new URL(request.url); const { flowId, stepId } = parsePathname(pathname); const cookieId = request.headers.get("Cookie"); - const { data, id } = await getSessionForContext(flowId).getSession(cookieId); + const flowSession = await getSessionForContext(flowId).getSession(cookieId); + const { data, id } = flowSession; context.sessionId = getSessionForContext(flowId).getSessionId(id); // For showing in errors + const courts = [data.startAirport, data.endAirport] + .filter(isPartnerAirport) + .map((airport) => findCourt({ zipCode: partnerCourtAirports[airport] })) + .filter(Boolean) as Jmtd14VTErwerberGerbeh[]; + + // TODO: move logic that enriches user data out of the loader + const zustaendigesAmtsgericht = courts.map((court) => ({ + bezeichnung: court.BEZEICHNUNG, + strasseMitHausnummer: court.STR_HNR, + plzUndStadt: `${court.PLZ_ZUSTELLBEZIRK} ${court.ORT}`, + })); + + if (zustaendigesAmtsgericht.length > 0) { + updateSession(flowSession, { + zustaendigesAmtsgericht: zustaendigesAmtsgericht[0], + }); + await getSessionForContext(flowId).commitSession(flowSession); + } + const { config, guards } = flows[flowId]; const flowController = buildFlowController({ config, data, guards }); @@ -87,13 +108,7 @@ export const loader = async ({ request, context }: LoaderFunctionArgs) => { getFeedbackBannerState(userDataFromRedis, pathname) ?? BannerState.ShowRating, amtsgerichtCommon, - courts: - cmsData.pageType === "success" && - [data.startAirport, data.endAirport] - .filter(isPartnerAirport) - .map((airport) => - findCourt({ zipCode: partnerCourtAirports[airport] }), - ), + courts: cmsData.pageType === "success" && courts, }, { headers: { "Set-Cookie": await commitSession(userDataFromRedis) } }, ); diff --git a/app/routes/shared/vorabcheck.server.ts b/app/routes/shared/vorabcheck.server.ts index 10e200440..16c70f76c 100644 --- a/app/routes/shared/vorabcheck.server.ts +++ b/app/routes/shared/vorabcheck.server.ts @@ -1,7 +1,11 @@ import type { ActionFunctionArgs, LoaderFunctionArgs } from "@remix-run/node"; import { json, redirectDocument } from "@remix-run/node"; import { validationError } from "remix-validated-form"; -import { getSessionForContext, updateSession } from "~/services/session.server"; +import { + getSessionData, + getSessionForContext, + updateSession, +} from "~/services/session.server"; import { fetchCollectionEntry, fetchMeta, @@ -9,25 +13,21 @@ import { } from "~/services/cms/index.server"; import { buildFlowController } from "~/services/flow/server/buildFlowController"; import { validateFormData } from "~/services/validation/validateFormData.server"; -import type { Context } from "~/models/flows/contexts"; import { parsePathname } from "~/models/flows/contexts"; import { flows } from "~/models/flows/flows.server"; import { isStrapiSelectComponent } from "~/services/cms/models/StrapiSelect"; -import { - createCSRFToken, - csrfSessionFromRequest, - validatedSession, -} from "~/services/security/csrf.server"; +import { validatedSession } from "~/services/security/csrf.server"; import { throw404IfFeatureFlagEnabled } from "~/services/errorPages/throw404"; import { logError } from "~/services/logging"; -import { lastStepKey } from "~/services/flow/constants"; import { sendCustomEvent } from "~/services/analytics/customEvent"; import { parentFromParams } from "~/services/params"; import { interpolateDeep } from "~/util/fillTemplate"; import _ from "lodash"; import { isStrapiHeadingComponent } from "~/services/cms/models/StrapiHeading"; -import { buttonProps } from "~/util/buttonProps"; +import { getButtonNavigationProps } from "~/util/buttonProps"; import { stepMeta } from "~/services/meta/formStepMeta"; +import { getProgressProps } from "~/services/flow/server/progress"; +import { updateSessionInHeader } from "~/services/session.server/updateSessionInHeader"; export const loader = async ({ params, @@ -41,10 +41,11 @@ export const loader = async ({ const { flowId, stepId } = parsePathname(pathname); const cookieId = request.headers.get("Cookie"); - // get data from redis - const { data, id } = await getSessionForContext(flowId).getSession(cookieId); - const userDataFromRedis: Context = data; // Recast for now to get type safety - context.sessionId = getSessionForContext(flowId).getSessionId(id); // For showing in errors + const { userDataFromRedis, sessionId } = await getSessionData( + flowId, + cookieId, + ); + context.sessionId = sessionId; // For showing in errors // get flow controller const currentFlow = flows[flowId]; @@ -94,38 +95,25 @@ export const loader = async ({ const fieldNames = formElements.map((entry) => entry.name); const stepData = _.pick(userDataFromRedis, fieldNames); - // update session with csrf - const csrf = createCSRFToken(); - const session = await csrfSessionFromRequest(csrf, request); - - // update session with last valid step - session.set(lastStepKey, { [flowId]: stepId }); - - // set session in header - const sessionContext = getSessionForContext("main"); - const headers = { "Set-Cookie": await sessionContext.commitSession(session) }; - - // get navigation destinations + labels - const buttonNavigationProps = { - next: flowController.isFinal(stepId) - ? undefined - : buttonProps( - vorabcheckPage.nextButtonLabel ?? - translations["nextButtonDefaultLabel"], - ), - back: buttonProps( - translations["backButtonDefaultLabel"], - flowController.getPrevious(stepId), - ), - }; - - // get progress -> Vorabcheck - const { total, current } = flowController.getProgress(stepId); - const progressProps = { - progress: current, - max: total, - label: translations["progressBarLabel"], - }; + const { headers, csrf } = await updateSessionInHeader({ + request, + flowId, + stepId, + }); + + const buttonNavigationProps = getButtonNavigationProps({ + flowController, + stepId, + nextButtonLabel: vorabcheckPage.nextButtonLabel, + defaultStrings: translations, + }); + console.log({ buttonNavigationProps }); + + const progressProps = getProgressProps({ + flowController, + stepId, + progressBarLabel: translations["progressBarLabel"], + }); return json( { diff --git a/app/services/cms/models/StrapiArraySummary.ts b/app/services/cms/models/StrapiArraySummary.ts index 24562d75b..9430edea4 100644 --- a/app/services/cms/models/StrapiArraySummary.ts +++ b/app/services/cms/models/StrapiArraySummary.ts @@ -9,7 +9,7 @@ export const StrapiArraySummarySchema = z }) .merge(HasOptionalStrapiIdSchema); -export type StrapiArraySummary = z.infer; +type StrapiArraySummary = z.infer; export const isStrapiArraySummary = ( strapiContent: StrapiContent, diff --git a/app/services/env/env.server.ts b/app/services/env/env.server.ts index 49d381d93..0afedd57d 100644 --- a/app/services/env/env.server.ts +++ b/app/services/env/env.server.ts @@ -29,7 +29,7 @@ export function config(): Config { TRUSTED_CSP_CONNECT_SOURCES: ENVIRONMENT === "development" ? "*" - : "'self' https://*.ingest.sentry.io https://eu.posthog.com", + : "'self' https://*.ingest.sentry.io https://*.posthog.com", REDIS_ENDPOINT: process.env.REDIS_ENDPOINT?.trim() ?? "localhost:6380", REDIS_PASSWORD: process.env.REDIS_PASSWORD?.trim() ?? "", COOKIE_SESSION_SECRET: diff --git a/app/services/flow/server/buildFlowController.ts b/app/services/flow/server/buildFlowController.ts index b31b8ced0..d311c435e 100644 --- a/app/services/flow/server/buildFlowController.ts +++ b/app/services/flow/server/buildFlowController.ts @@ -38,8 +38,7 @@ export type Config = MachineConfig< { type: string; params: unknown }, never >; - -export type Meta = { +type Meta = { customEventName?: string; progressPosition: number | undefined; isUneditable: boolean | undefined; @@ -102,6 +101,8 @@ function getInitial(machine: FlowStateMachine) { return stateValueToStepId(initialSnapshot.value); } +export type FlowController = ReturnType; + export const buildFlowController = ({ config, data: context = {}, diff --git a/app/services/flow/server/progress.ts b/app/services/flow/server/progress.ts new file mode 100644 index 000000000..aa88454c9 --- /dev/null +++ b/app/services/flow/server/progress.ts @@ -0,0 +1,18 @@ +import type { FlowController } from "~/services/flow/server/buildFlowController"; + +export const getProgressProps = ({ + flowController, + stepId, + progressBarLabel, +}: { + flowController: FlowController; + stepId: string; + progressBarLabel: string; +}) => { + const { total, current } = flowController.getProgress(stepId); + return { + progress: current, + max: total, + label: progressBarLabel, + }; +}; diff --git a/app/services/security/csrf.server.ts b/app/services/security/csrf.server.ts index 18f6fa6a4..dba65d422 100644 --- a/app/services/security/csrf.server.ts +++ b/app/services/security/csrf.server.ts @@ -6,7 +6,7 @@ import { CSRFKey } from "./csrfKey"; export const csrfCountMax = 10; -export function createCSRFToken() { +function createCSRFToken() { return randomBytes(100).toString("base64"); } @@ -28,7 +28,7 @@ export async function validatedSession(request: Request) { await validateCSRFToken(request, session); } -export async function csrfSessionFromRequest(csrf: string, request: Request) { +async function csrfSessionFromRequest(csrf: string, request: Request) { const session = await mainSessionFromRequest(request); const sessionCSRF = getCSRFFromSession(session); const newSessionCSRF = Array.isArray(sessionCSRF) @@ -37,3 +37,9 @@ export async function csrfSessionFromRequest(csrf: string, request: Request) { session.set(CSRFKey, newSessionCSRF); return session; } + +export async function updateSessionWithCsrfToken(request: Request) { + const csrf = createCSRFToken(); + const session = await csrfSessionFromRequest(csrf, request); + return { session, csrf }; +} diff --git a/app/services/session.server/index.ts b/app/services/session.server/index.ts index 63d5cb44e..2de455a6a 100644 --- a/app/services/session.server/index.ts +++ b/app/services/session.server/index.ts @@ -58,6 +58,17 @@ export function getSessionForContext(context: SessionContext) { return { getSession, commitSession, destroySession, getSessionId: getFullId }; } +export const getSessionData = async ( + flowId: SessionContext, + cookieId: string | null, +) => { + const contextSession = getSessionForContext(flowId); + const { data, id } = await contextSession.getSession(cookieId); + const userDataFromRedis: Context = data; // Recast for now to get type safety + const sessionId = contextSession.getSessionId(id); + return { userDataFromRedis, sessionId }; +}; + export const updateSession = ( session: Session, validatedData: Context, diff --git a/app/services/session.server/updateSessionInHeader.ts b/app/services/session.server/updateSessionInHeader.ts new file mode 100644 index 000000000..78747fc83 --- /dev/null +++ b/app/services/session.server/updateSessionInHeader.ts @@ -0,0 +1,24 @@ +import { updateSessionWithCsrfToken } from "~/services/security/csrf.server"; +import { lastStepKey } from "~/services/flow/constants"; +import { getSessionForContext } from "~/services/session.server/index"; +import type { FlowId } from "~/models/flows/contexts"; + +export const updateSessionInHeader = async ({ + request, + flowId, + stepId, +}: { + request: Request; + flowId: FlowId; + stepId: string; +}) => { + const { session, csrf } = await updateSessionWithCsrfToken(request); + + // update session with last valid step + session.set(lastStepKey, { [flowId]: stepId }); + + const sessionContext = getSessionForContext("main"); + const headers = { "Set-Cookie": await sessionContext.commitSession(session) }; + + return { headers, csrf }; +}; diff --git a/app/util/buttonProps.ts b/app/util/buttonProps.ts index 376ab8e60..108f96aac 100644 --- a/app/util/buttonProps.ts +++ b/app/util/buttonProps.ts @@ -1,8 +1,33 @@ import type { NavigationButton } from "~/components/form/ButtonNavigation"; +import type { FlowController } from "~/services/flow/server/buildFlowController"; +import type { Translations } from "~/services/cms/index.server"; -export function buttonProps( - label: string, - destination?: string, -): NavigationButton { +function buttonProps(label: string, destination?: string): NavigationButton { return { destination, label }; } + +export function getButtonNavigationProps({ + flowController, + stepId, + nextButtonLabel, + defaultStrings, + returnTo, +}: { + flowController: FlowController; + stepId: string; + nextButtonLabel?: string | null; + defaultStrings: Translations; + returnTo?: string; +}) { + return { + next: flowController.isFinal(stepId) + ? undefined + : buttonProps( + nextButtonLabel ?? defaultStrings["nextButtonDefaultLabel"], + ), + back: buttonProps( + defaultStrings["backButtonDefaultLabel"], + returnTo ?? flowController.getPrevious(stepId), + ), + }; +} diff --git a/package-lock.json b/package-lock.json index 84b1d9d17..c23e5d7e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,32 +10,32 @@ "@digitalservice4germany/style-dictionary": "^2.0.0", "@digitalservicebund/icons": "^1.1.1", "@react-pdf/renderer": "^3.3.8", - "@remix-run/express": "^2.7.2", - "@remix-run/node": "^2.7.2", - "@remix-run/react": "^2.7.2", - "@remix-run/serve": "^2.7.2", + "@remix-run/express": "^2.8.0", + "@remix-run/node": "^2.8.0", + "@remix-run/react": "^2.8.0", + "@remix-run/serve": "^2.8.0", "@remix-validated-form/with-zod": "^2.0.7", - "@sentry/remix": "^7.102.1", + "@sentry/remix": "^7.104.0", "@xstate/graph": "^2.0.0-beta.6", "axios": "^1.6.7", "classnames": "^2.5.1", "dotenv": "^16.4.5", - "express": "^4.18.2", + "express": "^4.18.3", "fflate": "^0.8.2", "ioredis": "^5.3.2", - "isbot": "^5.1.0", + "isbot": "^5.1.1", "lodash": "^4.17.21", "marked": "^12.0.0", "mustache": "^4.2.0", "pdf-lib": "^1.17.1", - "posthog-js": "^1.108.4", + "posthog-js": "^1.110.0", "posthog-node": "^3.6.3", - "quicktype-core": "^23.0.104", + "quicktype-core": "^23.0.105", "react": "^18.2.0", "react-collapsed": "^4.1.2", "react-dom": "^18.2.0", "react-dropzone-esm": "^15.0.1", - "react-imask": "^7.4.0", + "react-imask": "^7.5.0", "remix-validated-form": "^5.1.5", "tiny-invariant": "^1.3.3", "validator": "^13.11.0", @@ -45,10 +45,10 @@ "devDependencies": { "@axe-core/playwright": "^4.8.5", "@faker-js/faker": "^8.4.1", - "@playwright/test": "^1.41.2", - "@remix-run/dev": "^2.7.2", - "@remix-run/eslint-config": "^2.7.2", - "@remix-run/testing": "^2.7.2", + "@playwright/test": "^1.42.0", + "@remix-run/dev": "^2.8.0", + "@remix-run/eslint-config": "^2.8.0", + "@remix-run/testing": "^2.8.0", "@storybook/addon-a11y": "^7.6.17", "@storybook/addon-essentials": "^7.6.17", "@storybook/addon-storyshots": "^7.6.17", @@ -59,8 +59,8 @@ "@types/follow-redirects": "^1.14.4", "@types/jest": "^29.5.12", "@types/mustache": "^4.2.5", - "@types/node": "^20.11.20", - "@types/react": "^18.2.60", + "@types/node": "^20.11.24", + "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "@types/validator": "^13.11.9", "autoprefixer": "^10.4.17", @@ -72,7 +72,7 @@ "follow-redirects": "^1.15.5", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", - "lefthook": "^1.6.2", + "lefthook": "^1.6.4", "p-map": "^7.0.1", "postcss": "^8.4.35", "prettier": "^3.2.5", @@ -250,9 +250,9 @@ } }, "node_modules/@babel/core": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", - "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", + "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -260,11 +260,11 @@ "@babel/generator": "^7.23.6", "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.9", - "@babel/parser": "^7.23.9", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/helpers": "^7.24.0", + "@babel/parser": "^7.24.0", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -392,9 +392,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", - "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz", + "integrity": "sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -555,9 +555,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", "dev": true, "engines": { "node": ">=6.9.0" @@ -675,14 +675,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", - "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", + "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", "dev": true, "dependencies": { - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -774,9 +774,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", - "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", + "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -897,12 +897,12 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz", - "integrity": "sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.0.tgz", + "integrity": "sha512-MXW3pQCu9gUiVGzqkGqsgiINDVYXoAnrY8FYF/rmb+OfufNF0zHMpHPN4ulRrinxYT8Vk/aZJxYqOKsDECjKAw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -1639,14 +1639,14 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", - "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz", + "integrity": "sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.23.3" }, @@ -2024,14 +2024,14 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz", - "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.0.tgz", + "integrity": "sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==", "dev": true, "dependencies": { "@babel/compat-data": "^7.23.5", "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/helper-validator-option": "^7.23.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", @@ -2084,7 +2084,7 @@ "@babel/plugin-transform-new-target": "^7.23.3", "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.24.0", "@babel/plugin-transform-object-super": "^7.23.3", "@babel/plugin-transform-optional-catch-binding": "^7.23.4", "@babel/plugin-transform-optional-chaining": "^7.23.4", @@ -2127,13 +2127,13 @@ } }, "node_modules/@babel/preset-flow": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.23.3.tgz", - "integrity": "sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.0.tgz", + "integrity": "sha512-cum/nSi82cDaSJ21I4PgLTVlj0OXovFk6GRguJYe/IKg6y6JHLTbJhybtX4k35WT9wdeJfEVjycTixMhBHd0Dg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", + "@babel/helper-plugin-utils": "^7.24.0", + "@babel/helper-validator-option": "^7.23.5", "@babel/plugin-transform-flow-strip-types": "^7.23.3" }, "engines": { @@ -2340,9 +2340,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", - "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", + "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2351,9 +2351,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.23.9.tgz", - "integrity": "sha512-oeOFTrYWdWXCvXGB5orvMTJ6gCZ9I6FBjR+M38iKNXCsPxr4xT0RTdg5uz1H7QP8pp74IzPtwritEr+JscqHXQ==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.0.tgz", + "integrity": "sha512-HxiRMOncx3ly6f3fcZ1GVKf+/EROcI9qwPgmij8Czqy6Okm/0T37T4y2ZIlLUuEUFjtM7NRsfdCO8Y3tAiJZew==", "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" @@ -2363,23 +2363,23 @@ } }, "node_modules/@babel/template": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", - "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", - "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", + "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.23.5", @@ -2388,8 +2388,8 @@ "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2398,9 +2398,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.23.4", @@ -3764,9 +3764,9 @@ } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" @@ -3779,9 +3779,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.23", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz", - "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==", + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.24.tgz", + "integrity": "sha512-+VaWXDa6+l6MhflBvVXjIEAzb59nQ2JUK3bwRp2zRpPtU+8TFRy9Gg/5oIcNlkEL5PGlBFGfemUVvIgLnTzq7Q==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -4007,12 +4007,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.2.tgz", - "integrity": "sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg==", + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.42.0.tgz", + "integrity": "sha512-2k1HzC28Fs+HiwbJOQDUwrWMttqSLUVdjCqitBOjdCD0svWOMQUVqrXX6iFD7POps6xXAojsX/dGBpKnjZctLA==", "dev": true, "dependencies": { - "playwright": "1.41.2" + "playwright": "1.42.0" }, "bin": { "playwright": "cli.js" @@ -4832,9 +4832,9 @@ "integrity": "sha512-w8pk7svhjVj5f7d7kjEGXSk26ffCqRSQcgWR4DwcFltNpSM18ZJmzmM6WrNeeP437y48LlykLnmGDA3oATakgw==" }, "node_modules/@remix-run/dev": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@remix-run/dev/-/dev-2.7.2.tgz", - "integrity": "sha512-ejxzcQY5DFl1CNG5+5+y0UeklOqkRBO43lAPnSC8ITLigjZY6UZsBENlex/Y+xJzjIUtaRBxc7mVaWa62FDQOg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@remix-run/dev/-/dev-2.8.0.tgz", + "integrity": "sha512-kZtmK/7vKk7QV8CGCyC9Or3wP7EwL4rOJS9vObmTRAPv8mLyznR8bJxeNVWA7ICnCGejF8s2X3abVJrkEMiFlg==", "dev": true, "dependencies": { "@babel/core": "^7.21.8", @@ -4847,9 +4847,9 @@ "@babel/types": "^7.22.5", "@mdx-js/mdx": "^2.3.0", "@npmcli/package-json": "^4.0.1", - "@remix-run/node": "2.7.2", - "@remix-run/router": "1.15.1", - "@remix-run/server-runtime": "2.7.2", + "@remix-run/node": "2.8.0", + "@remix-run/router": "1.15.2", + "@remix-run/server-runtime": "2.8.0", "@types/mdx": "^2.0.5", "@vanilla-extract/integration": "^6.2.0", "arg": "^5.0.1", @@ -4898,7 +4898,7 @@ "node": ">=18.0.0" }, "peerDependencies": { - "@remix-run/serve": "^2.7.2", + "@remix-run/serve": "^2.8.0", "typescript": "^5.1.0", "vite": "^5.1.0", "wrangler": "^3.28.2" @@ -4934,9 +4934,9 @@ } }, "node_modules/@remix-run/eslint-config": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@remix-run/eslint-config/-/eslint-config-2.7.2.tgz", - "integrity": "sha512-fAXNlRQQ4DJ0g6GCkUM3sWji18+4i/+FtMA1roSfB9s/+8NEpdZLYJbLo/NGlZUHDC7dXAmTZ3kUZcCCBdOAKw==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@remix-run/eslint-config/-/eslint-config-2.8.0.tgz", + "integrity": "sha512-4y5TxhWbivKT2g8d2wciWSns6KhuvJPXoLuuBa2v3At20LxqWdyqErZfPHPrecXHjl/vJpSAGOGXAU1WuS39kg==", "dev": true, "dependencies": { "@babel/core": "^7.21.8", @@ -4971,11 +4971,11 @@ } }, "node_modules/@remix-run/express": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@remix-run/express/-/express-2.7.2.tgz", - "integrity": "sha512-wknBXniMr7sUvu0D+iOkxK1IenSM0nfZJai1RgNP0Qs12jrKQA5I1dZuiJdKFfLnhvJLbl/BJ6q40TJ4kqNTPg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@remix-run/express/-/express-2.8.0.tgz", + "integrity": "sha512-15qnPt+vrvv66pvdcRiodNF5I5Rot07HoKjVlrXYSO4KbSg9WTE0jCPX0rFStD4QNTa2hIl8YftPlmZXjFxQoQ==", "dependencies": { - "@remix-run/node": "2.7.2" + "@remix-run/node": "2.8.0" }, "engines": { "node": ">=18.0.0" @@ -4991,11 +4991,11 @@ } }, "node_modules/@remix-run/node": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-2.7.2.tgz", - "integrity": "sha512-smIWI9kNGDnY361WlDOTwxPfUw/KHcS7PCLjHlM/omx3ETD1Y2dc4Rt82LSJt0qsPSPA72ZOww08NoX+YGBvyQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@remix-run/node/-/node-2.8.0.tgz", + "integrity": "sha512-UGAckayyhw14v70O1Lcf75Nr/ipLOG5e20tMiMee96sCXWaHGHpv9VbAVoDXiVKqI3sw4dJarNc0qo794zwAbg==", "dependencies": { - "@remix-run/server-runtime": "2.7.2", + "@remix-run/server-runtime": "2.8.0", "@remix-run/web-fetch": "^4.4.2", "@remix-run/web-file": "^3.1.0", "@remix-run/web-stream": "^1.1.0", @@ -5017,14 +5017,14 @@ } }, "node_modules/@remix-run/react": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@remix-run/react/-/react-2.7.2.tgz", - "integrity": "sha512-Q/gsxJVEYYvkYM/immVFP4rBnGSzEFNJLRt6plO5knAy6NV1NNptsEnvh4GoTVQdTKdVw7wkJW26/YpnHzHiDA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@remix-run/react/-/react-2.8.0.tgz", + "integrity": "sha512-QDbdAFOPssVGIlT1Klp/GiS6Sbkmwn9e2tJXXtPwchLCePGCnIlJXtBe/jokFBwcG8ce+oTRzSVmJ75kEEahZA==", "dependencies": { - "@remix-run/router": "1.15.1", - "@remix-run/server-runtime": "2.7.2", - "react-router": "6.22.1", - "react-router-dom": "6.22.1" + "@remix-run/router": "1.15.2", + "@remix-run/server-runtime": "2.8.0", + "react-router": "6.22.2", + "react-router-dom": "6.22.2" }, "engines": { "node": ">=18.0.0" @@ -5041,20 +5041,20 @@ } }, "node_modules/@remix-run/router": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.1.tgz", - "integrity": "sha512-zcU0gM3z+3iqj8UX45AmWY810l3oUmXM7uH4dt5xtzvMhRtYVhKGOmgOd1877dOPPepfCjUv57w+syamWIYe7w==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.2.tgz", + "integrity": "sha512-+Rnav+CaoTE5QJc4Jcwh5toUpnVLKYbpU6Ys0zqbakqbaLQHeglLVHPfxOiQqdNmUy5C2lXz5dwC6tQNX2JW2Q==", "engines": { "node": ">=14.0.0" } }, "node_modules/@remix-run/serve": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@remix-run/serve/-/serve-2.7.2.tgz", - "integrity": "sha512-5kR6fuD2MEWqd8DogyHP3fiSjGv56ZBWKntwMeEKh7kuyDhHPX+BAU2UsYvLOTB1VH9Ktg5mNM8l9gMMY6l/Jg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@remix-run/serve/-/serve-2.8.0.tgz", + "integrity": "sha512-khZ09edcyDC88+I3379ArspawRPeKroxILuXbNa9tdHJvy1Fk3hTVMiZHxlb1/u3W6VVD5f5xMoLHzwVr6q5Xw==", "dependencies": { - "@remix-run/express": "2.7.2", - "@remix-run/node": "2.7.2", + "@remix-run/express": "2.8.0", + "@remix-run/node": "2.8.0", "chokidar": "^3.5.3", "compression": "^1.7.4", "express": "^4.17.1", @@ -5070,11 +5070,11 @@ } }, "node_modules/@remix-run/server-runtime": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-2.7.2.tgz", - "integrity": "sha512-PGD1SPJttlYI3Nwe8ABk53gHCueWfZ2NOsKx7utD/lKRPFW2BqADpokzQXSzy4WTpk4drAmlagobGVIVH66Tmg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@remix-run/server-runtime/-/server-runtime-2.8.0.tgz", + "integrity": "sha512-bb6rRefxEqA1fHGUo2i2s1uMztYqQlxupVCVsAs+sUkzTXtORJW+b0oFIKf5yWyaarBJ4zeLyoPsAMBqVX8P3w==", "dependencies": { - "@remix-run/router": "1.15.1", + "@remix-run/router": "1.15.2", "@types/cookie": "^0.6.0", "@web3-storage/multipart-parser": "^1.0.0", "cookie": "^0.6.0", @@ -5094,15 +5094,15 @@ } }, "node_modules/@remix-run/testing": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@remix-run/testing/-/testing-2.7.2.tgz", - "integrity": "sha512-pF1gB/vyMlFiLdN15gjsD+8F7seVIhSDfwTqHypcI98s2Q7hUxm3+NG8UnmGRfmnNrsOq7EH63YP8zSC0JS0pg==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@remix-run/testing/-/testing-2.8.0.tgz", + "integrity": "sha512-eLFbDied5tHVeOzWyo3p/BTWds1SRz5jUI0GZ2PIYgnpMWFs2UnGMZkDSM3tx79r0An7WPtItZdTAVhGgFYOOg==", "dev": true, "dependencies": { - "@remix-run/node": "2.7.2", - "@remix-run/react": "2.7.2", - "@remix-run/router": "1.15.1", - "react-router-dom": "6.22.1" + "@remix-run/node": "2.8.0", + "@remix-run/react": "2.8.0", + "@remix-run/router": "1.15.2", + "react-router-dom": "6.22.2" }, "engines": { "node": ">=18.0.0" @@ -5387,57 +5387,57 @@ "dev": true }, "node_modules/@sentry-internal/feedback": { - "version": "7.102.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.102.1.tgz", - "integrity": "sha512-vY4hpLLMNLjICtWiizc7KeGbWOTUMGrF7C+9dPCztZww3CLgzWy9A7DvPj5hodRiYzpdRnAMl8yQnMFbYXh7bA==", + "version": "7.104.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-7.104.0.tgz", + "integrity": "sha512-+OWqm+X9ZfEQQmxVoZsc9lpzd85pabAT+bEj57StRMTnfdRbD9TippS20nCD9N2Ql5v2/41NfiPONMejGbnOwg==", "dependencies": { - "@sentry/core": "7.102.1", - "@sentry/types": "7.102.1", - "@sentry/utils": "7.102.1" + "@sentry/core": "7.104.0", + "@sentry/types": "7.104.0", + "@sentry/utils": "7.104.0" }, "engines": { "node": ">=12" } }, "node_modules/@sentry-internal/replay-canvas": { - "version": "7.102.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.102.1.tgz", - "integrity": "sha512-GUX4RWI10uRjdjeyvCLtAAhWRVqnAnG6+yNxWfqUQ3qMA7B7XxG43KT2UhSnulmErNzODQ6hA68rGPwwYeRIww==", + "version": "7.104.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-7.104.0.tgz", + "integrity": "sha512-gfdnkFIpxAveKNghkvRCqv+hSiBkxYVoyFZLTvUPuM9Cmvmket1/PpnuWMC2jNtCEewG3gxkPDd4EaT9oa1HZQ==", "dependencies": { - "@sentry/core": "7.102.1", - "@sentry/replay": "7.102.1", - "@sentry/types": "7.102.1", - "@sentry/utils": "7.102.1" + "@sentry/core": "7.104.0", + "@sentry/replay": "7.104.0", + "@sentry/types": "7.104.0", + "@sentry/utils": "7.104.0" }, "engines": { "node": ">=12" } }, "node_modules/@sentry-internal/tracing": { - "version": "7.102.1", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.102.1.tgz", - "integrity": "sha512-RkFlFyAC0fQOvBbBqnq0CLmFW5m3JJz9pKbZd5vXPraWAlniKSb1bC/4DF9SlNx0FN1LWG+IU3ISdpzwwTeAGg==", + "version": "7.104.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.104.0.tgz", + "integrity": "sha512-2z7OijM1J5ndJUiJJElC3iH9qb/Eb8eYm2v8oJhM8WVdc5uCKfrQuYHNgGOnmY2FOCfEUlTmMQGpDw7DJ67L5w==", "dependencies": { - "@sentry/core": "7.102.1", - "@sentry/types": "7.102.1", - "@sentry/utils": "7.102.1" + "@sentry/core": "7.104.0", + "@sentry/types": "7.104.0", + "@sentry/utils": "7.104.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/browser": { - "version": "7.102.1", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.102.1.tgz", - "integrity": "sha512-7BOfPBiM7Kp6q/iy0JIbsBTxIASV+zWXByqqjuEMWGj3X2u4oRIfm3gv4erPU/l+CORQUVQZLSPGoIoM1gbB/A==", + "version": "7.104.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.104.0.tgz", + "integrity": "sha512-HsqO+mr1SowGoP0VbuWrQ2DZT0t5PLomy7LEYa6+4lbOemnY+5YV2NSwBTKbjYysvKipSwaRtPhXrsXsMaz8Bg==", "dependencies": { - "@sentry-internal/feedback": "7.102.1", - "@sentry-internal/replay-canvas": "7.102.1", - "@sentry-internal/tracing": "7.102.1", - "@sentry/core": "7.102.1", - "@sentry/replay": "7.102.1", - "@sentry/types": "7.102.1", - "@sentry/utils": "7.102.1" + "@sentry-internal/feedback": "7.104.0", + "@sentry-internal/replay-canvas": "7.104.0", + "@sentry-internal/tracing": "7.104.0", + "@sentry/core": "7.104.0", + "@sentry/replay": "7.104.0", + "@sentry/types": "7.104.0", + "@sentry/utils": "7.104.0" }, "engines": { "node": ">=8" @@ -5594,40 +5594,40 @@ } }, "node_modules/@sentry/core": { - "version": "7.102.1", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.102.1.tgz", - "integrity": "sha512-QjY+LSP3du3J/C8x/FfEbRxgZgsWd0jfTJ4P7s9f219I1csK4OeBMC3UA1HwEa0pY/9OF6H/egW2CjOcMM5Pdg==", + "version": "7.104.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.104.0.tgz", + "integrity": "sha512-XPndD6IGQGd07/EntvYVzOWQUo/Gd7L3DwYFeEKeBv6ByWjbBNmVZFRhU0GPPsCHKyW9yMU9OO9diLSS4ijsRg==", "dependencies": { - "@sentry/types": "7.102.1", - "@sentry/utils": "7.102.1" + "@sentry/types": "7.104.0", + "@sentry/utils": "7.104.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/node": { - "version": "7.102.1", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.102.1.tgz", - "integrity": "sha512-mb3vmM3SGuCruckPiv/Vafeh89UQavTfpPFoU6Jwe6dSpQ39BO8fO8k8Zev+/nP6r/FKLtX17mJobErHECXsYw==", + "version": "7.104.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.104.0.tgz", + "integrity": "sha512-Ixt8qg6IV8gywi4+H1cAtQeglAAww2nwLHybCxAvnu3czdF8w7ifF+o5BY1FmO5UYVCAfr8vEb+XG4CuRrFb7g==", "dependencies": { - "@sentry-internal/tracing": "7.102.1", - "@sentry/core": "7.102.1", - "@sentry/types": "7.102.1", - "@sentry/utils": "7.102.1" + "@sentry-internal/tracing": "7.104.0", + "@sentry/core": "7.104.0", + "@sentry/types": "7.104.0", + "@sentry/utils": "7.104.0" }, "engines": { "node": ">=8" } }, "node_modules/@sentry/react": { - "version": "7.102.1", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.102.1.tgz", - "integrity": "sha512-X4j2DgbktlEifnd21YJKCayAmff5hnaS+9MNz9OonEwD0ARi0ks7bo0wtWHMjPK20992MO+JwczVg/1BXJYDdQ==", - "dependencies": { - "@sentry/browser": "7.102.1", - "@sentry/core": "7.102.1", - "@sentry/types": "7.102.1", - "@sentry/utils": "7.102.1", + "version": "7.104.0", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-7.104.0.tgz", + "integrity": "sha512-JdPzX/rJ4sSr/pVFOKwVrUhr8McCn38w5Q+/wdCabO8fdUkoBe4P05LRCH4Rng0uOk8MeEQ+EvfMVB79DmxIgQ==", + "dependencies": { + "@sentry/browser": "7.104.0", + "@sentry/core": "7.104.0", + "@sentry/types": "7.104.0", + "@sentry/utils": "7.104.0", "hoist-non-react-statics": "^3.3.2" }, "engines": { @@ -5638,17 +5638,17 @@ } }, "node_modules/@sentry/remix": { - "version": "7.102.1", - "resolved": "https://registry.npmjs.org/@sentry/remix/-/remix-7.102.1.tgz", - "integrity": "sha512-NQOB3/ZthPfXmG8e0954UeRnoCyJ6ZVl0Q76MAJKydx795NutrZbaFZAtLzV0PCIeR9PampjUmd6VnEW0YHysw==", + "version": "7.104.0", + "resolved": "https://registry.npmjs.org/@sentry/remix/-/remix-7.104.0.tgz", + "integrity": "sha512-TFAnbmDeM6t7eoPL+kfXJP3iTob3ffbnB5iOoqgQYGfJ8yMwzFAfAms8TPOJwAuZuoQIgQar9VyRpt/ziXNZog==", "dependencies": { "@remix-run/router": "1.x", "@sentry/cli": "^2.28.0", - "@sentry/core": "7.102.1", - "@sentry/node": "7.102.1", - "@sentry/react": "7.102.1", - "@sentry/types": "7.102.1", - "@sentry/utils": "7.102.1", + "@sentry/core": "7.104.0", + "@sentry/node": "7.104.0", + "@sentry/react": "7.104.0", + "@sentry/types": "7.104.0", + "@sentry/utils": "7.104.0", "glob": "^10.3.4", "yargs": "^17.6.0" }, @@ -5665,33 +5665,33 @@ } }, "node_modules/@sentry/replay": { - "version": "7.102.1", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.102.1.tgz", - "integrity": "sha512-HR/j9dGIvbrId8fh8mQlODx7JrhRmawEd9e9P3laPtogWCg/5TI+XPb2VGSaXOX9VWtb/6Z2UjHsaGjgg6YcuA==", + "version": "7.104.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.104.0.tgz", + "integrity": "sha512-HmWBr/u+SNeULxCxM8lJb2iqhjizeLGJtuKSShPEguEXIUT4kzdoqLh6wn7BAjiKzhmyjrnBcosR5LUqJtGYZQ==", "dependencies": { - "@sentry-internal/tracing": "7.102.1", - "@sentry/core": "7.102.1", - "@sentry/types": "7.102.1", - "@sentry/utils": "7.102.1" + "@sentry-internal/tracing": "7.104.0", + "@sentry/core": "7.104.0", + "@sentry/types": "7.104.0", + "@sentry/utils": "7.104.0" }, "engines": { "node": ">=12" } }, "node_modules/@sentry/types": { - "version": "7.102.1", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.102.1.tgz", - "integrity": "sha512-htKorf3t/D0XYtM7foTcmG+rM47rDP6XdbvCcX5gBCuCYlzpM1vqCt2rl3FLktZC6TaIpFRJw1TLfx6m+x5jdA==", + "version": "7.104.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.104.0.tgz", + "integrity": "sha512-5bs0xe0+GZR4QBm9Nrqw59o0sv3kBtCosrZDVxBru/dQbrfnB+/kVorvuM0rV3+coNITTKcKDegSZmK1d2uOGQ==", "engines": { "node": ">=8" } }, "node_modules/@sentry/utils": { - "version": "7.102.1", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.102.1.tgz", - "integrity": "sha512-+8WcFjHVV/HROXSAwMuUzveElBFC43EiTG7SNEBNgOUeQzQVTmbUZXyTVgLrUmtoWqvnIxCacoLxtZo1o67kdg==", + "version": "7.104.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.104.0.tgz", + "integrity": "sha512-ZVg+xZirI9DlOi0NegNVocswdh/8p6QkzlQzDQY2LP2CC6JQdmwi64o0S4rPH4YIHNKQJTpIjduoxeKgd1EO5g==", "dependencies": { - "@sentry/types": "7.102.1" + "@sentry/types": "7.104.0" }, "engines": { "node": ">=8" @@ -6496,19 +6496,20 @@ } }, "node_modules/@storybook/builder-vite": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.0.0-beta.5.tgz", - "integrity": "sha512-XsN1EggUoHuCIf6nVw0O2H9vnHpFUCdcfN+YmS4MEm8waH5zXnnrGttwq4jnGcVVydFEq/9xsbLxzvl8l3cLLQ==", - "dev": true, - "dependencies": { - "@storybook/channels": "8.0.0-beta.5", - "@storybook/client-logger": "8.0.0-beta.5", - "@storybook/core-common": "8.0.0-beta.5", - "@storybook/csf-plugin": "8.0.0-beta.5", - "@storybook/node-logger": "8.0.0-beta.5", - "@storybook/preview": "8.0.0-beta.5", - "@storybook/preview-api": "8.0.0-beta.5", - "@storybook/types": "8.0.0-beta.5", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.0.0-rc.0.tgz", + "integrity": "sha512-YnzAC3+uyE79ynk6I9uCUjPqnLHEbK9ni9RSwAuRPVM+k9zkTO7C5fbjVa08Q5LSioqdg9NSwFOzDHT7zj8DUg==", + "dev": true, + "dependencies": { + "@storybook/channels": "8.0.0-rc.0", + "@storybook/client-logger": "8.0.0-rc.0", + "@storybook/core-common": "8.0.0-rc.0", + "@storybook/core-events": "8.0.0-rc.0", + "@storybook/csf-plugin": "8.0.0-rc.0", + "@storybook/node-logger": "8.0.0-rc.0", + "@storybook/preview": "8.0.0-rc.0", + "@storybook/preview-api": "8.0.0-rc.0", + "@storybook/types": "8.0.0-rc.0", "@types/find-cache-dir": "^3.2.1", "browser-assert": "^1.2.1", "es-module-lexer": "^0.9.3", @@ -6893,13 +6894,13 @@ } }, "node_modules/@storybook/builder-vite/node_modules/@storybook/channels": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.0.0-beta.5.tgz", - "integrity": "sha512-si9QYJa9g0rt2yDLeGMWYNrw+ZVyqsg7upYU7Mm63JXXvt1647bqmtbZL/O6VGIN+30x97ZBInLPG7HWN2MyFw==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.0.0-rc.0.tgz", + "integrity": "sha512-Ey6en/5lGvK1yvXjLeJCKs0cIRklqHUuQdvGRJpL4daSHHuBrp4ULKysno8xaSEQAFKo36BiJLEGUh+iUSt4Zg==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.0.0-beta.5", - "@storybook/core-events": "8.0.0-beta.5", + "@storybook/client-logger": "8.0.0-rc.0", + "@storybook/core-events": "8.0.0-rc.0", "@storybook/global": "^5.0.0", "qs": "^6.10.0", "telejson": "^7.2.0", @@ -6911,9 +6912,9 @@ } }, "node_modules/@storybook/builder-vite/node_modules/@storybook/client-logger": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.0.0-beta.5.tgz", - "integrity": "sha512-Fd1+oUd77tKrh8dAyac5VDeiLrP8toqTazpa6sMHtrEFWA9ozi99euaJyIg9FYZalJZQ5C0ZiQRtzAocZ3vFyA==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.0.0-rc.0.tgz", + "integrity": "sha512-XL5U1Y25PhuNkZOUQxCdXluhcOK3S7MbTaB7Ut/qJGU51smfoLfwB5NHWrAq3T557VnIRO3iMAEUves2+omVYw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -6924,15 +6925,15 @@ } }, "node_modules/@storybook/builder-vite/node_modules/@storybook/core-common": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.0.0-beta.5.tgz", - "integrity": "sha512-Ovgl7QBE96uKAGy6xFfwrsMiYCRFpGjpb3OspgR1UyBtr6f7OvaVLM68z/GyLpR5SJoKocoxaOIxo/shzc1Csw==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.0.0-rc.0.tgz", + "integrity": "sha512-+m6vzA8NjngEvqPAGmFws0Hkx7DbOWMSk0Q5OWPhSCP1Rcf1I2zXFovjymogk8Uj+96YQwUd1rhiiBuPnz7M9Q==", "dev": true, "dependencies": { - "@storybook/core-events": "8.0.0-beta.5", - "@storybook/csf-tools": "8.0.0-beta.5", - "@storybook/node-logger": "8.0.0-beta.5", - "@storybook/types": "8.0.0-beta.5", + "@storybook/core-events": "8.0.0-rc.0", + "@storybook/csf-tools": "8.0.0-rc.0", + "@storybook/node-logger": "8.0.0-rc.0", + "@storybook/types": "8.0.0-rc.0", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", "chalk": "^4.1.0", @@ -6964,9 +6965,9 @@ } }, "node_modules/@storybook/builder-vite/node_modules/@storybook/core-events": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.0.0-beta.5.tgz", - "integrity": "sha512-auWqHioXmk35loC5ur1mj0rATXR8+a9/Z1RaepUnhL+0rrhr0iLViKadYqnDP+sNRMX58lxX1NMP69KwEybtxQ==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.0.0-rc.0.tgz", + "integrity": "sha512-Ih514I83jZt8FKoiQsYmlMw1HSPh5g1WnRHy3/Ajs5Li/BaVgEqxWU9MtXG2af0bHDsBsOpnCua2Oycewdk2Tw==", "dev": true, "dependencies": { "ts-dedent": "^2.0.0" @@ -6977,12 +6978,12 @@ } }, "node_modules/@storybook/builder-vite/node_modules/@storybook/csf-plugin": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.0.0-beta.5.tgz", - "integrity": "sha512-jZAf4OCqUVG4WJl0dT8KYhYlNr+7rSdnTtGOCsaFtaUwlKyW6Ew33EZLN4lAsGwXIqAs0UMNiU8FpCLqb72ZLw==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.0.0-rc.0.tgz", + "integrity": "sha512-XCb/BsqDl99q3Vv4dBsqlsJfVTcJzMwc2iEdczb6RnR64jE0f8iYFqLgKLLM21PMdzIdn2TVO0tgSs3lbu9VOA==", "dev": true, "dependencies": { - "@storybook/csf-tools": "8.0.0-beta.5", + "@storybook/csf-tools": "8.0.0-rc.0", "unplugin": "^1.3.1" }, "funding": { @@ -6991,9 +6992,9 @@ } }, "node_modules/@storybook/builder-vite/node_modules/@storybook/csf-tools": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.0.0-beta.5.tgz", - "integrity": "sha512-yyYZGDNH88TblAb/5f57kYFczz6zq4yGSciSw/oZWvty8lHnWPR0Pk1NMrIRawpHaHNFSYAirHaTwUYbN3NNcA==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.0.0-rc.0.tgz", + "integrity": "sha512-572k/phN/z50tD2hfUNJZBAhBMt8Gf8Mg6AhHD9fSGOma9Ne8/Dor2kekDrkDIWLua3QsFGVCyl7kSJlWim/MA==", "dev": true, "dependencies": { "@babel/generator": "^7.23.0", @@ -7001,7 +7002,7 @@ "@babel/traverse": "^7.23.2", "@babel/types": "^7.23.0", "@storybook/csf": "^0.1.2", - "@storybook/types": "8.0.0-beta.5", + "@storybook/types": "8.0.0-rc.0", "fs-extra": "^11.1.0", "recast": "^0.23.1", "ts-dedent": "^2.0.0" @@ -7012,9 +7013,9 @@ } }, "node_modules/@storybook/builder-vite/node_modules/@storybook/node-logger": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.0.0-beta.5.tgz", - "integrity": "sha512-ePFqxExROGHmu+PHOF63SvDlxAZ4Aph3ST+Lj7wszHrOnSGxzVCtgyPOj/kv1rkz0JCB/ySSWrOqd+DsECEbGw==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.0.0-rc.0.tgz", + "integrity": "sha512-KQ308nd9JG2AdIY0Zt+ZY2k1z2JDe7wSWv4gKf23FFAMq2ADvxBqrAsR0h/ebYa2CnXOvYGzsDAnVlbk8cM2bA==", "dev": true, "funding": { "type": "opencollective", @@ -7022,17 +7023,17 @@ } }, "node_modules/@storybook/builder-vite/node_modules/@storybook/preview-api": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.0.0-beta.5.tgz", - "integrity": "sha512-XSb79qVGTDQtbq0+SYYs0rAv+Yma+n1dsCPIIgOVBfRWU9AK/7rbak8CsuH/0kjkmfJDzPg/DikBUwab4ZgwaQ==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.0.0-rc.0.tgz", + "integrity": "sha512-w80nL/FMA7Y18T0Diw5zkMXkMiGsXPs2Q/SPmjW9GHli5XHIPHD0AYWzw+LOf8vY/pjfPyKHxBkbX5PhEutE8g==", "dev": true, "dependencies": { - "@storybook/channels": "8.0.0-beta.5", - "@storybook/client-logger": "8.0.0-beta.5", - "@storybook/core-events": "8.0.0-beta.5", + "@storybook/channels": "8.0.0-rc.0", + "@storybook/client-logger": "8.0.0-rc.0", + "@storybook/core-events": "8.0.0-rc.0", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "8.0.0-beta.5", + "@storybook/types": "8.0.0-rc.0", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -7048,12 +7049,12 @@ } }, "node_modules/@storybook/builder-vite/node_modules/@storybook/types": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.0.0-beta.5.tgz", - "integrity": "sha512-wECly4ZckDJ0WJs/5R4qXQU4i+qeNFdUujc67zdS2DnXkHiQq6BnxSrh7HDTfDDmtC/+Ox8WKNGiNpIqwk1qMw==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.0.0-rc.0.tgz", + "integrity": "sha512-UCPBqk23zH4zgmgJ7e+BZMr+jt+PSeDiO5jI7prgLiWKTKKqeYvhqJFBmA0t4pt0Gv87k0A+90GXBNEnvP3FwA==", "dev": true, "dependencies": { - "@storybook/channels": "8.0.0-beta.5", + "@storybook/channels": "8.0.0-rc.0", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -7727,9 +7728,9 @@ } }, "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "18.19.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.18.tgz", - "integrity": "sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==", + "version": "18.19.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.21.tgz", + "integrity": "sha512-2Q2NeB6BmiTFQi4DHBzncSoq/cJMLDdhPaAoJFnFCyD9a8VPZRf7a1GAwp1Edb7ROaZc5Jz/tnZyL6EsWMRaqw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -7853,9 +7854,9 @@ } }, "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "18.19.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.18.tgz", - "integrity": "sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==", + "version": "18.19.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.21.tgz", + "integrity": "sha512-2Q2NeB6BmiTFQi4DHBzncSoq/cJMLDdhPaAoJFnFCyD9a8VPZRf7a1GAwp1Edb7ROaZc5Jz/tnZyL6EsWMRaqw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -7914,9 +7915,9 @@ } }, "node_modules/@storybook/core-webpack/node_modules/@types/node": { - "version": "18.19.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.18.tgz", - "integrity": "sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==", + "version": "18.19.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.21.tgz", + "integrity": "sha512-2Q2NeB6BmiTFQi4DHBzncSoq/cJMLDdhPaAoJFnFCyD9a8VPZRf7a1GAwp1Edb7ROaZc5Jz/tnZyL6EsWMRaqw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -8074,9 +8075,9 @@ } }, "node_modules/@storybook/preview": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.0.0-beta.5.tgz", - "integrity": "sha512-XB3vWKliNp8lUTbTucwUpZxi9qWud0VqI+fRrPYgrq0EtSeTrOOrftnui2iVO7IO7YY49wV2NVDkrsqRPuHgtw==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-8.0.0-rc.0.tgz", + "integrity": "sha512-B95HlvAFpeMVtOlNZLgFLYxL26zEq+BVOysmknNiaAN6y1pb9tHh89ZbradOryW1C3rx+Df5nOyS5RvF5SJoPw==", "dev": true, "funding": { "type": "opencollective", @@ -8170,15 +8171,15 @@ } }, "node_modules/@storybook/react-vite": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-8.0.0-beta.5.tgz", - "integrity": "sha512-vu65xYChrJ1MpDm/VD3iVasP5Xy3LTOp1Gy3hNp0WvZAe5J5pykRnnRUT3WRU+p9pQOHyCGAWa4lESzA4WyReA==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-8.0.0-rc.0.tgz", + "integrity": "sha512-CsxX+HURV2PvrPZN5q4sG0xav5kIiro7ywP5IdiEPLw8QHv+bca90LJ8P32XP8pCVmk1w0U7U4eY4kBltCZA0w==", "dev": true, "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "0.3.0", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "8.0.0-beta.5", - "@storybook/react": "8.0.0-beta.5", + "@storybook/builder-vite": "8.0.0-rc.0", + "@storybook/react": "8.0.0-rc.0", "magic-string": "^0.30.0", "react-docgen": "^7.0.0" }, @@ -8548,13 +8549,13 @@ } }, "node_modules/@storybook/react-vite/node_modules/@storybook/channels": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.0.0-beta.5.tgz", - "integrity": "sha512-si9QYJa9g0rt2yDLeGMWYNrw+ZVyqsg7upYU7Mm63JXXvt1647bqmtbZL/O6VGIN+30x97ZBInLPG7HWN2MyFw==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-8.0.0-rc.0.tgz", + "integrity": "sha512-Ey6en/5lGvK1yvXjLeJCKs0cIRklqHUuQdvGRJpL4daSHHuBrp4ULKysno8xaSEQAFKo36BiJLEGUh+iUSt4Zg==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.0.0-beta.5", - "@storybook/core-events": "8.0.0-beta.5", + "@storybook/client-logger": "8.0.0-rc.0", + "@storybook/core-events": "8.0.0-rc.0", "@storybook/global": "^5.0.0", "qs": "^6.10.0", "telejson": "^7.2.0", @@ -8566,9 +8567,9 @@ } }, "node_modules/@storybook/react-vite/node_modules/@storybook/client-logger": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.0.0-beta.5.tgz", - "integrity": "sha512-Fd1+oUd77tKrh8dAyac5VDeiLrP8toqTazpa6sMHtrEFWA9ozi99euaJyIg9FYZalJZQ5C0ZiQRtzAocZ3vFyA==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-8.0.0-rc.0.tgz", + "integrity": "sha512-XL5U1Y25PhuNkZOUQxCdXluhcOK3S7MbTaB7Ut/qJGU51smfoLfwB5NHWrAq3T557VnIRO3iMAEUves2+omVYw==", "dev": true, "dependencies": { "@storybook/global": "^5.0.0" @@ -8579,15 +8580,15 @@ } }, "node_modules/@storybook/react-vite/node_modules/@storybook/core-common": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.0.0-beta.5.tgz", - "integrity": "sha512-Ovgl7QBE96uKAGy6xFfwrsMiYCRFpGjpb3OspgR1UyBtr6f7OvaVLM68z/GyLpR5SJoKocoxaOIxo/shzc1Csw==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-8.0.0-rc.0.tgz", + "integrity": "sha512-+m6vzA8NjngEvqPAGmFws0Hkx7DbOWMSk0Q5OWPhSCP1Rcf1I2zXFovjymogk8Uj+96YQwUd1rhiiBuPnz7M9Q==", "dev": true, "dependencies": { - "@storybook/core-events": "8.0.0-beta.5", - "@storybook/csf-tools": "8.0.0-beta.5", - "@storybook/node-logger": "8.0.0-beta.5", - "@storybook/types": "8.0.0-beta.5", + "@storybook/core-events": "8.0.0-rc.0", + "@storybook/csf-tools": "8.0.0-rc.0", + "@storybook/node-logger": "8.0.0-rc.0", + "@storybook/types": "8.0.0-rc.0", "@yarnpkg/fslib": "2.10.3", "@yarnpkg/libzip": "2.3.0", "chalk": "^4.1.0", @@ -8619,9 +8620,9 @@ } }, "node_modules/@storybook/react-vite/node_modules/@storybook/core-events": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.0.0-beta.5.tgz", - "integrity": "sha512-auWqHioXmk35loC5ur1mj0rATXR8+a9/Z1RaepUnhL+0rrhr0iLViKadYqnDP+sNRMX58lxX1NMP69KwEybtxQ==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-8.0.0-rc.0.tgz", + "integrity": "sha512-Ih514I83jZt8FKoiQsYmlMw1HSPh5g1WnRHy3/Ajs5Li/BaVgEqxWU9MtXG2af0bHDsBsOpnCua2Oycewdk2Tw==", "dev": true, "dependencies": { "ts-dedent": "^2.0.0" @@ -8632,9 +8633,9 @@ } }, "node_modules/@storybook/react-vite/node_modules/@storybook/csf-tools": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.0.0-beta.5.tgz", - "integrity": "sha512-yyYZGDNH88TblAb/5f57kYFczz6zq4yGSciSw/oZWvty8lHnWPR0Pk1NMrIRawpHaHNFSYAirHaTwUYbN3NNcA==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-8.0.0-rc.0.tgz", + "integrity": "sha512-572k/phN/z50tD2hfUNJZBAhBMt8Gf8Mg6AhHD9fSGOma9Ne8/Dor2kekDrkDIWLua3QsFGVCyl7kSJlWim/MA==", "dev": true, "dependencies": { "@babel/generator": "^7.23.0", @@ -8642,7 +8643,7 @@ "@babel/traverse": "^7.23.2", "@babel/types": "^7.23.0", "@storybook/csf": "^0.1.2", - "@storybook/types": "8.0.0-beta.5", + "@storybook/types": "8.0.0-rc.0", "fs-extra": "^11.1.0", "recast": "^0.23.1", "ts-dedent": "^2.0.0" @@ -8653,14 +8654,14 @@ } }, "node_modules/@storybook/react-vite/node_modules/@storybook/docs-tools": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.0.0-beta.5.tgz", - "integrity": "sha512-YBgK7bYRkTTwQ/xiIqHcyp5kcFi2MEbeU+JciqM6aBe+BZbZNY/9Z4kkV9LVQVe6txarjKEo1lxwSFT2dNoDKQ==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-8.0.0-rc.0.tgz", + "integrity": "sha512-rKoWCBBh4l5OU/Rc5QOfdhrrrcxH7UqjESC2nc5Ng6OwHvWZ/8GEykr60lWLPDUZJge3V1Sph7S5o0bAlEB/kg==", "dev": true, "dependencies": { - "@storybook/core-common": "8.0.0-beta.5", - "@storybook/preview-api": "8.0.0-beta.5", - "@storybook/types": "8.0.0-beta.5", + "@storybook/core-common": "8.0.0-rc.0", + "@storybook/preview-api": "8.0.0-rc.0", + "@storybook/types": "8.0.0-rc.0", "@types/doctrine": "^0.0.3", "assert": "^2.1.0", "doctrine": "^3.0.0", @@ -8672,9 +8673,9 @@ } }, "node_modules/@storybook/react-vite/node_modules/@storybook/node-logger": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.0.0-beta.5.tgz", - "integrity": "sha512-ePFqxExROGHmu+PHOF63SvDlxAZ4Aph3ST+Lj7wszHrOnSGxzVCtgyPOj/kv1rkz0JCB/ySSWrOqd+DsECEbGw==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-8.0.0-rc.0.tgz", + "integrity": "sha512-KQ308nd9JG2AdIY0Zt+ZY2k1z2JDe7wSWv4gKf23FFAMq2ADvxBqrAsR0h/ebYa2CnXOvYGzsDAnVlbk8cM2bA==", "dev": true, "funding": { "type": "opencollective", @@ -8682,17 +8683,17 @@ } }, "node_modules/@storybook/react-vite/node_modules/@storybook/preview-api": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.0.0-beta.5.tgz", - "integrity": "sha512-XSb79qVGTDQtbq0+SYYs0rAv+Yma+n1dsCPIIgOVBfRWU9AK/7rbak8CsuH/0kjkmfJDzPg/DikBUwab4ZgwaQ==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.0.0-rc.0.tgz", + "integrity": "sha512-w80nL/FMA7Y18T0Diw5zkMXkMiGsXPs2Q/SPmjW9GHli5XHIPHD0AYWzw+LOf8vY/pjfPyKHxBkbX5PhEutE8g==", "dev": true, "dependencies": { - "@storybook/channels": "8.0.0-beta.5", - "@storybook/client-logger": "8.0.0-beta.5", - "@storybook/core-events": "8.0.0-beta.5", + "@storybook/channels": "8.0.0-rc.0", + "@storybook/client-logger": "8.0.0-rc.0", + "@storybook/core-events": "8.0.0-rc.0", "@storybook/csf": "^0.1.2", "@storybook/global": "^5.0.0", - "@storybook/types": "8.0.0-beta.5", + "@storybook/types": "8.0.0-rc.0", "@types/qs": "^6.9.5", "dequal": "^2.0.2", "lodash": "^4.17.21", @@ -8708,17 +8709,17 @@ } }, "node_modules/@storybook/react-vite/node_modules/@storybook/react": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.0.0-beta.5.tgz", - "integrity": "sha512-RjzCd9VK/PscDA1SanNSZoR3B4oOFTqxugQblZjNRexZHvF5EfGHL+4sAqUAAUaBxZw33yF3iRuRWFJJXepY+g==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.0.0-rc.0.tgz", + "integrity": "sha512-QU29WBkbq8y48R8Y9lJXLNCFbkc4BpN4l6a2Nx+a3DOjPiH4cH4RGqNMWn9ZDP6MOy5kXngMhdgjRHq1lhOxVA==", "dev": true, "dependencies": { - "@storybook/client-logger": "8.0.0-beta.5", - "@storybook/docs-tools": "8.0.0-beta.5", + "@storybook/client-logger": "8.0.0-rc.0", + "@storybook/docs-tools": "8.0.0-rc.0", "@storybook/global": "^5.0.0", - "@storybook/preview-api": "8.0.0-beta.5", - "@storybook/react-dom-shim": "8.0.0-beta.5", - "@storybook/types": "8.0.0-beta.5", + "@storybook/preview-api": "8.0.0-rc.0", + "@storybook/react-dom-shim": "8.0.0-rc.0", + "@storybook/types": "8.0.0-rc.0", "@types/escodegen": "^0.0.6", "@types/estree": "^0.0.51", "@types/node": "^18.0.0", @@ -8754,9 +8755,9 @@ } }, "node_modules/@storybook/react-vite/node_modules/@storybook/react-dom-shim": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.0.0-beta.5.tgz", - "integrity": "sha512-UVPwQ8/iS6epn3hVFDAzMFWBbXTzl2aOif129PP0nNQKD3qw+M1Yehzmzg2UqJk0q8wQzZZNLQQKilWhCGUpiA==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.0.0-rc.0.tgz", + "integrity": "sha512-e3i74zKAEUCwq9cnQi2L6XlGwzz5hdVXCg69UIj2mBxbXH1tm+9rXtSKCoWmimu8go1H2ls/WN0JIP0OOeK1dA==", "dev": true, "funding": { "type": "opencollective", @@ -8768,12 +8769,12 @@ } }, "node_modules/@storybook/react-vite/node_modules/@storybook/types": { - "version": "8.0.0-beta.5", - "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.0.0-beta.5.tgz", - "integrity": "sha512-wECly4ZckDJ0WJs/5R4qXQU4i+qeNFdUujc67zdS2DnXkHiQq6BnxSrh7HDTfDDmtC/+Ox8WKNGiNpIqwk1qMw==", + "version": "8.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-8.0.0-rc.0.tgz", + "integrity": "sha512-UCPBqk23zH4zgmgJ7e+BZMr+jt+PSeDiO5jI7prgLiWKTKKqeYvhqJFBmA0t4pt0Gv87k0A+90GXBNEnvP3FwA==", "dev": true, "dependencies": { - "@storybook/channels": "8.0.0-beta.5", + "@storybook/channels": "8.0.0-rc.0", "@types/express": "^4.7.0", "file-system-cache": "2.3.0" }, @@ -8783,9 +8784,9 @@ } }, "node_modules/@storybook/react-vite/node_modules/@types/node": { - "version": "18.19.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.18.tgz", - "integrity": "sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==", + "version": "18.19.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.21.tgz", + "integrity": "sha512-2Q2NeB6BmiTFQi4DHBzncSoq/cJMLDdhPaAoJFnFCyD9a8VPZRf7a1GAwp1Edb7ROaZc5Jz/tnZyL6EsWMRaqw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -8843,9 +8844,9 @@ } }, "node_modules/@storybook/react/node_modules/@types/node": { - "version": "18.19.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.18.tgz", - "integrity": "sha512-80CP7B8y4PzZF0GWx15/gVWRrB5y/bIjNI84NK3cmQJu0WZwvmj2WMA5LcofQFVfLqqCSp545+U2LsrVzX36Zg==", + "version": "18.19.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.21.tgz", + "integrity": "sha512-2Q2NeB6BmiTFQi4DHBzncSoq/cJMLDdhPaAoJFnFCyD9a8VPZRf7a1GAwp1Edb7ROaZc5Jz/tnZyL6EsWMRaqw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -9430,9 +9431,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.11.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz", - "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==", + "version": "20.11.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", + "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -9467,9 +9468,9 @@ "devOptional": true }, "node_modules/@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "version": "6.9.12", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.12.tgz", + "integrity": "sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==", "dev": true }, "node_modules/@types/range-parser": { @@ -9479,9 +9480,9 @@ "dev": true }, "node_modules/@types/react": { - "version": "18.2.60", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.60.tgz", - "integrity": "sha512-dfiPj9+k20jJrLGOu9Nf6eqxm2EyJRrq2NvwOFsfbb7sFExZ9WELPs67UImHj3Ayxg8ruTtKtNnbjaF8olPq0A==", + "version": "18.2.61", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.61.tgz", + "integrity": "sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA==", "devOptional": true, "dependencies": { "@types/prop-types": "*", @@ -10737,12 +10738,12 @@ } }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -10750,7 +10751,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -11062,9 +11063,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001589", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz", - "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==", + "version": "1.0.30001591", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz", + "integrity": "sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==", "dev": true, "funding": [ { @@ -12385,9 +12386,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.681", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.681.tgz", - "integrity": "sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg==", + "version": "1.4.689", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.689.tgz", + "integrity": "sha512-GatzRKnGPS1go29ep25reM94xxd1Wj8ritU0yRhCJ/tr1Bg8gKnm6R9O/yPOhGQBoLMZ9ezfrpghNaTw97C/PQ==", "dev": true }, "node_modules/emittery": { @@ -12425,9 +12426,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz", + "integrity": "sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -12477,18 +12478,18 @@ } }, "node_modules/es-abstract": { - "version": "1.22.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz", - "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==", + "version": "1.22.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz", + "integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.6", + "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.2", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", @@ -12496,15 +12497,15 @@ "globalthis": "^1.0.3", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.1", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "hasown": "^2.0.1", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", @@ -12517,10 +12518,10 @@ "string.prototype.trim": "^1.2.8", "string.prototype.trimend": "^1.0.7", "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.1", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.5", "unbox-primitive": "^1.0.2", "which-typed-array": "^1.1.14" }, @@ -12877,9 +12878,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -13888,13 +13889,13 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.18.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz", + "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.5.0", @@ -15177,9 +15178,9 @@ } }, "node_modules/imask": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/imask/-/imask-7.4.0.tgz", - "integrity": "sha512-fU6mCo5YiTeDI8aVreuOKLOWxXIrRVnuQhZQXbjhwHxQb3GOQyCtlDGMyHxu2gq//LnKDxTwDBq1teRHmkzA3Q==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/imask/-/imask-7.5.0.tgz", + "integrity": "sha512-eoTEnw67KAamB1zsiYtU35s0Fj1XYZ8mN2q3ZDGO4ot4FtPmBpw9S6kOTj0kaOILdsEA6ZhNtH2TAMXe/NChmQ==", "dependencies": { "@babel/runtime-corejs3": "^7.23.9" }, @@ -15989,9 +15990,9 @@ "dev": true }, "node_modules/isbot": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.0.tgz", - "integrity": "sha512-cWTMpcI8G0BjxVg/UH+fMF16yYxPup7QL7v7FuJqCFOTuB0yuLKxonWyEDiKG/DC9LIxEvy0COQkMDNkxpY0jQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.1.tgz", + "integrity": "sha512-l4ArJhXWgEahbPEY5nVNh3Ojr0s4Eg2evSAmEQ6QkiFIwdsHg2wThzCMs/kcqgNc1D4HxwEg3+FEYP+bgAiplA==", "engines": { "node": ">=18" } @@ -17194,29 +17195,29 @@ } }, "node_modules/lefthook": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-1.6.2.tgz", - "integrity": "sha512-QLDCh1hqfTiO1/Rsa/bZNznhMdEnAdOwnLfivTiZbrrPIVn4MrIMZJR+o1XyEe4a9+rXWMebbSMox4PDLaKwIg==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-1.6.4.tgz", + "integrity": "sha512-to9j+24a65g6YR1mmwu+GaCm08oZGalc1rIHp4xJ6kMtYFCQO533UNLQaFcryNkcXeW+ZOc6MNY1eoQtd7/PQQ==", "dev": true, "hasInstallScript": true, "bin": { "lefthook": "bin/index.js" }, "optionalDependencies": { - "lefthook-darwin-arm64": "1.6.2", - "lefthook-darwin-x64": "1.6.2", - "lefthook-freebsd-arm64": "1.6.2", - "lefthook-freebsd-x64": "1.6.2", - "lefthook-linux-arm64": "1.6.2", - "lefthook-linux-x64": "1.6.2", - "lefthook-windows-arm64": "1.6.2", - "lefthook-windows-x64": "1.6.2" + "lefthook-darwin-arm64": "1.6.4", + "lefthook-darwin-x64": "1.6.4", + "lefthook-freebsd-arm64": "1.6.4", + "lefthook-freebsd-x64": "1.6.4", + "lefthook-linux-arm64": "1.6.4", + "lefthook-linux-x64": "1.6.4", + "lefthook-windows-arm64": "1.6.4", + "lefthook-windows-x64": "1.6.4" } }, "node_modules/lefthook-darwin-arm64": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.6.2.tgz", - "integrity": "sha512-0q9WsTe6hSw670K+R7O+ZNkjiGCYVPX8gFylSn6i3WQlL2ZHG1wTIBkZOn6SJUQJHxdQXBNXtQeQiz30YYEIZg==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.6.4.tgz", + "integrity": "sha512-dXIQXr02718sqJu8GwIFewEoFqxMReINy2nzVlx9X9pLEKylgIJ15K/hI3gMziZycAGaecQaWVOUh/yEKXM1zQ==", "cpu": [ "arm64" ], @@ -17227,9 +17228,9 @@ ] }, "node_modules/lefthook-darwin-x64": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-1.6.2.tgz", - "integrity": "sha512-55PEfD/6dWgPgbq5a8qqYyIEu6Z3+sEUZzeatKjCXcf9qswPT/0i0zN2ka0KjkFtIDtLVHR36ZkaZumbo0imdA==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-1.6.4.tgz", + "integrity": "sha512-hPqoOPxpJFEKei7SyCbJUGXcz9u8Ir0GHQYkKKQA/8/dhkMOCQ91YbpeNozMnXcvFYcYaiDr+NB0bOZxn9DzAA==", "cpu": [ "x64" ], @@ -17240,9 +17241,9 @@ ] }, "node_modules/lefthook-freebsd-arm64": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.6.2.tgz", - "integrity": "sha512-kCnhB+QqhlzrK8uxj7t/JcpEBuDTLQxUZQQsy/zCTiJlHIF1w2KRL5Dsf2X3X1TdRNQy9Wam0WB13i1i9mTdWw==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.6.4.tgz", + "integrity": "sha512-9q/NBdZ41UL86AwGomW4AgIXviZZzZ1x8pWaWqwDeMc+l/JKwqEWPTbb2TVHzlk0rabZ2LEOLhx2RwYQXa9wcA==", "cpu": [ "arm64" ], @@ -17253,9 +17254,9 @@ ] }, "node_modules/lefthook-freebsd-x64": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.6.2.tgz", - "integrity": "sha512-dsYfgteDjJgAc+q59/Fwh69hH1oj+3haSpX2qBP28E6I2d2ozxJ97aEbhrOFLjkx/VEVzwDGscbOET5xtYpkWw==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.6.4.tgz", + "integrity": "sha512-I4pJITBFf83lMxVEBgLkT3DF0uq0yo3I8YuB74dYOYzPhnNDr9IOp7CTT7KU7+hlMRRIWSvuup/ODsHP+J5Tfg==", "cpu": [ "x64" ], @@ -17266,9 +17267,9 @@ ] }, "node_modules/lefthook-linux-arm64": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-1.6.2.tgz", - "integrity": "sha512-+TvJfJ1YrxJy5Psgn2SlKz7jy0H2B137ceknCkrD5wMxs0MJ2aHf3uAgXXyOqJiJ514REH7cq1RUgghxrIHGTg==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-1.6.4.tgz", + "integrity": "sha512-Eh1rDmmH7IJbw5Wky+wWd6ZWPkL/mqJqts2BT/3m9/27GADPLaAVV8PMmjPbow8B+4leKdqM9xSr4L9Kte6/mA==", "cpu": [ "arm64" ], @@ -17279,9 +17280,9 @@ ] }, "node_modules/lefthook-linux-x64": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-1.6.2.tgz", - "integrity": "sha512-KJyL6ZXObAMNiRuakEvlfREiiIGdLPJYqf6LMwmxbaWzE+KQFKE877SHCxeGNZl7FfE+GbipHt7onTdoL1T2Hw==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-1.6.4.tgz", + "integrity": "sha512-prsTjZ2BwX21+Xk0/KVOi2OcZtFRtPqPbQ/nnrQNpFriDkMqp8s1uIywrAGtyG+LJ7YCPYVhgO5pZOQqp4zkEA==", "cpu": [ "x64" ], @@ -17292,9 +17293,9 @@ ] }, "node_modules/lefthook-windows-arm64": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-1.6.2.tgz", - "integrity": "sha512-l7ljwsl0fryQRWTehlu/HCjSOaytV/a8fY5APp1R+NNKZsTzyEBhnf+s88wVbFWPE2ZpUHQ6sAeurxVlX+VMhQ==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-1.6.4.tgz", + "integrity": "sha512-bJ+rkMMjJkKhRaCwSLX+5KaJgPoj5jIVBee8jOAXB1nPTlOCj6QJqeGqTLISr098SDhhEsmTbJoa+HyIBbs/ow==", "cpu": [ "arm64" ], @@ -17305,9 +17306,9 @@ ] }, "node_modules/lefthook-windows-x64": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-1.6.2.tgz", - "integrity": "sha512-gxr/zeoGK/gLJUsjS5DKJz9pDGQFkAQFvPC7qmbFR4lo7kUShlu8HMSCAXG/+VR1nxfdbIdUDLmF8d8SkJ64lw==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-1.6.4.tgz", + "integrity": "sha512-XMA4mN/l5fK0FsTCKX3KywJv2Zcb9ZZ8hDV4dnjI7X1/DkLkByIOZesZN/8p3Oxbzdc9dOFKozo8RiLUsV19Og==", "cpu": [ "x64" ], @@ -19385,13 +19386,13 @@ } }, "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -19955,12 +19956,12 @@ } }, "node_modules/playwright": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.2.tgz", - "integrity": "sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A==", + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.42.0.tgz", + "integrity": "sha512-Ko7YRUgj5xBHbntrgt4EIw/nE//XBHOKVKnBjO1KuZkmkhlbgyggTe5s9hjqQ1LpN+Xg+kHsQyt5Pa0Bw5XpvQ==", "dev": true, "dependencies": { - "playwright-core": "1.41.2" + "playwright-core": "1.42.0" }, "bin": { "playwright": "cli.js" @@ -19973,9 +19974,9 @@ } }, "node_modules/playwright-core": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.2.tgz", - "integrity": "sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==", + "version": "1.42.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.42.0.tgz", + "integrity": "sha512-0HD9y8qEVlcbsAjdpBaFjmaTHf+1FeIddy8VJLeiqwhcNqGCBe4Wp2e8knpqiYbzxtxarxiXyNDw2cG8sCaNMQ==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -20253,9 +20254,9 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/posthog-js": { - "version": "1.108.4", - "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.108.4.tgz", - "integrity": "sha512-dlpx9VXBVv6zT5p1T33JNOqklE3A/5umqTkPH5L1eZkCIhVu4GU6QGKXGaUS7T0teOZxFJX/jqq2kImb2mLWZQ==", + "version": "1.110.0", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.110.0.tgz", + "integrity": "sha512-A5d0vYKLjmVtwF2uPxoFidDkVC6bTQUebm4s1LgKDIE+hHVfSmhbZ4pHqvwWmeJXdQHoQdvzG5Ve4STiiizBGQ==", "dependencies": { "fflate": "^0.4.8", "preact": "^10.19.3" @@ -20705,9 +20706,9 @@ ] }, "node_modules/quicktype-core": { - "version": "23.0.104", - "resolved": "https://registry.npmjs.org/quicktype-core/-/quicktype-core-23.0.104.tgz", - "integrity": "sha512-Y/9/hO0w4lYbacxxWdSyBhfZgs2kXELR21tawGFz7MICgxKX9KaPGLH3YQEd3NsX7KNZKdWPZdxkImgZL0RnQw==", + "version": "23.0.105", + "resolved": "https://registry.npmjs.org/quicktype-core/-/quicktype-core-23.0.105.tgz", + "integrity": "sha512-amxAkFPUMfvU5uzmIAwdCFo30bPj3TrSnFq3dFoIgmcltPPMdOxFzcwHG9DCHveR4u6Qj0DRWj7IQ4e/1TEJeA==", "dependencies": { "@glideapps/ts-necessities": "2.1.3", "@types/urijs": "^1.19.19", @@ -20791,9 +20792,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -20937,11 +20938,11 @@ "dev": true }, "node_modules/react-imask": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/react-imask/-/react-imask-7.4.0.tgz", - "integrity": "sha512-U7O2IhIKIGF0ch16xBinwbWGfsgeDyM3KcftD8/bWLuES+KQOjv8wCjX2QZNiAqsZ3FgSembaJmqAN8XlB5LbA==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/react-imask/-/react-imask-7.5.0.tgz", + "integrity": "sha512-yWExhHphDmNaHvmOsYR+5QcludeBdYk6bXyo8kouIJFAub5sF+O0kLPVupg2yhd7EfTqjLswFZ/tqY1AhKnd9Q==", "dependencies": { - "imask": "^7.4.0", + "imask": "^7.5.0", "prop-types": "^15.8.1" }, "engines": { @@ -21013,11 +21014,11 @@ } }, "node_modules/react-router": { - "version": "6.22.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.1.tgz", - "integrity": "sha512-0pdoRGwLtemnJqn1K0XHUbnKiX0S4X8CgvVVmHGOWmofESj31msHo/1YiqcJWK7Wxfq2a4uvvtS01KAQyWK/CQ==", + "version": "6.22.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.2.tgz", + "integrity": "sha512-YD3Dzprzpcq+tBMHBS822tCjnWD3iIZbTeSXMY9LPSG541EfoBGyZ3bS25KEnaZjLcmQpw2AVLkFyfgXY8uvcw==", "dependencies": { - "@remix-run/router": "1.15.1" + "@remix-run/router": "1.15.2" }, "engines": { "node": ">=14.0.0" @@ -21027,12 +21028,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.22.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.1.tgz", - "integrity": "sha512-iwMyyyrbL7zkKY7MRjOVRy+TMnS/OPusaFVxM2P11x9dzSzGmLsebkCvYirGq0DWB9K9hOspHYYtDz33gE5Duw==", + "version": "6.22.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.2.tgz", + "integrity": "sha512-WgqxD2qySEIBPZ3w0sHH+PUAiamDeszls9tzqMPBDA1YYVucTBXLU7+gtRfcSnhe92A3glPnvSxK2dhNoAVOIQ==", "dependencies": { - "@remix-run/router": "1.15.1", - "react-router": "6.22.1" + "@remix-run/router": "1.15.2", + "react-router": "6.22.2" }, "engines": { "node": ">=14.0.0" @@ -21729,9 +21730,9 @@ } }, "node_modules/remeda": { - "version": "1.44.1", - "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.44.1.tgz", - "integrity": "sha512-IzUxPZbhLIq7duT2xEjLD5s+lA+J5Qq12dDmgmW8PsQAKsCU5rdydTZEYiiklgg53Lo363/q99dOxq4hnsaJ7A==" + "version": "1.45.2", + "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.45.2.tgz", + "integrity": "sha512-gTdjazj1ZBgAj3xhZ76J/um5hyTP7yy5Odl1Z5/idQZ4Q5SmcuHjkzYyCZ/Kh9EN1V3wlHeFQB9WWV9BCfyM3A==" }, "node_modules/remix-validated-form": { "version": "5.1.5", @@ -22265,11 +22266,11 @@ } }, "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" diff --git a/package.json b/package.json index be2eabb26..e9c558a71 100644 --- a/package.json +++ b/package.json @@ -39,32 +39,32 @@ "@digitalservice4germany/style-dictionary": "^2.0.0", "@digitalservicebund/icons": "^1.1.1", "@react-pdf/renderer": "^3.3.8", - "@remix-run/express": "^2.7.2", - "@remix-run/node": "^2.7.2", - "@remix-run/react": "^2.7.2", - "@remix-run/serve": "^2.7.2", + "@remix-run/express": "^2.8.0", + "@remix-run/node": "^2.8.0", + "@remix-run/react": "^2.8.0", + "@remix-run/serve": "^2.8.0", "@remix-validated-form/with-zod": "^2.0.7", - "@sentry/remix": "^7.102.1", + "@sentry/remix": "^7.104.0", "@xstate/graph": "^2.0.0-beta.6", "axios": "^1.6.7", "classnames": "^2.5.1", "dotenv": "^16.4.5", - "express": "^4.18.2", + "express": "^4.18.3", "fflate": "^0.8.2", "ioredis": "^5.3.2", - "isbot": "^5.1.0", + "isbot": "^5.1.1", "lodash": "^4.17.21", "marked": "^12.0.0", "mustache": "^4.2.0", "pdf-lib": "^1.17.1", - "posthog-js": "^1.108.4", + "posthog-js": "^1.110.0", "posthog-node": "^3.6.3", - "quicktype-core": "^23.0.104", + "quicktype-core": "^23.0.105", "react": "^18.2.0", "react-collapsed": "^4.1.2", "react-dom": "^18.2.0", "react-dropzone-esm": "^15.0.1", - "react-imask": "^7.4.0", + "react-imask": "^7.5.0", "remix-validated-form": "^5.1.5", "tiny-invariant": "^1.3.3", "validator": "^13.11.0", @@ -74,10 +74,10 @@ "devDependencies": { "@axe-core/playwright": "^4.8.5", "@faker-js/faker": "^8.4.1", - "@playwright/test": "^1.41.2", - "@remix-run/dev": "^2.7.2", - "@remix-run/eslint-config": "^2.7.2", - "@remix-run/testing": "^2.7.2", + "@playwright/test": "^1.42.0", + "@remix-run/dev": "^2.8.0", + "@remix-run/eslint-config": "^2.8.0", + "@remix-run/testing": "^2.8.0", "@storybook/addon-a11y": "^7.6.17", "@storybook/addon-essentials": "^7.6.17", "@storybook/addon-storyshots": "^7.6.17", @@ -88,8 +88,8 @@ "@types/follow-redirects": "^1.14.4", "@types/jest": "^29.5.12", "@types/mustache": "^4.2.5", - "@types/node": "^20.11.20", - "@types/react": "^18.2.60", + "@types/node": "^20.11.24", + "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "@types/validator": "^13.11.9", "autoprefixer": "^10.4.17", @@ -101,7 +101,7 @@ "follow-redirects": "^1.15.5", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", - "lefthook": "^1.6.2", + "lefthook": "^1.6.4", "p-map": "^7.0.1", "postcss": "^8.4.35", "prettier": "^3.2.5",