diff --git a/.github/workflows/pizza-teardown-manual.yml b/.github/workflows/pizza-teardown-manual.yml index 524538c82b..841c3b4ede 100644 --- a/.github/workflows/pizza-teardown-manual.yml +++ b/.github/workflows/pizza-teardown-manual.yml @@ -4,7 +4,7 @@ on: inputs: pull_request_id: required: true - type: integer + type: number description: Pull Request number which should have its pizza destroyed env: @@ -20,4 +20,8 @@ jobs: action: destroy api_key: ${{ secrets.VULTR_API_KEY }} domain: ${{ env.DOMAIN }} - pullrequest_id: ${{ github.event.inputs.pull_request_id }} + os_type: alpine + plan: vc2-1c-1gb + pull_request_id: ${{ github.event.inputs.pull_request_id }} + region: lhr + tag: manual-teardown diff --git a/api.planx.uk/modules/admin/session/summary.ts b/api.planx.uk/modules/admin/session/summary.ts index 9139719bc5..d74b93038d 100644 --- a/api.planx.uk/modules/admin/session/summary.ts +++ b/api.planx.uk/modules/admin/session/summary.ts @@ -2,17 +2,12 @@ import { GovUKPayment, PaymentRequest, Session, + Team, } from "@opensystemslab/planx-core/types"; import { NextFunction, Request, Response } from "express"; import { gql } from "graphql-request"; -import { - Breadcrumb, - Flow, - LowCalSession, - Passport, - Team, -} from "../../../types"; +import { Breadcrumb, Flow, LowCalSession, Passport } from "../../../types"; import { $api } from "../../../client"; /** diff --git a/api.planx.uk/modules/flows/moveFlow/service.ts b/api.planx.uk/modules/flows/moveFlow/service.ts index e77a811422..6c05c62c40 100644 --- a/api.planx.uk/modules/flows/moveFlow/service.ts +++ b/api.planx.uk/modules/flows/moveFlow/service.ts @@ -1,6 +1,7 @@ import { gql } from "graphql-request"; -import { Flow, Team } from "../../../types"; +import { Flow } from "../../../types"; import { $public, getClient } from "../../../client"; +import { Team } from "@opensystemslab/planx-core/types"; export const moveFlow = async (flowId: string, teamSlug: string) => { const team = await $public.team.getBySlug(teamSlug); diff --git a/api.planx.uk/modules/pay/service/inviteToPay/createPaymentSendEvents.ts b/api.planx.uk/modules/pay/service/inviteToPay/createPaymentSendEvents.ts index d9020df1c9..2c67cd6027 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/createPaymentSendEvents.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/createPaymentSendEvents.ts @@ -1,4 +1,4 @@ -import { ComponentType } from "@opensystemslab/planx-core/types"; +import { ComponentType, Team } from "@opensystemslab/planx-core/types"; import { NextFunction, Request, Response } from "express"; import { gql } from "graphql-request"; import { @@ -7,7 +7,7 @@ import { } from "../../../../lib/hasura/metadata"; import { $api, $public } from "../../../../client"; import { getMostRecentPublishedFlow } from "../../../../helpers"; -import { Flow, Node, Team } from "../../../../types"; +import { Flow, Node } from "../../../../types"; enum Destination { BOPS = "bops", diff --git a/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts b/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts index 8e3801ec99..92e30223d7 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/sendConfirmationEmail.ts @@ -1,7 +1,6 @@ import { $public, $api } from "../../../../client"; import { sendEmail } from "../../../../lib/notify"; import { gql } from "graphql-request"; -import { convertSlugToName } from "../../../saveAndReturn/service/utils"; import type { AgentAndPayeeSubmissionNotifyConfig } from "../../../../types"; export async function sendAgentAndPayeeConfirmationEmail(sessionId: string) { @@ -47,7 +46,12 @@ async function getDataForPayeeAndAgentEmails( flow { slug team { - notifyPersonalisation: notify_personalisation + notifyPersonalisation: team_settings { + helpEmail: help_email + helpPhone: help_phone + emailReplyToId: email_reply_to_id + helpOpeningHours: help_opening_hours + } } } paymentRequests: payment_requests( diff --git a/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts b/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts index 18293e7d02..14dd6cea5c 100644 --- a/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts +++ b/api.planx.uk/modules/pay/service/inviteToPay/sendPaymentEmail.ts @@ -1,7 +1,6 @@ import { gql } from "graphql-request"; import { calculateExpiryDate, - convertSlugToName, getServiceLink, } from "../../../saveAndReturn/service/utils"; import { @@ -10,8 +9,7 @@ import { sendEmail, } from "../../../../lib/notify"; import { InviteToPayNotifyConfig } from "../../../../types"; -import { Team } from "../../../../types"; -import type { PaymentRequest } from "@opensystemslab/planx-core/types"; +import type { PaymentRequest, Team } from "@opensystemslab/planx-core/types"; import { $public } from "../../../../client"; interface SessionDetails { @@ -76,7 +74,7 @@ const validatePaymentRequest = async ( name slug domain - notifyPersonalisation: notify_personalisation + settings: team_settings } } } @@ -109,28 +107,38 @@ const validatePaymentRequest = async ( const getInviteToPayNotifyConfig = async ( session: SessionDetails, paymentRequest: PaymentRequest, -): Promise => ({ - personalisation: { - ...session.flow.team.notifyPersonalisation, - sessionId: paymentRequest.sessionId, - paymentRequestId: paymentRequest.id, - payeeEmail: paymentRequest.payeeEmail, - payeeName: paymentRequest.payeeName, - agentName: paymentRequest.applicantName, - address: ( - paymentRequest.sessionPreviewData?._address as Record<"title", string> - ).title, - fee: getFee(paymentRequest), - projectType: - (await $public.formatRawProjectTypes( - paymentRequest.sessionPreviewData?.["proposal.projectType"] as string[], - )) || "Project type not submitted", - serviceName: session.flow.name, - serviceLink: getServiceLink(session.flow.team, session.flow.slug), - expiryDate: calculateExpiryDate(paymentRequest.createdAt), - paymentLink: getPaymentLink(session, paymentRequest), - }, -}); +): Promise => { + const flow = session.flow; + const { settings } = session.flow.team; + + return { + personalisation: { + helpEmail: settings.helpEmail, + helpPhone: settings.helpPhone, + emailReplyToId: settings.emailReplyToId, + helpOpeningHours: settings.helpOpeningHours, + sessionId: paymentRequest.sessionId, + paymentRequestId: paymentRequest.id, + payeeEmail: paymentRequest.payeeEmail, + payeeName: paymentRequest.payeeName, + agentName: paymentRequest.applicantName, + address: ( + paymentRequest.sessionPreviewData?._address as Record<"title", string> + ).title, + fee: getFee(paymentRequest), + projectType: + (await $public.formatRawProjectTypes( + paymentRequest.sessionPreviewData?.[ + "proposal.projectType" + ] as string[], + )) || "Project type not submitted", + serviceName: session.flow.name, + serviceLink: getServiceLink(flow.team, flow.slug), + expiryDate: calculateExpiryDate(paymentRequest.createdAt), + paymentLink: getPaymentLink(session, paymentRequest), + }, + }; +}; const getFee = (paymentRequest: PaymentRequest) => { const toPounds = (pence: number) => pence / 100; diff --git a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts index 18d935ca83..1c57226fdb 100644 --- a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts +++ b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.test.ts @@ -1,4 +1,4 @@ -import { LowCalSession, Team } from "../../../types"; +import { LowCalSession } from "../../../types"; import supertest from "supertest"; import app from "../../../server"; import { queryMock } from "../../../tests/graphqlQueryMock"; @@ -8,6 +8,7 @@ import { } from "../../../tests/mocks/saveAndReturnMocks"; import { buildContentFromSessions } from "./resumeApplication"; import { PartialDeep } from "type-fest"; +import { Team } from "@opensystemslab/planx-core/types"; const ENDPOINT = "/resume-application"; const TEST_EMAIL = "simulate-delivered@notifications.service.gov.uk"; @@ -54,7 +55,7 @@ describe("buildContentFromSessions function", () => { }, ]; - const result = `Service: Apply for a lawful development certificate + const result = `Service: Apply for a Lawful Development Certificate Address: 1 High Street Project type: New office premises Expiry Date: 29 May 2026 @@ -124,15 +125,15 @@ describe("buildContentFromSessions function", () => { }, }, ]; - const result = `Service: Apply for a lawful development certificate + const result = `Service: Apply for a Lawful Development Certificate Address: 1 High Street Project type: New office premises Expiry Date: 29 May 2026 - Link: example.com/team/apply-for-a-lawful-development-certificate/published?sessionId=123\n\nService: Apply for a lawful development certificate + Link: example.com/team/apply-for-a-lawful-development-certificate/published?sessionId=123\n\nService: Apply for a Lawful Development Certificate Address: 2 High Street Project type: New office premises Expiry Date: 29 May 2026 - Link: example.com/team/apply-for-a-lawful-development-certificate/published?sessionId=456\n\nService: Apply for a lawful development certificate + Link: example.com/team/apply-for-a-lawful-development-certificate/published?sessionId=456\n\nService: Apply for a Lawful Development Certificate Address: 3 High Street Project type: New office premises Expiry Date: 29 May 2026 @@ -184,7 +185,7 @@ describe("buildContentFromSessions function", () => { }, }, ]; - const result = `Service: Apply for a lawful development certificate + const result = `Service: Apply for a Lawful Development Certificate Address: 1 High Street Project type: New office premises Expiry Date: 29 May 2026 @@ -217,7 +218,7 @@ describe("buildContentFromSessions function", () => { }, ]; - const result = `Service: Apply for a lawful development certificate + const result = `Service: Apply for a Lawful Development Certificate Address: Address not submitted Project type: New office premises Expiry Date: 29 May 2026 @@ -252,7 +253,7 @@ describe("buildContentFromSessions function", () => { }, ]; - const result = `Service: Apply for a lawful development certificate + const result = `Service: Apply for a Lawful Development Certificate Address: 1 High Street Project type: Project type not submitted Expiry Date: 29 May 2026 diff --git a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts index 696db69174..5e0c877c0b 100644 --- a/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts +++ b/api.planx.uk/modules/saveAndReturn/service/resumeApplication.ts @@ -1,15 +1,10 @@ -import type { SiteAddress } from "@opensystemslab/planx-core/types"; +import type { SiteAddress, Team } from "@opensystemslab/planx-core/types"; import { differenceInDays } from "date-fns"; import { gql } from "graphql-request"; import { $api, $public } from "../../../client"; import { sendEmail } from "../../../lib/notify"; -import { LowCalSession, Team } from "../../../types"; -import { - DAYS_UNTIL_EXPIRY, - calculateExpiryDate, - convertSlugToName, - getResumeLink, -} from "./utils"; +import { LowCalSession } from "../../../types"; +import { DAYS_UNTIL_EXPIRY, calculateExpiryDate, getResumeLink } from "./utils"; /** * Send a "Resume" email to an applicant which list all open applications for a given council (team) @@ -22,7 +17,7 @@ const resumeApplication = async (teamSlug: string, email: string) => { const config = { personalisation: await getPersonalisation(sessions, team), reference: null, - emailReplyToId: team.notifyPersonalisation.emailReplyToId, + emailReplyToId: team.settings.emailReplyToId, }; const response = await sendEmail("resume", email, config); return response; @@ -69,7 +64,7 @@ const validateRequest = async ( teams(where: { slug: { _eq: $teamSlug } }) { slug name - notifyPersonalisation: notify_personalisation + settings: team_settings domain } } @@ -98,7 +93,10 @@ const getPersonalisation = async (sessions: LowCalSession[], team: Team) => { return { teamName: team.name, content: await buildContentFromSessions(sessions, team), - ...team.notifyPersonalisation, + helpEmail: team.settings.helpEmail, + helpPhone: team.settings.helpPhone, + helpOpeningHours: team.settings.helpOpeningHours, + emailReplyToId: team.settings.emailReplyToId, }; }; @@ -111,7 +109,6 @@ const buildContentFromSessions = async ( team: Team, ): Promise => { const contentBuilder = async (session: LowCalSession) => { - const service = convertSlugToName(session.flow.slug); const address: SiteAddress | undefined = session.data?.passport?.data?._address; const addressLine = address?.single_line_address || address?.title; @@ -126,7 +123,7 @@ const buildContentFromSessions = async ( const sessionAge = differenceInDays(today, new Date(session.created_at)); if (sessionAge < DAYS_UNTIL_EXPIRY) - return `Service: ${service} + return `Service: ${session.flow.name} Address: ${addressLine || "Address not submitted"} Project type: ${projectType || "Project type not submitted"} Expiry Date: ${expiryDate} diff --git a/api.planx.uk/modules/saveAndReturn/service/utils.test.ts b/api.planx.uk/modules/saveAndReturn/service/utils.test.ts index 4e8b7b21a4..6cf33d0649 100644 --- a/api.planx.uk/modules/saveAndReturn/service/utils.test.ts +++ b/api.planx.uk/modules/saveAndReturn/service/utils.test.ts @@ -1,25 +1,12 @@ +import { Team } from "@opensystemslab/planx-core/types"; import { queryMock } from "../../../tests/graphqlQueryMock"; -import { LowCalSession, LowCalSessionData, Team } from "../../../types"; +import { LowCalSession, LowCalSessionData } from "../../../types"; import { - convertSlugToName, getResumeLink, getSessionDetails, setupEmailEventTriggers, } from "./utils"; -describe("convertSlugToName util function", () => { - it("should return the correct value", () => { - const testData = [ - ["open-systems-lab", "Open systems lab"], - ["lambeth", "Lambeth"], - ]; - - testData.forEach(([slug, name]) => { - expect(convertSlugToName(slug)).toEqual(name); - }); - }); -}); - describe("getResumeLink util function", () => { it("should return the correct value for a custom domain", () => { const session = { diff --git a/api.planx.uk/modules/saveAndReturn/service/utils.ts b/api.planx.uk/modules/saveAndReturn/service/utils.ts index 6184b068c3..baa416371f 100644 --- a/api.planx.uk/modules/saveAndReturn/service/utils.ts +++ b/api.planx.uk/modules/saveAndReturn/service/utils.ts @@ -1,20 +1,13 @@ -import { SiteAddress } from "@opensystemslab/planx-core/types"; +import { SiteAddress, Team } from "@opensystemslab/planx-core/types"; import { format, addDays } from "date-fns"; import { gql } from "graphql-request"; -import { LowCalSession, Team } from "../../../types"; +import { LowCalSession } from "../../../types"; import { Template, getClientForTemplate, sendEmail } from "../../../lib/notify"; import { $api, $public } from "../../../client"; const DAYS_UNTIL_EXPIRY = 28; const REMINDER_DAYS_FROM_EXPIRY = [7, 1]; -/** - * Converts a flow's slug to a pretty name - * XXX: This relies on pretty names not having dashes in them, which may not always be true (e.g. Na h-Eileanan Siar, Stoke-on-Trent) - */ -const convertSlugToName = (slug: string): string => - slug[0].toUpperCase() + slug.substring(1).replaceAll("-", " "); - /** * Build the magic link which will be sent to users via email to continue their application */ @@ -66,7 +59,7 @@ const sendSingleApplicationEmail = async ({ const config = { personalisation: getPersonalisation(session, flowSlug, flowName, team), reference: null, - emailReplyToId: team.notifyPersonalisation.emailReplyToId, + emailReplyToId: team.settings.emailReplyToId, }; const firstSave = !session.hasUserSaved; if (firstSave && !session.submittedAt) @@ -104,7 +97,7 @@ const validateSingleSessionRequest = async ( team { name slug - notifyPersonalisation: notify_personalisation + settings: team_settings domain } } @@ -183,7 +176,10 @@ const getPersonalisation = ( serviceName: flowName, teamName: team.name, sessionId: session.id, - ...team.notifyPersonalisation, + helpEmail: team.settings.helpEmail, + helpPhone: team.settings.helpPhone, + helpOpeningHours: team.settings.helpOpeningHours, + emailReplyToId: team.settings.emailReplyToId, ...session, }; }; @@ -276,7 +272,6 @@ export const setupEmailEventTriggers = async (sessionId: string) => { export { getSaveAndReturnPublicHeaders, - convertSlugToName, getResumeLink, sendSingleApplicationEmail, markSessionAsSubmitted, diff --git a/api.planx.uk/modules/send/email/index.test.ts b/api.planx.uk/modules/send/email/index.test.ts index ff6c89e263..c0b2cae2f1 100644 --- a/api.planx.uk/modules/send/email/index.test.ts +++ b/api.planx.uk/modules/send/email/index.test.ts @@ -50,7 +50,7 @@ describe(`sending an application by email to a planning office`, () => { teams: [ { sendToEmail: "planning.office.example@council.gov.uk", - notifyPersonalisation: { emailReplyToId: "abc123" }, + settings: { emailReplyToId: "abc123" }, }, ], }, @@ -153,7 +153,7 @@ describe(`sending an application by email to a planning office`, () => { teams: [ { sendToEmail: null, - notifyPersonalisation: { emailReplyToId: "abc123" }, + settings: { emailReplyToId: "abc123" }, }, ], }, diff --git a/api.planx.uk/modules/send/email/service.ts b/api.planx.uk/modules/send/email/service.ts index 7ba6e6ffb6..7cb7e0e606 100644 --- a/api.planx.uk/modules/send/email/service.ts +++ b/api.planx.uk/modules/send/email/service.ts @@ -17,7 +17,12 @@ export async function getTeamEmailSettings(localAuthority: string) { query GetTeamEmailSettings($slug: String) { teams(where: { slug: { _eq: $slug } }) { sendToEmail: submission_email - notifyPersonalisation: notify_personalisation + notifyPersonalisation: team_settings { + helpEmail: help_email + helpPhone: help_phone + emailReplyToId: email_reply_to_id + helpOpeningHours: help_opening_hours + } } } `, diff --git a/api.planx.uk/modules/send/s3/index.test.ts b/api.planx.uk/modules/send/s3/index.test.ts index 9db576188e..352c8c07ef 100644 --- a/api.planx.uk/modules/send/s3/index.test.ts +++ b/api.planx.uk/modules/send/s3/index.test.ts @@ -53,6 +53,14 @@ describe(`uploading an application to S3`, () => { slug: "unsupported-team", }, }); + + queryMock.mockQuery({ + name: "CreateS3Application", + matchOnVariables: false, + data: { + insertS3Application: { id: 1 }, + }, + }); }); it("requires auth", async () => { diff --git a/api.planx.uk/modules/send/s3/index.ts b/api.planx.uk/modules/send/s3/index.ts index f301729334..39aed61780 100644 --- a/api.planx.uk/modules/send/s3/index.ts +++ b/api.planx.uk/modules/send/s3/index.ts @@ -1,16 +1,19 @@ +import axios from "axios"; import type { NextFunction, Request, Response } from "express"; +import { gql } from "graphql-request"; import { $api } from "../../../client"; +import { Passport } from "../../../types"; import { uploadPrivateFile } from "../../file/service/uploadFile"; import { markSessionAsSubmitted } from "../../saveAndReturn/service/utils"; -import axios from "axios"; import { isApplicationTypeSupported } from "../utils/helpers"; -import { Passport } from "../../../types"; -export async function sendToS3( - req: Request, - res: Response, - next: NextFunction, -) { +interface CreateS3Application { + insertS3Application: { + id: string; + }; +} + +const sendToS3 = async (req: Request, res: Response, next: NextFunction) => { // `/upload-submission/:localAuthority` is only called via Hasura's scheduled event webhook, so body is wrapped in a "payload" key const { payload } = req.body; const localAuthority = req.params.localAuthority; @@ -58,8 +61,7 @@ export async function sendToS3( ); // Send a notification with the file URL to the Power Automate webook - let webhookResponseStatus: number | undefined; - await axios({ + const webhookRequest = { method: "POST", url: powerAutomateWebhookURL, adapter: "http", @@ -73,10 +75,49 @@ export async function sendToS3( file: fileUrl, payload: doValidation ? "Validated ODP Schema" : "Discretionary", }, - }) - .then((res) => { - // TODO Create & update audit table entry here + }; + let webhookResponseStatus: number | undefined; + await axios(webhookRequest) + .then(async (res) => { webhookResponseStatus = res.status; + + // Mark session as submitted so that reminder and expiry emails are not triggered + markSessionAsSubmitted(sessionId); + + // Create an audit entry + const applicationId = await $api.client.request( + gql` + mutation CreateS3Application( + $session_id: String! + $team_slug: String! + $webhook_request: jsonb! + $webhook_response: jsonb = {} + ) { + insertS3Application: insert_s3_applications_one( + object: { + session_id: $session_id + team_slug: $team_slug + webhook_request: $webhook_request + webhook_response: $webhook_response + } + ) { + id + } + } + `, + { + session_id: sessionId, + team_slug: localAuthority, + webhook_request: webhookRequest, + webhook_response: res, + }, + ); + + return { + application: { + ...applicationId.insertS3Application, + }, + }; }) .catch((error) => { throw new Error( @@ -84,9 +125,6 @@ export async function sendToS3( ); }); - // Mark session as submitted so that reminder and expiry emails are not triggered - markSessionAsSubmitted(sessionId); - return res.status(200).send({ message: `Successfully uploaded submission to S3: ${fileUrl}`, payload: doValidation ? "Validated ODP Schema" : "Discretionary", @@ -100,4 +138,6 @@ export async function sendToS3( }`, }); } -} +}; + +export { sendToS3 }; diff --git a/api.planx.uk/package.json b/api.planx.uk/package.json index 9e1d308b8a..64343791e3 100644 --- a/api.planx.uk/package.json +++ b/api.planx.uk/package.json @@ -5,7 +5,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@airbrake/node": "^2.1.8", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b43b268", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#7666a78", "@types/isomorphic-fetch": "^0.0.36", "adm-zip": "^0.5.10", "aws-sdk": "^2.1467.0", diff --git a/api.planx.uk/pnpm-lock.yaml b/api.planx.uk/pnpm-lock.yaml index c1b21ac157..956bcf7897 100644 --- a/api.planx.uk/pnpm-lock.yaml +++ b/api.planx.uk/pnpm-lock.yaml @@ -14,8 +14,8 @@ dependencies: specifier: ^2.1.8 version: 2.1.8 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#b43b268 - version: github.com/theopensystemslab/planx-core/b43b268 + specifier: git+https://github.com/theopensystemslab/planx-core#7666a78 + version: github.com/theopensystemslab/planx-core/7666a78 '@types/isomorphic-fetch': specifier: ^0.0.36 version: 0.0.36 @@ -8203,8 +8203,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/b43b268: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b43b268} + github.com/theopensystemslab/planx-core/7666a78: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/7666a78} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/api.planx.uk/tests/mocks/inviteToPayData.ts b/api.planx.uk/tests/mocks/inviteToPayData.ts index 4f4d4dfcaf..6f0ad73dcf 100644 --- a/api.planx.uk/tests/mocks/inviteToPayData.ts +++ b/api.planx.uk/tests/mocks/inviteToPayData.ts @@ -83,7 +83,7 @@ export const validPaymentRequest = { name: "Buckinghamshire", slug: "buckinghamshire", domain: "planningservices.buckinghamshire.gov.uk", - notifyPersonalisation: { + settings: { helpEmail: "help@council.gov.uk", helpPhone: "123", helpOpeningHours: "9a-5p", diff --git a/api.planx.uk/tests/mocks/saveAndReturnMocks.ts b/api.planx.uk/tests/mocks/saveAndReturnMocks.ts index 12415a5222..0fcdc37285 100644 --- a/api.planx.uk/tests/mocks/saveAndReturnMocks.ts +++ b/api.planx.uk/tests/mocks/saveAndReturnMocks.ts @@ -1,17 +1,18 @@ import { v4 as uuidV4 } from "uuid"; import type { LowCalSession, Flow } from "../../types"; +import { Team } from "@opensystemslab/planx-core/types"; export const mockTeam = { id: 1, slug: "test-team", name: "Test Team", - notifyPersonalisation: { + settings: { helpEmail: "example@council.gov.uk", helpPhone: "(01234) 567890", helpOpeningHours: "Monday - Friday, 9am - 5pm", emailReplyToId: "727d48fa-cb8a-42f9-b8b2-55032f3bb451", }, -}; +} as Team; export const mockFlow: Flow = { id: "dcfd4f07-76da-4b67-9822-2aca92b27551", diff --git a/api.planx.uk/types.ts b/api.planx.uk/types.ts index aa38f936db..60c8272418 100644 --- a/api.planx.uk/types.ts +++ b/api.planx.uk/types.ts @@ -1,5 +1,5 @@ import { PaymentRequest } from "@opensystemslab/planx-core/dist/types"; -import { GovUKPayment } from "@opensystemslab/planx-core/types"; +import { GovUKPayment, Team } from "@opensystemslab/planx-core/types"; /** * @deprecated Migrating to Node from planx-core @@ -49,20 +49,6 @@ export interface UserData { export type Breadcrumb = Record; -export interface Team { - id: number; - slug: string; - name: string; - domain?: string; - boundaryBBox?: object; - notifyPersonalisation: { - helpEmail: string; - helpPhone: string; - helpOpeningHours: string; - emailReplyToId: string; - }; -} - export interface Passport { data: Record; } diff --git a/e2e/tests/api-driven/package.json b/e2e/tests/api-driven/package.json index f59a16d87b..56327dd937 100644 --- a/e2e/tests/api-driven/package.json +++ b/e2e/tests/api-driven/package.json @@ -7,7 +7,7 @@ "packageManager": "pnpm@8.6.6", "dependencies": { "@cucumber/cucumber": "^9.3.0", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b43b268", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#7666a78", "axios": "^1.6.8", "dotenv": "^16.3.1", "dotenv-expand": "^10.0.0", diff --git a/e2e/tests/api-driven/pnpm-lock.yaml b/e2e/tests/api-driven/pnpm-lock.yaml index 325902c9a3..bbf9d8c26e 100644 --- a/e2e/tests/api-driven/pnpm-lock.yaml +++ b/e2e/tests/api-driven/pnpm-lock.yaml @@ -9,8 +9,8 @@ dependencies: specifier: ^9.3.0 version: 9.3.0 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#b43b268 - version: github.com/theopensystemslab/planx-core/b43b268 + specifier: git+https://github.com/theopensystemslab/planx-core#7666a78 + version: github.com/theopensystemslab/planx-core/7666a78 axios: specifier: ^1.6.8 version: 1.6.8 @@ -3053,8 +3053,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/b43b268: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b43b268} + github.com/theopensystemslab/planx-core/7666a78: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/7666a78} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/e2e/tests/ui-driven/package.json b/e2e/tests/ui-driven/package.json index 59e49915dd..0ec4fb8c07 100644 --- a/e2e/tests/ui-driven/package.json +++ b/e2e/tests/ui-driven/package.json @@ -8,7 +8,7 @@ "postinstall": "./install-dependencies.sh" }, "dependencies": { - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b43b268", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#7666a78", "axios": "^1.6.8", "dotenv": "^16.3.1", "eslint": "^8.56.0", diff --git a/e2e/tests/ui-driven/pnpm-lock.yaml b/e2e/tests/ui-driven/pnpm-lock.yaml index a8b7649791..05082a1442 100644 --- a/e2e/tests/ui-driven/pnpm-lock.yaml +++ b/e2e/tests/ui-driven/pnpm-lock.yaml @@ -6,8 +6,8 @@ settings: dependencies: '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#b43b268 - version: github.com/theopensystemslab/planx-core/b43b268 + specifier: git+https://github.com/theopensystemslab/planx-core#7666a78 + version: github.com/theopensystemslab/planx-core/7666a78 axios: specifier: ^1.6.8 version: 1.6.8 @@ -2782,8 +2782,8 @@ packages: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} dev: false - github.com/theopensystemslab/planx-core/b43b268: - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b43b268} + github.com/theopensystemslab/planx-core/7666a78: + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/7666a78} name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true diff --git a/editor.planx.uk/package.json b/editor.planx.uk/package.json index b5fcbef8f8..74c80819f3 100644 --- a/editor.planx.uk/package.json +++ b/editor.planx.uk/package.json @@ -13,7 +13,7 @@ "@mui/material": "^5.15.2", "@mui/utils": "^5.15.2", "@opensystemslab/map": "^0.8.3", - "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#b43b268", + "@opensystemslab/planx-core": "git+https://github.com/theopensystemslab/planx-core#7666a78", "@tiptap/core": "^2.4.0", "@tiptap/extension-bold": "^2.0.3", "@tiptap/extension-bubble-menu": "^2.1.13", @@ -77,7 +77,7 @@ "react-navi-helmet-async": "^0.15.0", "react-scripts": "^5.0.1", "react-toastify": "^9.1.3", - "react-use": "^17.4.2", + "react-use": "^17.5.0", "reconnecting-websocket": "^4.4.0", "rxjs": "^7.8.1", "scroll-into-view-if-needed": "^3.1.0", @@ -224,7 +224,8 @@ "nth-check@<2.0.1": ">=2.0.1", "postcss@<8.4.31": ">=8.4.31", "follow-redirects@<1.15.4": ">=1.15.4", - "braces@<3.0.3": ">=3.0.3" + "braces@<3.0.3": ">=3.0.3", + "fast-loops@<1.1.4": ">=1.1.4" } } } diff --git a/editor.planx.uk/pnpm-lock.yaml b/editor.planx.uk/pnpm-lock.yaml index 94afc869b1..d4765034e1 100644 --- a/editor.planx.uk/pnpm-lock.yaml +++ b/editor.planx.uk/pnpm-lock.yaml @@ -9,6 +9,7 @@ overrides: postcss@<8.4.31: '>=8.4.31' follow-redirects@<1.15.4: '>=1.15.4' braces@<3.0.3: '>=3.0.3' + fast-loops@<1.1.4: '>=1.1.4' dependencies: '@airbrake/browser': @@ -42,8 +43,8 @@ dependencies: specifier: ^0.8.3 version: 0.8.3 '@opensystemslab/planx-core': - specifier: git+https://github.com/theopensystemslab/planx-core#b43b268 - version: github.com/theopensystemslab/planx-core/b43b268(@types/react@18.2.45) + specifier: git+https://github.com/theopensystemslab/planx-core#7666a78 + version: github.com/theopensystemslab/planx-core/7666a78(@types/react@18.2.45) '@tiptap/core': specifier: ^2.4.0 version: 2.4.0(@tiptap/pm@2.0.3) @@ -229,13 +230,13 @@ dependencies: version: 0.15.0(navi@0.15.0)(react-dom@18.2.0)(react-navi@0.15.0)(react@18.2.0) react-scripts: specifier: ^5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) + version: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.13)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) react-toastify: specifier: ^9.1.3 version: 9.1.3(react-dom@18.2.0)(react@18.2.0) react-use: - specifier: ^17.4.2 - version: 17.4.2(react-dom@18.2.0)(react@18.2.0) + specifier: ^17.5.0 + version: 17.5.0(react-dom@18.2.0)(react@18.2.0) reconnecting-websocket: specifier: ^4.4.0 version: 4.4.0 @@ -297,7 +298,7 @@ devDependencies: version: 7.23.3(@babel/core@7.22.5) '@craco/craco': specifier: ^7.1.0 - version: 7.1.0(@swc/core@1.6.3)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3) + version: 7.1.0(@swc/core@1.6.13)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3) '@react-theming/storybook-addon': specifier: ^1.1.10 version: 1.1.10(@storybook/addons@7.6.7)(@storybook/react@7.6.7)(@storybook/theming@7.6.7)(react-dom@18.2.0)(react@18.2.0) @@ -327,7 +328,7 @@ devDependencies: version: 7.6.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) '@storybook/react-webpack5': specifier: ^7.6.7 - version: 7.6.7(@babel/core@7.22.5)(@swc/core@1.6.3)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) + version: 7.6.7(@babel/core@7.22.5)(@swc/core@1.6.13)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) '@storybook/testing-library': specifier: ^0.2.2 version: 0.2.2 @@ -342,7 +343,7 @@ devDependencies: version: 14.2.1(react-dom@18.2.0)(react@18.2.0) '@testing-library/user-event': specifier: ^14.4.3 - version: 14.4.3(@testing-library/dom@10.1.0) + version: 14.4.3(@testing-library/dom@10.3.1) '@types/dompurify': specifier: ^3.0.5 version: 3.0.5 @@ -477,7 +478,7 @@ devDependencies: version: 5.4.3 webpack: specifier: ^5.91.0 - version: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + version: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) packages: @@ -567,6 +568,7 @@ packages: /@aw-web-design/x-default-browser@1.4.126: resolution: {integrity: sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==} + hasBin: true dependencies: default-browser-id: 3.0.0 dev: true @@ -670,7 +672,7 @@ packages: dependencies: '@babel/compat-data': 7.24.7 '@babel/helper-validator-option': 7.24.7 - browserslist: 4.23.1 + browserslist: 4.23.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -991,6 +993,7 @@ packages: /@babel/parser@7.24.7: resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} engines: {node: '>=6.0.0'} + hasBin: true dependencies: '@babel/types': 7.24.7 @@ -1065,6 +1068,7 @@ packages: /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1090,6 +1094,7 @@ packages: /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.22.5): resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1101,6 +1106,7 @@ packages: /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1111,6 +1117,7 @@ packages: /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1121,6 +1128,7 @@ packages: /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.22.5): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1134,6 +1142,7 @@ packages: /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1163,6 +1172,7 @@ packages: /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.22.5): resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -1177,6 +1187,7 @@ packages: /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} engines: {node: '>=4'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead. peerDependencies: '@babel/core': ^7.0.0-0 dependencies: @@ -3159,6 +3170,7 @@ packages: /@cnakazawa/watch@1.0.4: resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} engines: {node: '>=0.1.95'} + hasBin: true dependencies: exec-sh: 0.3.6 minimist: 1.2.8 @@ -3177,6 +3189,7 @@ packages: /@codemirror/basic-setup@0.19.3: resolution: {integrity: sha512-2hfO+QDk/HTpQzeYk1NyL1G9D5L7Sj78dtaQP8xBU42DKU9+OBPF5MdjLYnxP0jKzm6IfQfsLd89fnqW3rBVfQ==} + deprecated: In version 6.0, this package has been renamed to just 'codemirror' dependencies: '@codemirror/autocomplete': 0.19.15 '@codemirror/closebrackets': 0.19.2 @@ -3197,6 +3210,7 @@ packages: /@codemirror/closebrackets@0.19.2: resolution: {integrity: sha512-ClMPzPcPP0eQiDcVjtVPl6OLxgdtZSYDazsvT0AKl70V1OJva0eHgl4/6kCW3RZ0pb2n34i9nJz4eXCmK+TYDA==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/autocomplete dependencies: '@codemirror/language': 0.19.10 '@codemirror/rangeset': 0.19.9 @@ -3218,6 +3232,7 @@ packages: /@codemirror/comment@0.19.1: resolution: {integrity: sha512-uGKteBuVWAC6fW+Yt8u27DOnXMT/xV4Ekk2Z5mRsiADCZDqYvryrJd6PLL5+8t64BVyocwQwNfz1UswYS2CtFQ==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/commands dependencies: '@codemirror/state': 0.19.9 '@codemirror/text': 0.19.6 @@ -3226,6 +3241,7 @@ packages: /@codemirror/fold@0.19.4: resolution: {integrity: sha512-0SNSkRSOa6gymD6GauHa3sxiysjPhUC0SRVyTlvL52o0gz9GHdc8kNqNQskm3fBtGGOiSriGwF/kAsajRiGhVw==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/language dependencies: '@codemirror/gutter': 0.19.9 '@codemirror/language': 0.19.10 @@ -3236,6 +3252,7 @@ packages: /@codemirror/gutter@0.19.9: resolution: {integrity: sha512-PFrtmilahin1g6uL27aG5tM/rqR9DZzZYZsIrCXA5Uc2OFTFqx4owuhoU9hqfYxHp5ovfvBwQ+txFzqS4vog6Q==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/view dependencies: '@codemirror/rangeset': 0.19.9 '@codemirror/state': 0.19.9 @@ -3244,6 +3261,7 @@ packages: /@codemirror/highlight@0.19.8: resolution: {integrity: sha512-v/lzuHjrYR8MN2mEJcUD6fHSTXXli9C1XGYpr+ElV6fLBIUhMTNKR3qThp611xuWfXfwDxeL7ppcbkM/MzPV3A==} + deprecated: As of 0.20.0, this package has been split between @lezer/highlight and @codemirror/language dependencies: '@codemirror/language': 0.19.10 '@codemirror/rangeset': 0.19.9 @@ -3255,6 +3273,7 @@ packages: /@codemirror/history@0.19.2: resolution: {integrity: sha512-unhP4t3N2smzmHoo/Yio6ueWi+il8gm9VKrvi6wlcdGH5fOfVDNkmjHQ495SiR+EdOG35+3iNebSPYww0vN7ow==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/commands dependencies: '@codemirror/state': 0.19.9 '@codemirror/view': 0.19.48 @@ -3302,6 +3321,7 @@ packages: /@codemirror/matchbrackets@0.19.4: resolution: {integrity: sha512-VFkaOKPNudAA5sGP1zikRHCEKU0hjYmkKpr04pybUpQvfTvNJXlReCyP0rvH/1iEwAGPL990ZTT+QrLdu4MeEA==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/language dependencies: '@codemirror/language': 0.19.10 '@codemirror/state': 0.19.9 @@ -3311,6 +3331,7 @@ packages: /@codemirror/panel@0.19.1: resolution: {integrity: sha512-sYeOCMA3KRYxZYJYn5PNlt9yNsjy3zTNTrbYSfVgjgL9QomIVgOJWPO5hZ2sTN8lufO6lw0vTBsIPL9MSidmBg==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/view dependencies: '@codemirror/state': 0.19.9 '@codemirror/view': 0.19.48 @@ -3318,12 +3339,14 @@ packages: /@codemirror/rangeset@0.19.9: resolution: {integrity: sha512-V8YUuOvK+ew87Xem+71nKcqu1SXd5QROMRLMS/ljT5/3MCxtgrRie1Cvild0G/Z2f1fpWxzX78V0U4jjXBorBQ==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/state dependencies: '@codemirror/state': 0.19.9 dev: true /@codemirror/rectangular-selection@0.19.2: resolution: {integrity: sha512-AXK/p5eGwFJ9GJcLfntqN4dgY+XiIF7eHfXNQJX5HhQLSped2wJE6WuC1rMEaOlcpOqlb9mrNi/ZdUjSIj9mbA==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/view dependencies: '@codemirror/state': 0.19.9 '@codemirror/text': 0.19.6 @@ -3349,6 +3372,7 @@ packages: /@codemirror/stream-parser@0.19.9: resolution: {integrity: sha512-WTmkEFSRCetpk8xIOvV2yyXdZs3DgYckM0IP7eFi4ewlxWnJO/H4BeJZLs4wQaydWsAqTQoDyIwNH1BCzK5LUQ==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/language dependencies: '@codemirror/highlight': 0.19.8 '@codemirror/language': 0.19.10 @@ -3360,6 +3384,7 @@ packages: /@codemirror/text@0.19.6: resolution: {integrity: sha512-T9jnREMIygx+TPC1bOuepz18maGq/92q2a+n4qTqObKwvNMg+8cMTslb8yxeEDEq7S3kpgGWxgO1UWbQRij0dA==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/state dev: true /@codemirror/theme-one-dark@0.19.0: @@ -3372,6 +3397,7 @@ packages: /@codemirror/tooltip@0.19.16: resolution: {integrity: sha512-zxKDHryUV5/RS45AQL+wOeN+i7/l81wK56OMnUPoTSzCWNITfxHn7BToDsjtrRKbzHqUxKYmBnn/4hPjpZ4WJQ==} + deprecated: As of 0.20.0, this package has been merged into @codemirror/view dependencies: '@codemirror/state': 0.19.9 '@codemirror/view': 0.19.48 @@ -3394,7 +3420,7 @@ packages: dev: true optional: true - /@craco/craco@7.1.0(@swc/core@1.6.3)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3): + /@craco/craco@7.1.0(@swc/core@1.6.13)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3): resolution: {integrity: sha512-oRAcPIKYrfPXp9rSzlsDNeOaVtDiKhoyqSXUoqiK24jCkHr4T8m/a2f74yXIzCbIheoUWDOIfWZyRgFgT+cpqA==} engines: {node: '>=6'} hasBin: true @@ -3403,10 +3429,10 @@ packages: dependencies: autoprefixer: 10.4.16(postcss@8.4.32) cosmiconfig: 7.1.0 - cosmiconfig-typescript-loader: 1.0.9(@swc/core@1.6.3)(@types/node@17.0.45)(cosmiconfig@7.1.0)(typescript@5.4.3) + cosmiconfig-typescript-loader: 1.0.9(@swc/core@1.6.13)(@types/node@17.0.45)(cosmiconfig@7.1.0)(typescript@5.4.3) cross-spawn: 7.0.3 lodash: 4.17.21 - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.13)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) semver: 7.6.2 webpack-merge: 5.10.0 transitivePeerDependencies: @@ -4465,8 +4491,8 @@ packages: eslint-visitor-keys: 3.4.3 dev: false - /@eslint-community/regexpp@4.10.1: - resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} + /@eslint-community/regexpp@4.11.0: + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} /@eslint/eslintrc@2.1.4: @@ -4498,40 +4524,40 @@ packages: resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} dev: true - /@floating-ui/core@1.6.2: - resolution: {integrity: sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==} + /@floating-ui/core@1.6.4: + resolution: {integrity: sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA==} dependencies: - '@floating-ui/utils': 0.2.2 + '@floating-ui/utils': 0.2.4 - /@floating-ui/dom@1.6.5: - resolution: {integrity: sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==} + /@floating-ui/dom@1.6.7: + resolution: {integrity: sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng==} dependencies: - '@floating-ui/core': 1.6.2 - '@floating-ui/utils': 0.2.2 + '@floating-ui/core': 1.6.4 + '@floating-ui/utils': 0.2.4 - /@floating-ui/react-dom@2.1.0(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==} + /@floating-ui/react-dom@2.1.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.6.5 + '@floating-ui/dom': 1.6.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - /@floating-ui/react-dom@2.1.0(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==} + /@floating-ui/react-dom@2.1.1(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.6.5 + '@floating-ui/dom': 1.6.7 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: false - /@floating-ui/utils@0.2.2: - resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==} + /@floating-ui/utils@0.2.4: + resolution: {integrity: sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==} /@focus-reactive/react-yaml@1.1.2(react@18.2.0): resolution: {integrity: sha512-X9/rmfuDHR+beDym2206RsD5m/5EfH26vVuGVbLXy7+BunPcVBRqwe2WbvCyoHloMUX7Ccp2xrLwmmPrvZ9hrA==} @@ -4571,6 +4597,7 @@ packages: /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.5 @@ -4584,6 +4611,7 @@ packages: /@humanwhocodes/object-schema@2.0.3: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead /@icons/material@0.2.4(react@18.2.0): resolution: {integrity: sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==} @@ -4915,7 +4943,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 /@jridgewell/resolve-uri@3.1.2: @@ -4932,20 +4960,20 @@ packages: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} /@jridgewell/trace-mapping@0.3.25: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 dev: true /@jsdevtools/ono@7.1.3: @@ -5141,7 +5169,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0)(react@18.2.0) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.2.0) '@popperjs/core': 2.11.8 @@ -5164,7 +5192,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.0(react-dom@18.3.1)(react@18.3.1) + '@floating-ui/react-dom': 2.1.1(react-dom@18.3.1)(react@18.3.1) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.3.1) '@popperjs/core': 2.11.8 @@ -5187,9 +5215,9 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0)(react@18.2.0) '@mui/types': 7.2.14(@types/react@18.2.45) - '@mui/utils': 5.15.20(@types/react@18.2.45)(react@18.2.0) + '@mui/utils': 5.16.0(@types/react@18.2.45)(react@18.2.0) '@popperjs/core': 2.11.8 '@types/react': 18.2.45 clsx: 2.1.1 @@ -5198,8 +5226,8 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@mui/core-downloads-tracker@5.15.20: - resolution: {integrity: sha512-DoL2ppgldL16utL8nNyj/P12f8mCNdx/Hb/AJnX9rLY4b52hCMIx1kH83pbXQ6uMy6n54M3StmEbvSGoj2OFuA==} + /@mui/core-downloads-tracker@5.16.0: + resolution: {integrity: sha512-8SLffXYPRVpcZx5QzxNE8fytTqzp+IuU3deZbQWg/vSaTlDpR5YVrQ4qQtXTi5cRdhOufV5INylmwlKK+//nPw==} dev: false /@mui/icons-material@5.15.2(@mui/material@5.15.2)(@types/react@18.2.45)(react@18.2.0): @@ -5242,9 +5270,9 @@ packages: '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.45)(react@18.2.0) '@mui/base': 5.0.0-beta.40(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@mui/material': 5.15.2(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@mui/system': 5.15.20(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0) + '@mui/system': 5.16.0(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0) '@mui/types': 7.2.14(@types/react@18.2.45) - '@mui/utils': 5.15.20(@types/react@18.2.45)(react@18.2.0) + '@mui/utils': 5.16.0(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 clsx: 2.1.1 prop-types: 15.8.1 @@ -5273,8 +5301,8 @@ packages: '@emotion/react': 11.11.1(@types/react@18.2.45)(react@18.2.0) '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.45)(react@18.2.0) '@mui/base': 5.0.0-beta.29(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@mui/core-downloads-tracker': 5.15.20 - '@mui/system': 5.15.20(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0) + '@mui/core-downloads-tracker': 5.16.0 + '@mui/system': 5.16.0(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 @@ -5309,8 +5337,8 @@ packages: '@emotion/react': 11.11.4(@types/react@18.2.45)(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.2.45)(react@18.3.1) '@mui/base': 5.0.0-beta.29(@types/react@18.2.45)(react-dom@18.3.1)(react@18.3.1) - '@mui/core-downloads-tracker': 5.15.20 - '@mui/system': 5.15.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.45)(react@18.3.1) + '@mui/core-downloads-tracker': 5.16.0 + '@mui/system': 5.16.0(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.45)(react@18.3.1) '@mui/types': 7.2.14(@types/react@18.2.45) '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.3.1) '@types/react': 18.2.45 @@ -5324,8 +5352,8 @@ packages: react-transition-group: 4.4.5(react-dom@18.3.1)(react@18.3.1) dev: false - /@mui/private-theming@5.15.20(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==} + /@mui/private-theming@5.16.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-sYpubkO1MZOnxNyVOClrPNOTs0MfuRVVnAvCeMaOaXt6GimgQbnUcshYv2pSr6PFj+Mqzdff/FYOBceK8u5QgA==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -5335,14 +5363,14 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@mui/utils': 5.15.20(@types/react@18.2.45)(react@18.2.0) + '@mui/utils': 5.16.0(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 prop-types: 15.8.1 react: 18.2.0 dev: false - /@mui/private-theming@5.15.20(@types/react@18.2.45)(react@18.3.1): - resolution: {integrity: sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==} + /@mui/private-theming@5.16.0(@types/react@18.2.45)(react@18.3.1): + resolution: {integrity: sha512-sYpubkO1MZOnxNyVOClrPNOTs0MfuRVVnAvCeMaOaXt6GimgQbnUcshYv2pSr6PFj+Mqzdff/FYOBceK8u5QgA==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -5352,7 +5380,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@mui/utils': 5.15.20(@types/react@18.2.45)(react@18.3.1) + '@mui/utils': 5.16.0(@types/react@18.2.45)(react@18.3.1) '@types/react': 18.2.45 prop-types: 15.8.1 react: 18.3.1 @@ -5402,8 +5430,8 @@ packages: react: 18.3.1 dev: false - /@mui/system@5.15.20(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==} + /@mui/system@5.16.0(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-9YbkC2m3+pNumAvubYv+ijLtog6puJ0fJ6rYfzfLCM47pWrw3m+30nXNM8zMgDaKL6vpfWJcCXm+LPaWBpy7sw==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -5421,10 +5449,10 @@ packages: '@babel/runtime': 7.24.7 '@emotion/react': 11.11.1(@types/react@18.2.45)(react@18.2.0) '@emotion/styled': 11.11.0(@emotion/react@11.11.1)(@types/react@18.2.45)(react@18.2.0) - '@mui/private-theming': 5.15.20(@types/react@18.2.45)(react@18.2.0) + '@mui/private-theming': 5.16.0(@types/react@18.2.45)(react@18.2.0) '@mui/styled-engine': 5.15.14(@emotion/react@11.11.1)(@emotion/styled@11.11.0)(react@18.2.0) '@mui/types': 7.2.14(@types/react@18.2.45) - '@mui/utils': 5.15.20(@types/react@18.2.45)(react@18.2.0) + '@mui/utils': 5.16.0(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 clsx: 2.1.1 csstype: 3.1.3 @@ -5432,8 +5460,8 @@ packages: react: 18.2.0 dev: false - /@mui/system@5.15.20(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.45)(react@18.3.1): - resolution: {integrity: sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==} + /@mui/system@5.16.0(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(@types/react@18.2.45)(react@18.3.1): + resolution: {integrity: sha512-9YbkC2m3+pNumAvubYv+ijLtog6puJ0fJ6rYfzfLCM47pWrw3m+30nXNM8zMgDaKL6vpfWJcCXm+LPaWBpy7sw==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -5451,10 +5479,10 @@ packages: '@babel/runtime': 7.24.7 '@emotion/react': 11.11.4(@types/react@18.2.45)(react@18.3.1) '@emotion/styled': 11.11.5(@emotion/react@11.11.4)(@types/react@18.2.45)(react@18.3.1) - '@mui/private-theming': 5.15.20(@types/react@18.2.45)(react@18.3.1) + '@mui/private-theming': 5.16.0(@types/react@18.2.45)(react@18.3.1) '@mui/styled-engine': 5.15.14(@emotion/react@11.11.4)(@emotion/styled@11.11.5)(react@18.3.1) '@mui/types': 7.2.14(@types/react@18.2.45) - '@mui/utils': 5.15.20(@types/react@18.2.45)(react@18.3.1) + '@mui/utils': 5.16.0(@types/react@18.2.45)(react@18.3.1) '@types/react': 18.2.45 clsx: 2.1.1 csstype: 3.1.3 @@ -5509,8 +5537,8 @@ packages: react-is: 18.3.1 dev: false - /@mui/utils@5.15.20(@types/react@18.2.45)(react@18.2.0): - resolution: {integrity: sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==} + /@mui/utils@5.16.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-kLLi5J1xY+mwtUlMb8Ubdxf4qFAA1+U7WPBvjM/qQ4CIwLCohNb0sHo1oYPufjSIH/Z9+dhVxD7dJlfGjd1AVA==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -5527,8 +5555,8 @@ packages: react-is: 18.3.1 dev: false - /@mui/utils@5.15.20(@types/react@18.2.45)(react@18.3.1): - resolution: {integrity: sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==} + /@mui/utils@5.16.0(@types/react@18.2.45)(react@18.3.1): + resolution: {integrity: sha512-kLLi5J1xY+mwtUlMb8Ubdxf4qFAA1+U7WPBvjM/qQ4CIwLCohNb0sHo1oYPufjSIH/Z9+dhVxD7dJlfGjd1AVA==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -5560,6 +5588,7 @@ packages: /@nicolo-ribaudo/semver-v6@6.3.3: resolution: {integrity: sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==} + hasBin: true /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -5593,8 +5622,8 @@ packages: jspdf: 2.5.1 lit: 3.1.4 ol: 9.2.4 - ol-ext: 4.0.18(ol@9.2.4) - ol-mapbox-style: 12.3.3(ol@9.2.4) + ol-ext: 4.0.19(ol@9.2.4) + ol-mapbox-style: 12.3.4(ol@9.2.4) postcode: 5.1.0 proj4: 2.11.0 rambda: 8.6.0 @@ -5644,7 +5673,7 @@ packages: react-refresh: 0.11.0 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) webpack-dev-server: 4.15.2(webpack@5.91.0) /@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.0)(webpack@5.91.0): @@ -5681,7 +5710,7 @@ packages: react-refresh: 0.14.0 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) dev: true /@popperjs/core@2.11.8: @@ -5700,6 +5729,10 @@ packages: '@babel/runtime': 7.24.7 dev: true + /@radix-ui/primitive@1.1.0: + resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} + dev: true + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: @@ -5745,6 +5778,29 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true + /@radix-ui/react-collection@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-context': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + '@types/react-dom': 18.2.18 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: @@ -5759,6 +5815,19 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-compose-refs@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-context@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: @@ -5773,6 +5842,19 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-context@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-direction@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: @@ -5787,6 +5869,19 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-direction@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} peerDependencies: @@ -5864,6 +5959,20 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-id@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: @@ -5878,7 +5987,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.7 - '@floating-ui/react-dom': 2.1.0(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.1.1(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.45)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.45)(react@18.2.0) @@ -5936,29 +6045,48 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==} + /@radix-ui/react-primitive@2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-slot': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + '@types/react-dom': 18.2.18 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: true + + /@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-context': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-id': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 @@ -6006,21 +6134,20 @@ packages: react-remove-scroll: 2.5.5(@types/react@18.2.45)(react@18.2.0) dev: true - /@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==} + /@radix-ui/react-separator@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 @@ -6042,77 +6169,88 @@ packages: react: 18.2.0 dev: true - /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==} + /@radix-ui/react-slot@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + + /@radix-ui/react-toggle-group@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-PpTJV68dZU2oqqgq75Uzto5o/XfOVgkrJ9rulVmfTKxWp3HfUjHE6CP/WLRR4AzPX9HWxw7vFow2me85Yu+Naw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toggle': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==} + /@radix-ui/react-toggle@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-gwoxaKZ0oJ4vIgzsfESBuSgJNdc0rv12VhHgcqN0TEJmmZixXG/2XpsLK8kzNWYcnaoRIEEQc0bEi3dIvdUpjw==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.2.45)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: true - /@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==} + /@radix-ui/react-toolbar@1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-ZUKknxhMTL/4hPh+4DuaTot9aO7UD6Kupj4gqXCsBTayX1pD1L+0C2/2VZKXb4tIifQklZ3pf2hG9T+ns+FclQ==} peerDependencies: '@types/react': '*' '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc peerDependenciesMeta: '@types/react': optional: true '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.7 - '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-direction': 1.0.1(@types/react@18.2.45)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-direction': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-separator': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toggle-group': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.45 '@types/react-dom': 18.2.18 react: 18.2.0 @@ -6133,6 +6271,19 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: @@ -6148,6 +6299,20 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: @@ -6177,6 +6342,19 @@ packages: react: 18.2.0 dev: true + /@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.2.45)(react@18.2.0): + resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.45 + react: 18.2.0 + dev: true + /@radix-ui/react-use-previous@1.0.1(@types/react@18.2.45)(react@18.2.0): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: @@ -6562,7 +6740,7 @@ packages: react: optional: true dependencies: - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 react: 18.2.0 ts-dedent: 2.2.0 @@ -6613,14 +6791,14 @@ packages: '@storybook/client-logger': 7.6.7 '@storybook/components': 7.6.7(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': 7.6.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/docs-tools': 7.6.7 '@storybook/global': 5.0.0 '@storybook/manager-api': 7.6.7(react-dom@18.2.0)(react@18.2.0) '@storybook/preview-api': 7.6.7 '@storybook/theming': 7.6.7(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.6.7 - '@types/lodash': 4.17.5 + '@types/lodash': 4.17.6 color-convert: 2.0.1 dequal: 2.0.3 lodash: 4.17.21 @@ -6681,15 +6859,15 @@ packages: '@storybook/node-logger': 7.6.7 '@storybook/preview': 7.6.7 '@storybook/preview-api': 7.6.7 - '@swc/core': 1.6.3 - '@types/node': 18.19.36 + '@swc/core': 1.6.13 + '@types/node': 18.19.39 '@types/semver': 7.5.8 babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.91.0) browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 constants-browserify: 1.0.0 css-loader: 6.10.0(webpack@5.91.0) - es-module-lexer: 1.5.3 + es-module-lexer: 1.5.4 express: 4.19.2 fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.4.3)(webpack@5.91.0) fs-extra: 11.2.0 @@ -6699,14 +6877,14 @@ packages: process: 0.11.10 semver: 7.6.2 style-loader: 3.3.4(webpack@5.91.0) - swc-loader: 0.2.6(@swc/core@1.6.3)(webpack@5.91.0) - terser-webpack-plugin: 5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0) + swc-loader: 0.2.6(@swc/core@1.6.13)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.6.13)(esbuild@0.21.3)(webpack@5.91.0) ts-dedent: 2.2.0 typescript: 5.4.3 url: 0.11.3 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) webpack-dev-middleware: 6.1.3(webpack@5.91.0) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.5.0 @@ -6726,7 +6904,7 @@ packages: '@storybook/client-logger': 7.6.7 '@storybook/core-events': 7.6.7 '@storybook/global': 5.0.0 - qs: 6.12.1 + qs: 6.12.3 telejson: 7.2.0 tiny-invariant: 1.3.3 dev: true @@ -6743,6 +6921,7 @@ packages: /@storybook/cli@8.1.10(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7Fm2Qgk33sHayZ0QABqwe1Jto4yyVRVW6kTrSeP5IuLh+mn244RgxBvWtGCyL1EcWDFI7PYUFa0HxgTCq7C+OA==} + hasBin: true dependencies: '@babel/core': 7.24.7 '@babel/types': 7.24.7 @@ -6768,7 +6947,7 @@ packages: fs-extra: 11.2.0 get-npm-tarball-url: 2.1.0 giget: 1.2.3 - globby: 14.0.1 + globby: 14.0.2 jscodeshift: 0.15.2(@babel/preset-env@7.22.6) leven: 3.1.0 ora: 5.4.1 @@ -6815,13 +6994,13 @@ packages: '@babel/core': 7.24.7 '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/types': 7.24.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/csf-tools': 8.1.10 '@storybook/node-logger': 8.1.10 '@storybook/types': 8.1.10 '@types/cross-spawn': 6.0.6 cross-spawn: 7.0.3 - globby: 14.0.1 + globby: 14.0.2 jscodeshift: 0.15.2(@babel/preset-env@7.24.7) lodash: 4.17.21 prettier: 3.3.2 @@ -6838,9 +7017,9 @@ packages: react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@radix-ui/react-select': 1.2.2(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toolbar': 1.0.4(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-toolbar': 1.1.0(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) '@storybook/client-logger': 7.6.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 '@storybook/theming': 7.6.7(react-dom@18.2.0)(react@18.2.0) '@storybook/types': 7.6.7 @@ -6868,7 +7047,7 @@ packages: '@storybook/node-logger': 7.6.7 '@storybook/types': 7.6.7 '@types/find-cache-dir': 3.2.1 - '@types/node': 18.19.36 + '@types/node': 18.19.39 '@types/node-fetch': 2.6.11 '@types/pretty-hrtime': 1.0.3 chalk: 4.1.2 @@ -6878,7 +7057,7 @@ packages: find-cache-dir: 3.3.2 find-up: 5.0.0 fs-extra: 11.2.0 - glob: 10.4.2 + glob: 10.4.5 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 node-fetch: 2.7.0 @@ -6915,7 +7094,7 @@ packages: find-cache-dir: 3.3.2 find-up: 5.0.0 fs-extra: 11.2.0 - glob: 10.4.2 + glob: 10.4.5 handlebars: 4.7.8 lazy-universal-dotenv: 4.0.0 node-fetch: 2.7.0 @@ -6950,7 +7129,7 @@ packages: /@storybook/core-events@8.1.10: resolution: {integrity: sha512-aS4zsBVyJds74+rAW0IfTEjULDCQwXecVpQfv11B8/89/07s3bOPssGGoTtCTaN4pHbduywE6MxbmFvTmXOFCA==} dependencies: - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 ts-dedent: 2.2.0 dev: true @@ -6965,7 +7144,7 @@ packages: '@storybook/channels': 8.1.10 '@storybook/core-common': 8.1.10(prettier@3.3.2) '@storybook/core-events': 8.1.10 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/csf-tools': 8.1.10 '@storybook/docs-mdx': 3.1.0-next.0 '@storybook/global': 5.0.0 @@ -6977,7 +7156,7 @@ packages: '@storybook/types': 8.1.10 '@types/detect-port': 1.3.5 '@types/diff': 5.2.1 - '@types/node': 18.19.36 + '@types/node': 18.19.39 '@types/pretty-hrtime': 1.0.3 '@types/semver': 7.5.8 better-opn: 3.0.2 @@ -6988,7 +7167,7 @@ packages: diff: 5.2.0 express: 4.19.2 fs-extra: 11.2.0 - globby: 14.0.1 + globby: 14.0.2 lodash: 4.17.21 open: 8.4.2 pretty-hrtime: 1.0.3 @@ -7001,7 +7180,7 @@ packages: util: 0.12.5 util-deprecate: 1.0.2 watchpack: 2.4.1 - ws: 8.17.1 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - encoding @@ -7018,7 +7197,7 @@ packages: '@storybook/core-common': 7.6.7 '@storybook/node-logger': 7.6.7 '@storybook/types': 7.6.7 - '@types/node': 18.19.36 + '@types/node': 18.19.39 ts-dedent: 2.2.0 transitivePeerDependencies: - encoding @@ -7029,7 +7208,7 @@ packages: resolution: {integrity: sha512-YL7e6H4iVcsDI0UpgpdQX2IiGDrlbgaQMHQgDLWXmZyKxBcy0ONROAX5zoT1ml44EHkL60TMaG4f7SinviJCog==} dependencies: '@storybook/csf-tools': 7.6.7 - unplugin: 1.10.1 + unplugin: 1.11.0 transitivePeerDependencies: - supports-color dev: true @@ -7041,7 +7220,7 @@ packages: '@babel/parser': 7.24.7 '@babel/traverse': 7.24.7 '@babel/types': 7.24.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/types': 7.6.7 fs-extra: 11.2.0 recast: 0.23.9 @@ -7057,7 +7236,7 @@ packages: '@babel/parser': 7.24.7 '@babel/traverse': 7.24.7 '@babel/types': 7.24.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/types': 8.1.10 fs-extra: 11.2.0 recast: 0.23.9 @@ -7066,8 +7245,8 @@ packages: - supports-color dev: true - /@storybook/csf@0.1.8: - resolution: {integrity: sha512-Ntab9o7LjBCbFIao5l42itFiaSh/Qu+l16l/r/9qmV9LnYZkO+JQ7tzhdlwpgJfhs+B5xeejpdAtftDRyXNajw==} + /@storybook/csf@0.1.11: + resolution: {integrity: sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==} dependencies: type-fest: 2.19.0 dev: true @@ -7112,7 +7291,7 @@ packages: '@storybook/channels': 7.6.7 '@storybook/client-logger': 7.6.7 '@storybook/core-events': 7.6.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 '@storybook/router': 7.6.7 '@storybook/theming': 7.6.7(react-dom@18.2.0)(react@18.2.0) @@ -7134,7 +7313,7 @@ packages: '@storybook/channels': 8.1.10 '@storybook/client-logger': 8.1.10 '@storybook/core-events': 8.1.10 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 '@storybook/icons': 1.2.9(react-dom@18.2.0)(react@18.2.0) '@storybook/router': 8.1.10 @@ -7184,7 +7363,7 @@ packages: '@types/babel__core': 7.20.5 '@types/semver': 7.5.8 pnp-webpack-plugin: 1.7.0(typescript@5.4.3) - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.13)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) semver: 7.6.2 transitivePeerDependencies: - '@types/webpack' @@ -7199,7 +7378,7 @@ packages: - webpack-plugin-serve dev: true - /@storybook/preset-react-webpack@7.6.7(@babel/core@7.22.5)(@swc/core@1.6.3)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3): + /@storybook/preset-react-webpack@7.6.7(@babel/core@7.22.5)(@swc/core@1.6.13)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3): resolution: {integrity: sha512-olKTivJmbyuiPIa99/4Gx3zxbBplyXgbNso9ZAXHnSf7rBD0irV5oRqk+gFlEFJDHkK9vnpWMenly7vzX8QCXQ==} engines: {node: '>=16.0.0'} peerDependencies: @@ -7222,7 +7401,7 @@ packages: '@storybook/node-logger': 7.6.7 '@storybook/react': 7.6.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.4.3)(webpack@5.91.0) - '@types/node': 18.19.36 + '@types/node': 18.19.39 '@types/semver': 7.5.8 babel-plugin-add-react-displayname: 0.0.5 fs-extra: 11.2.0 @@ -7233,7 +7412,7 @@ packages: react-refresh: 0.14.0 semver: 7.6.2 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) transitivePeerDependencies: - '@swc/core' - '@types/webpack' @@ -7255,14 +7434,14 @@ packages: '@storybook/channels': 7.6.7 '@storybook/client-logger': 7.6.7 '@storybook/core-events': 7.6.7 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 '@storybook/types': 7.6.7 '@types/qs': 6.9.15 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 - qs: 6.12.1 + qs: 6.12.3 synchronous-promise: 2.0.17 ts-dedent: 2.2.0 util-deprecate: 1.0.2 @@ -7274,14 +7453,14 @@ packages: '@storybook/channels': 8.1.10 '@storybook/client-logger': 8.1.10 '@storybook/core-events': 8.1.10 - '@storybook/csf': 0.1.8 + '@storybook/csf': 0.1.11 '@storybook/global': 5.0.0 '@storybook/types': 8.1.10 '@types/qs': 6.9.15 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 - qs: 6.12.1 + qs: 6.12.3 tiny-invariant: 1.3.3 ts-dedent: 2.2.0 util-deprecate: 1.0.2 @@ -7305,7 +7484,7 @@ packages: react-docgen-typescript: 2.2.2(typescript@5.4.3) tslib: 2.6.3 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) transitivePeerDependencies: - supports-color dev: true @@ -7320,7 +7499,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/react-webpack5@7.6.7(@babel/core@7.22.5)(@swc/core@1.6.3)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3): + /@storybook/react-webpack5@7.6.7(@babel/core@7.22.5)(@swc/core@1.6.13)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3): resolution: {integrity: sha512-/HK+v8vmeApN4WI5RyaDdhPhjFuEQfMQmvZLl+ewpamhJNMRr4nvrdvxOSfBw46zFubKgieuxEcW+VxHwvZ1og==} engines: {node: '>=16.0.0'} peerDependencies: @@ -7336,9 +7515,9 @@ packages: dependencies: '@babel/core': 7.22.5 '@storybook/builder-webpack5': 7.6.7(esbuild@0.21.3)(typescript@5.4.3) - '@storybook/preset-react-webpack': 7.6.7(@babel/core@7.22.5)(@swc/core@1.6.3)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) + '@storybook/preset-react-webpack': 7.6.7(@babel/core@7.22.5)(@swc/core@1.6.13)(esbuild@0.21.3)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) '@storybook/react': 7.6.7(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.3) - '@types/node': 18.19.36 + '@types/node': 18.19.39 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) typescript: 5.4.3 @@ -7379,7 +7558,7 @@ packages: '@storybook/types': 7.6.7 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 - '@types/node': 18.19.36 + '@types/node': 18.19.39 acorn: 7.4.1 acorn-jsx: 5.3.2(acorn@7.4.1) acorn-walk: 7.2.0 @@ -7404,7 +7583,7 @@ packages: dependencies: '@storybook/client-logger': 7.6.7 memoizerific: 1.11.3 - qs: 6.12.1 + qs: 6.12.3 dev: true /@storybook/router@8.1.10: @@ -7412,7 +7591,7 @@ packages: dependencies: '@storybook/client-logger': 8.1.10 memoizerific: 1.11.3 - qs: 6.12.1 + qs: 6.12.3 dev: true /@storybook/telemetry@8.1.10(prettier@3.3.2): @@ -7607,88 +7786,88 @@ packages: transitivePeerDependencies: - supports-color - /@swc/core-darwin-arm64@1.6.3: - resolution: {integrity: sha512-3r7cJf1BcE30iyF1rnOSKrEzIR+cqnyYSZvivrm62TZdXVsIjfXe1xulsKGxZgNeLY5erIu7ukvMvBvPhnQvqA==} + /@swc/core-darwin-arm64@1.6.13: + resolution: {integrity: sha512-SOF4buAis72K22BGJ3N8y88mLNfxLNprTuJUpzikyMGrvkuBFNcxYtMhmomO0XHsgLDzOJ+hWzcgjRNzjMsUcQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] requiresBuild: true optional: true - /@swc/core-darwin-x64@1.6.3: - resolution: {integrity: sha512-8GLZ23IgVpF5xh2SbS5ZW/12/EEBuRU1hFOLB5rKERJU0y1RJ6YhDMf/FuOWhfHQcFM7TeedBwHIzaF+tdKKlw==} + /@swc/core-darwin-x64@1.6.13: + resolution: {integrity: sha512-AW8akFSC+tmPE6YQQvK9S2A1B8pjnXEINg+gGgw0KRUUXunvu1/OEOeC5L2Co1wAwhD7bhnaefi06Qi9AiwOag==} engines: {node: '>=10'} cpu: [x64] os: [darwin] requiresBuild: true optional: true - /@swc/core-linux-arm-gnueabihf@1.6.3: - resolution: {integrity: sha512-VQ/bduX7WhLOlGbJLMG7UH0LBehjjx43R4yuk55rjjJLqpvX5fQzMsWhQdIZ5vsc+4ORzdgtEAlpumTv6bsD1A==} + /@swc/core-linux-arm-gnueabihf@1.6.13: + resolution: {integrity: sha512-f4gxxvDXVUm2HLYXRd311mSrmbpQF2MZ4Ja6XCQz1hWAxXdhRl1gpnZ+LH/xIfGSwQChrtLLVrkxdYUCVuIjFg==} engines: {node: '>=10'} cpu: [arm] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-gnu@1.6.3: - resolution: {integrity: sha512-jHIQ/PCwtdDBIF/BiC5DochswuCAIW/T5skJ+eDMbta7+QtEnZCXTZWpT5ORoEY/gtsE2fjpOA4TS6fBBvXqUw==} + /@swc/core-linux-arm64-gnu@1.6.13: + resolution: {integrity: sha512-Nf/eoW2CbG8s+9JoLtjl9FByBXyQ5cjdBsA4efO7Zw4p+YSuXDgc8HRPC+E2+ns0praDpKNZtLvDtmF2lL+2Gg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-arm64-musl@1.6.3: - resolution: {integrity: sha512-gA6velEUD27Dwu0BlR9hCcFzkWq2YL2pDAU5qbgeuGhaMiUCBssfqTQB+2ctEnV+AZx+hSMJOHvtA+uFZjfRrw==} + /@swc/core-linux-arm64-musl@1.6.13: + resolution: {integrity: sha512-2OysYSYtdw79prJYuKIiux/Gj0iaGEbpS2QZWCIY4X9sGoETJ5iMg+lY+YCrIxdkkNYd7OhIbXdYFyGs/w5LDg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-gnu@1.6.3: - resolution: {integrity: sha512-fy4qoBDr5I8r+ZNCZxs/oZcmu4j/8mtSud6Ka102DaSxEjNg0vfIdo9ITsVIPsofhUTmDKjQsPB2O7YUlJAioQ==} + /@swc/core-linux-x64-gnu@1.6.13: + resolution: {integrity: sha512-PkR4CZYJNk5hcd2+tMWBpnisnmYsUzazI1O5X7VkIGFcGePTqJ/bWlfUIVVExWxvAI33PQFzLbzmN5scyIUyGQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-linux-x64-musl@1.6.3: - resolution: {integrity: sha512-c/twcMbq/Gpq47G+b3kWgoaCujpXO11aRgJx6am+CprvP4uNeBHEpQkxD+DQmdWFHisZd0i9GB8NG3e7L9Rz9Q==} + /@swc/core-linux-x64-musl@1.6.13: + resolution: {integrity: sha512-OdsY7wryTxCKwGQcwW9jwWg3cxaHBkTTHi91+5nm7hFPpmZMz1HivJrWAMwVE7iXFw+M4l6ugB/wCvpYrUAAjA==} engines: {node: '>=10'} cpu: [x64] os: [linux] requiresBuild: true optional: true - /@swc/core-win32-arm64-msvc@1.6.3: - resolution: {integrity: sha512-y6RxMtX45acReQmzkxcEfJscfBXce6QjuNgWQHHs9exA592BZzmolDUwgmAyjyvopz1lWX+KdymdZFKvuDSx4w==} + /@swc/core-win32-arm64-msvc@1.6.13: + resolution: {integrity: sha512-ap6uNmYjwk9M/+bFEuWRNl3hq4VqgQ/Lk+ID/F5WGqczNr0L7vEf+pOsRAn0F6EV+o/nyb3ePt8rLhE/wjHpPg==} engines: {node: '>=10'} cpu: [arm64] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-ia32-msvc@1.6.3: - resolution: {integrity: sha512-41h7z3xgukl1HDDwhquaeOPSP1OWeHl+mWKnJVmmwd3ui/oowUDCO856qa6JagBgPSnAGfyXwv6vthuXwyCcWA==} + /@swc/core-win32-ia32-msvc@1.6.13: + resolution: {integrity: sha512-IJ8KH4yIUHTnS/U1jwQmtbfQals7zWPG0a9hbEfIr4zI0yKzjd83lmtS09lm2Q24QBWOCFGEEbuZxR4tIlvfzA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] requiresBuild: true optional: true - /@swc/core-win32-x64-msvc@1.6.3: - resolution: {integrity: sha512-//bnwo9b8Vp1ED06eXCHyGZ5xIpdkQgg2fuFDdtd1FITl7r5bdQh2ryRzPiKiGwgXZwZQitUshI4JeEX9IuW+Q==} + /@swc/core-win32-x64-msvc@1.6.13: + resolution: {integrity: sha512-f6/sx6LMuEnbuxtiSL/EkR0Y6qUHFw1XVrh6rwzKXptTipUdOY+nXpKoh+1UsBm/r7H0/5DtOdrn3q5ZHbFZjQ==} engines: {node: '>=10'} cpu: [x64] os: [win32] requiresBuild: true optional: true - /@swc/core@1.6.3: - resolution: {integrity: sha512-mZpei+LqE+AL+nwgERMQey9EJA9/yhHTN6nwbobH5GnSij/lhfTdGfAb1iumOrroqEcXbHUaK//7wOw7DjBGdA==} + /@swc/core@1.6.13: + resolution: {integrity: sha512-eailUYex6fkfaQTev4Oa3mwn0/e3mQU4H8y1WPuImYQESOQDtVrowwUGDSc19evpBbHpKtwM+hw8nLlhIsF+Tw==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -7698,29 +7877,29 @@ packages: optional: true dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.8 + '@swc/types': 0.1.9 optionalDependencies: - '@swc/core-darwin-arm64': 1.6.3 - '@swc/core-darwin-x64': 1.6.3 - '@swc/core-linux-arm-gnueabihf': 1.6.3 - '@swc/core-linux-arm64-gnu': 1.6.3 - '@swc/core-linux-arm64-musl': 1.6.3 - '@swc/core-linux-x64-gnu': 1.6.3 - '@swc/core-linux-x64-musl': 1.6.3 - '@swc/core-win32-arm64-msvc': 1.6.3 - '@swc/core-win32-ia32-msvc': 1.6.3 - '@swc/core-win32-x64-msvc': 1.6.3 + '@swc/core-darwin-arm64': 1.6.13 + '@swc/core-darwin-x64': 1.6.13 + '@swc/core-linux-arm-gnueabihf': 1.6.13 + '@swc/core-linux-arm64-gnu': 1.6.13 + '@swc/core-linux-arm64-musl': 1.6.13 + '@swc/core-linux-x64-gnu': 1.6.13 + '@swc/core-linux-x64-musl': 1.6.13 + '@swc/core-win32-arm64-msvc': 1.6.13 + '@swc/core-win32-ia32-msvc': 1.6.13 + '@swc/core-win32-x64-msvc': 1.6.13 /@swc/counter@0.1.3: resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - /@swc/types@0.1.8: - resolution: {integrity: sha512-RNFA3+7OJFNYY78x0FYwi1Ow+iF1eF5WvmfY1nXPOEH4R2p/D4Cr1vzje7dNAI2aLFqpv8Wyz4oKSWqIZArpQA==} + /@swc/types@0.1.9: + resolution: {integrity: sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg==} dependencies: '@swc/counter': 0.1.3 - /@testing-library/dom@10.1.0: - resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==} + /@testing-library/dom@10.3.1: + resolution: {integrity: sha512-q/WL+vlXMpC0uXDyfsMtc1rmotzLV8Y0gq6q1gfrrDjQeHoeLrqHbxdPvPNAh1i+xuJl7+BezywcXArz7vLqKQ==} engines: {node: '>=18'} dependencies: '@babel/code-frame': 7.24.7 @@ -7776,13 +7955,13 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@testing-library/user-event@14.4.3(@testing-library/dom@10.1.0): + /@testing-library/user-event@14.4.3(@testing-library/dom@10.3.1): resolution: {integrity: sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@testing-library/dom': '>=7.21.4' dependencies: - '@testing-library/dom': 10.1.0 + '@testing-library/dom': 10.3.1 dev: true /@testing-library/user-event@14.4.3(@testing-library/dom@9.3.4): @@ -7988,17 +8167,17 @@ packages: prosemirror-commands: 1.5.2 prosemirror-dropcursor: 1.8.1 prosemirror-gapcursor: 1.3.2 - prosemirror-history: 1.4.0 + prosemirror-history: 1.4.1 prosemirror-inputrules: 1.4.0 prosemirror-keymap: 1.2.2 prosemirror-markdown: 1.13.0 prosemirror-menu: 1.2.4 - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-schema-basic: 1.2.2 prosemirror-schema-list: 1.4.0 prosemirror-state: 1.4.3 prosemirror-tables: 1.3.7 - prosemirror-trailing-node: 2.0.8(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8) + prosemirror-trailing-node: 2.0.8(prosemirror-model@1.21.3)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8) prosemirror-transform: 1.9.0 prosemirror-view: 1.33.8 dev: false @@ -8196,7 +8375,7 @@ packages: /@types/connect-history-api-fallback@1.5.4: resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: - '@types/express-serve-static-core': 4.19.3 + '@types/express-serve-static-core': 4.19.5 '@types/node': 17.0.45 /@types/connect@3.4.38: @@ -8279,8 +8458,8 @@ packages: /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - /@types/express-serve-static-core@4.19.3: - resolution: {integrity: sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==} + /@types/express-serve-static-core@4.19.5: + resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} dependencies: '@types/node': 17.0.45 '@types/qs': 6.9.15 @@ -8291,7 +8470,7 @@ packages: resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.3 + '@types/express-serve-static-core': 4.19.5 '@types/qs': 6.9.15 '@types/serve-static': 1.15.7 @@ -8375,8 +8554,8 @@ packages: /@types/lodash@4.14.202: resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} - /@types/lodash@4.17.5: - resolution: {integrity: sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==} + /@types/lodash@4.17.6: + resolution: {integrity: sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==} /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} @@ -8410,14 +8589,14 @@ packages: /@types/node@17.0.45: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - /@types/node@18.19.36: - resolution: {integrity: sha512-tX1BNmYSWEvViftB26VLNxT6mEr37M7+ldUtq7rlKnv4/2fKYsJIOmqJAjT6h1DNuwQjIKgw3VJ/Dtw3yiTIQw==} + /@types/node@18.19.39: + resolution: {integrity: sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==} dependencies: undici-types: 5.26.5 dev: true - /@types/node@20.14.5: - resolution: {integrity: sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==} + /@types/node@20.14.10: + resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} dependencies: undici-types: 5.26.5 dev: false @@ -8627,7 +8806,7 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.1 + '@eslint-community/regexpp': 4.11.0 '@typescript-eslint/parser': 5.58.0(eslint@8.44.0)(typescript@5.4.3) '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@8.44.0)(typescript@5.4.3) @@ -8984,6 +9163,7 @@ packages: /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead /abbrev@2.0.0: resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} @@ -9009,12 +9189,12 @@ packages: acorn: 7.4.1 acorn-walk: 7.2.0 - /acorn-import-assertions@1.9.0(acorn@8.12.0): + /acorn-import-assertions@1.9.0(acorn@8.12.1): resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} peerDependencies: acorn: ^8 dependencies: - acorn: 8.12.0 + acorn: 8.12.1 /acorn-jsx@5.3.2(acorn@7.4.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -9024,12 +9204,12 @@ packages: acorn: 7.4.1 dev: true - /acorn-jsx@5.3.2(acorn@8.12.0): + /acorn-jsx@5.3.2(acorn@8.12.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.12.0 + acorn: 8.12.1 /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} @@ -9039,16 +9219,18 @@ packages: resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} dependencies: - acorn: 8.12.0 + acorn: 8.12.1 dev: true /acorn@7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} + hasBin: true - /acorn@8.12.0: - resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} + /acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} + hasBin: true /address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} @@ -9127,10 +9309,12 @@ packages: /ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} + hasBin: true /ansi-html@0.0.9: resolution: {integrity: sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg==} engines: {'0': node >= 0.8.0} + hasBin: true /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -9414,8 +9598,8 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.23.1 - caniuse-lite: 1.0.30001636 + browserslist: 4.23.2 + caniuse-lite: 1.0.30001641 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.1 @@ -9452,10 +9636,9 @@ packages: - debug dev: false - /axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - dependencies: - dequal: 2.0.3 + /axobject-query@3.2.4: + resolution: {integrity: sha512-aPTElBrbifBU1krmZxGZOlBkslORe7Ll7+BDnI50Wy4LgOt69luMgevkDfTq1O/ZgprooPCtWpjCwKSZw/iZ4A==} + engines: {node: '>= 0.4'} /babel-core@7.0.0-bridge.0(@babel/core@7.24.7): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} @@ -9514,7 +9697,7 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.91.0): resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} @@ -9526,7 +9709,7 @@ packages: '@babel/core': 7.24.7 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) dev: true /babel-plugin-add-react-displayname@0.0.5: @@ -9925,14 +10108,15 @@ packages: pako: 0.2.9 dev: true - /browserslist@4.23.1: - resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} + /browserslist@4.23.2: + resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true dependencies: - caniuse-lite: 1.0.30001636 - electron-to-chromium: 1.4.806 + caniuse-lite: 1.0.30001641 + electron-to-chromium: 1.4.823 node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.1) + update-browserslist-db: 1.1.0(browserslist@4.23.2) /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -10013,7 +10197,7 @@ packages: camelcase: 8.0.0 map-obj: 5.0.0 quick-lru: 6.1.2 - type-fest: 4.20.1 + type-fest: 4.21.0 dev: false /camelcase@5.3.1: @@ -10032,13 +10216,13 @@ packages: /caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.23.1 - caniuse-lite: 1.0.30001636 + browserslist: 4.23.2 + caniuse-lite: 1.0.30001641 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - /caniuse-lite@1.0.30001636: - resolution: {integrity: sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==} + /caniuse-lite@1.0.30001641: + resolution: {integrity: sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==} /canvg@3.0.10: resolution: {integrity: sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==} @@ -10471,6 +10655,10 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + /confbox@0.1.7: + resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + dev: true + /config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} dependencies: @@ -10545,7 +10733,7 @@ packages: /core-js-compat@3.37.1: resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 /core-js-pure@3.37.1: resolution: {integrity: sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==} @@ -10553,6 +10741,7 @@ packages: /core-js@2.6.12: resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. requiresBuild: true dev: true @@ -10563,7 +10752,7 @@ packages: /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - /cosmiconfig-typescript-loader@1.0.9(@swc/core@1.6.3)(@types/node@17.0.45)(cosmiconfig@7.1.0)(typescript@5.4.3): + /cosmiconfig-typescript-loader@1.0.9(@swc/core@1.6.13)(@types/node@17.0.45)(cosmiconfig@7.1.0)(typescript@5.4.3): resolution: {integrity: sha512-tRuMRhxN4m1Y8hP9SNYfz7jRwt8lZdWxdjg/ohg5esKmsndJIn4yT96oJVcf5x0eA11taXl+sIp+ielu529k6g==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -10573,7 +10762,7 @@ packages: dependencies: '@types/node': 17.0.45 cosmiconfig: 7.1.0 - ts-node: 10.9.2(@swc/core@1.6.3)(@types/node@17.0.45)(typescript@5.4.3) + ts-node: 10.9.2(@swc/core@1.6.13)(@types/node@17.0.45)(typescript@5.4.3) typescript: 5.4.3 transitivePeerDependencies: - '@swc/core' @@ -10606,10 +10795,10 @@ packages: '@craco/craco': ^7.0.0 react-scripts: ^5.0.0 dependencies: - '@craco/craco': 7.1.0(@swc/core@1.6.3)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3) + '@craco/craco': 7.1.0(@swc/core@1.6.13)(@types/node@17.0.45)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.4.3) esbuild-jest: 0.5.0(esbuild@0.21.3) esbuild-loader: 4.2.0(webpack@5.91.0) - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.13)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) transitivePeerDependencies: - esbuild - supports-color @@ -10723,15 +10912,15 @@ packages: webpack: optional: true dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) - postcss-modules-scope: 3.2.0(postcss@8.4.38) - postcss-modules-values: 4.0.0(postcss@8.4.38) + icss-utils: 5.1.0(postcss@8.4.39) + postcss: 8.4.39 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.39) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.39) + postcss-modules-scope: 3.2.0(postcss@8.4.39) + postcss-modules-values: 4.0.0(postcss@8.4.39) postcss-value-parser: 4.2.0 semver: 7.6.2 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /css-minimizer-webpack-plugin@3.4.1(esbuild@0.21.3)(webpack@5.91.0): resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} @@ -10759,7 +10948,7 @@ packages: schema-utils: 4.2.0 serialize-javascript: 6.0.2 source-map: 0.6.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /css-prefers-color-scheme@6.0.3(postcss@8.4.32): resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} @@ -10843,6 +11032,7 @@ packages: /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} + hasBin: true /cssnano-preset-default@5.2.14(postcss@8.4.32): resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} @@ -11185,6 +11375,7 @@ packages: /detect-port-alt@1.1.6: resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} engines: {node: '>= 4.2.1'} + hasBin: true dependencies: address: 1.2.2 debug: 2.6.9 @@ -11194,6 +11385,7 @@ packages: /detect-port@1.6.1: resolution: {integrity: sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==} engines: {node: '>= 4.0.0'} + hasBin: true dependencies: address: 1.2.2 debug: 4.3.5 @@ -11261,7 +11453,7 @@ packages: resolution: {integrity: sha512-4SbcbedPXTciySXiSnNNLuJXpvxFe5nqivbiEHXyL8P/w0wx2uW7YXNjnYgjW0e2e6vy+L/tMISU/oAiXCl57Q==} engines: {node: '>=10'} dependencies: - '@types/node': 20.14.5 + '@types/node': 20.14.10 jszip: 3.10.1 nanoid: 5.0.7 xml: 1.0.1 @@ -11317,6 +11509,7 @@ packages: /domexception@2.0.1: resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} engines: {node: '>=8'} + deprecated: Use your platform's native DOMException instead dependencies: webidl-conversions: 5.0.0 @@ -11339,8 +11532,8 @@ packages: domelementtype: 2.3.0 dev: false - /dompurify@2.5.5: - resolution: {integrity: sha512-FgbqnEPiv5Vdtwt6Mxl7XSylttCC03cqP5ldNT2z+Kj0nLxPHJH4+1Cyf5Jasxhw93Rl4Oo11qRoUV72fmya2Q==} + /dompurify@2.5.6: + resolution: {integrity: sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==} requiresBuild: true dev: false optional: true @@ -11414,6 +11607,7 @@ packages: /editorconfig@1.0.4: resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==} engines: {node: '>=14'} + hasBin: true dependencies: '@one-ini/wasm': 0.1.1 commander: 10.0.1 @@ -11427,11 +11621,12 @@ packages: /ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} + hasBin: true dependencies: jake: 10.9.1 - /electron-to-chromium@1.4.806: - resolution: {integrity: sha512-nkoEX2QIB8kwCOtvtgwhXWy2IHVcOLQZu9Qo36uaGB835mdX/h8uLRlosL6QIhLVUnAiicXRW00PwaPZC74Nrg==} + /electron-to-chromium@1.4.823: + resolution: {integrity: sha512-4h+oPeAiGQOHFyUJOqpoEcPj/xxlicxBzOErVeYVMMmAiXUXsGpsFd0QXBMaUUbnD8hhSfLf9uw+MlsoIA7j5w==} /emittery@0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} @@ -11491,6 +11686,7 @@ packages: /envinfo@7.13.0: resolution: {integrity: sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==} engines: {node: '>=4'} + hasBin: true dev: true /error-ex@1.3.2: @@ -11538,7 +11734,7 @@ packages: is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.1 + object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 regexp.prototype.flags: 1.5.2 @@ -11599,8 +11795,8 @@ packages: iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 - /es-module-lexer@1.5.3: - resolution: {integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==} + /es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} /es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} @@ -11686,7 +11882,7 @@ packages: esbuild: 0.21.3 get-tsconfig: 4.7.5 loader-utils: 2.0.4 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) webpack-sources: 1.4.3 dev: true @@ -11719,6 +11915,7 @@ packages: /esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} + hasBin: true requiresBuild: true optionalDependencies: '@esbuild/android-arm': 0.18.20 @@ -11748,6 +11945,7 @@ packages: /esbuild@0.20.2: resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} engines: {node: '>=12'} + hasBin: true requiresBuild: true optionalDependencies: '@esbuild/aix-ppc64': 0.20.2 @@ -11778,6 +11976,7 @@ packages: /esbuild@0.21.3: resolution: {integrity: sha512-Kgq0/ZsAPzKrbOjCQcjoSmPoWhlcVnGAUo7jvaLHoxW1Drto0KGkR1xBNg2Cp43b9ImvxmPEJZ9xkfcnqPsfBw==} engines: {node: '>=12'} + hasBin: true requiresBuild: true optionalDependencies: '@esbuild/aix-ppc64': 0.21.3 @@ -11830,6 +12029,7 @@ packages: /escodegen@1.14.3: resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} engines: {node: '>=4.0'} + hasBin: true dependencies: esprima: 4.0.1 estraverse: 4.3.0 @@ -11841,6 +12041,7 @@ packages: /escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} + hasBin: true dependencies: esprima: 4.0.1 estraverse: 5.3.0 @@ -11895,7 +12096,7 @@ packages: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.13.1 + is-core-module: 2.14.0 resolve: 1.22.8 transitivePeerDependencies: - supports-color @@ -11963,7 +12164,7 @@ packages: eslint-import-resolver-node: 0.3.9 eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.58.0)(eslint-import-resolver-node@0.3.9)(eslint@8.44.0) hasown: 2.0.2 - is-core-module: 2.13.1 + is-core-module: 2.14.0 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 @@ -12009,7 +12210,7 @@ packages: array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.7 axe-core: 4.9.1 - axobject-query: 3.2.1 + axobject-query: 3.2.4 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 eslint: 8.44.0 @@ -12110,14 +12311,15 @@ packages: micromatch: 4.0.7 normalize-path: 3.0.0 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /eslint@8.44.0: resolution: {integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) - '@eslint-community/regexpp': 4.10.1 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.44.0 '@humanwhocodes/config-array': 0.11.14 @@ -12132,7 +12334,7 @@ packages: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -12164,7 +12366,7 @@ packages: hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.1 + '@eslint-community/regexpp': 4.11.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.57.0 '@humanwhocodes/config-array': 0.11.14 @@ -12180,7 +12382,7 @@ packages: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -12219,20 +12421,22 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.12.0 - acorn-jsx: 5.3.2(acorn@8.12.0) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 /esprima@1.2.2: resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} engines: {node: '>=0.4.0'} + hasBin: true /esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} + hasBin: true - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + /esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 @@ -12474,10 +12678,6 @@ packages: /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - /fast-loops@1.1.3: - resolution: {integrity: sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==} - dev: false - /fast-shallow-equal@1.0.0: resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} dev: false @@ -12565,7 +12765,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /file-saver@2.0.5: resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} @@ -12680,13 +12880,14 @@ packages: /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true dev: true /flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - /flow-parser@0.238.0: - resolution: {integrity: sha512-VE7XSv1epljsIN2YeBnxCmGJihpNIAnLLu/pPOdA+Gkso7qDltJwUi6vfHjgxdBbjSdAuPGnhuOHJUQG+yYwIg==} + /flow-parser@0.239.1: + resolution: {integrity: sha512-topOrETNxJ6T2gAnQiWqAlzGPj8uI2wtmNOlDIMNB+qyvGJZ6R++STbUOTAYmvPhOMz2gXnXPH0hOvURYmrBow==} engines: {node: '>=0.4.0'} dev: true @@ -12757,7 +12958,7 @@ packages: semver: 7.6.2 tapable: 1.1.3 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.4.3)(webpack@5.91.0): resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} @@ -12779,7 +12980,7 @@ packages: semver: 7.6.2 tapable: 2.2.1 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) dev: true /form-data@2.5.1: @@ -13008,12 +13209,13 @@ packages: /giget@1.2.3: resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} + hasBin: true dependencies: citty: 0.1.6 consola: 3.2.3 defu: 6.1.4 node-fetch-native: 1.6.4 - nypm: 0.3.8 + nypm: 0.3.9 ohash: 1.1.3 pathe: 1.1.2 tar: 6.2.1 @@ -13038,14 +13240,13 @@ packages: /glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - /glob@10.4.2: - resolution: {integrity: sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==} - engines: {node: '>=16 || 14 >=14.18'} + /glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true dependencies: foreground-child: 3.2.1 - jackspeak: 3.4.0 - minimatch: 9.0.4 + jackspeak: 3.4.3 + minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.0 path-scurry: 1.11.1 @@ -13110,8 +13311,8 @@ packages: merge2: 1.4.1 slash: 3.0.0 - /globby@14.0.1: - resolution: {integrity: sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==} + /globby@14.0.2: + resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} engines: {node: '>=18'} dependencies: '@sindresorhus/merge-streams': 2.3.0 @@ -13172,6 +13373,7 @@ packages: /gunzip-maybe@1.4.2: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} + hasBin: true dependencies: browserify-zlib: 0.1.4 is-deflate: 1.0.0 @@ -13193,6 +13395,7 @@ packages: /handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} + hasBin: true dependencies: minimist: 1.2.8 neo-async: 2.6.2 @@ -13286,6 +13489,7 @@ packages: /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true /hex-color-regex@1.1.0: resolution: {integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==} @@ -13346,6 +13550,7 @@ packages: /html-minifier-terser@6.1.0: resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} engines: {node: '>=12'} + hasBin: true dependencies: camel-case: 4.1.2 clean-css: 5.3.3 @@ -13353,7 +13558,7 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.31.1 + terser: 5.31.2 /html-tags@3.3.1: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} @@ -13377,7 +13582,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /html2canvas@1.4.1: resolution: {integrity: sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==} @@ -13506,6 +13711,7 @@ packages: /husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} + hasBin: true dev: true /hyphenate-style-name@1.1.0: @@ -13523,13 +13729,13 @@ packages: dependencies: safer-buffer: 2.1.2 - /icss-utils@5.1.0(postcss@8.4.38): + /icss-utils@5.1.0(postcss@8.4.39): resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.38 + postcss: 8.4.39 /idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} @@ -13572,6 +13778,7 @@ packages: /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} + hasBin: true dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 @@ -13605,11 +13812,10 @@ packages: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} dev: false - /inline-style-prefixer@7.0.0: - resolution: {integrity: sha512-I7GEdScunP1dQ6IM2mQWh6v0mOYdYmH3Bp31UecKdrcUgcURTcctSe1IECdUznSHKSmsHtjrT3CwCPI1pyxfUQ==} + /inline-style-prefixer@7.0.1: + resolution: {integrity: sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==} dependencies: css-in-js-utils: 3.1.0 - fast-loops: 1.1.3 dev: false /internal-slot@1.0.7: @@ -13705,6 +13911,7 @@ packages: /is-ci@2.0.0: resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + hasBin: true dependencies: ci-info: 2.0.0 dev: true @@ -13720,8 +13927,9 @@ packages: rgba-regex: 1.0.0 dev: true - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + /is-core-module@2.14.0: + resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + engines: {node: '>= 0.4'} dependencies: hasown: 2.0.2 @@ -13767,6 +13975,7 @@ packages: /is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} + hasBin: true /is-dom@1.1.0: resolution: {integrity: sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==} @@ -14086,9 +14295,8 @@ packages: reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 - /jackspeak@3.4.0: - resolution: {integrity: sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==} - engines: {node: '>=14'} + /jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: @@ -14097,6 +14305,7 @@ packages: /jake@10.9.1: resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} engines: {node: '>=10'} + hasBin: true dependencies: async: 3.2.5 chalk: 4.1.2 @@ -14753,14 +14962,16 @@ packages: /jiti@1.21.6: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true /js-beautify@1.15.1: resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==} engines: {node: '>=14'} + hasBin: true dependencies: config-chain: 1.1.13 editorconfig: 1.0.4 - glob: 10.4.2 + glob: 10.4.5 js-cookie: 3.0.5 nopt: 7.2.1 dev: true @@ -14785,6 +14996,7 @@ packages: /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true dependencies: argparse: 2.0.1 @@ -14810,7 +15022,7 @@ packages: '@babel/register': 7.24.6(@babel/core@7.24.7) babel-core: 7.0.0-bridge.0(@babel/core@7.24.7) chalk: 4.1.2 - flow-parser: 0.238.0 + flow-parser: 0.239.1 graceful-fs: 4.2.11 micromatch: 4.0.7 neo-async: 2.6.2 @@ -14844,7 +15056,7 @@ packages: '@babel/register': 7.24.6(@babel/core@7.24.7) babel-core: 7.0.0-bridge.0(@babel/core@7.24.7) chalk: 4.1.2 - flow-parser: 0.238.0 + flow-parser: 0.239.1 graceful-fs: 4.2.11 micromatch: 4.0.7 neo-async: 2.6.2 @@ -14866,7 +15078,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.12.0 + acorn: 8.12.1 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 @@ -14899,10 +15111,12 @@ packages: /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} + hasBin: true /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -14917,9 +15131,9 @@ packages: dependencies: '@apidevtools/json-schema-ref-parser': 11.6.4 '@types/json-schema': 7.0.15 - '@types/lodash': 4.17.5 + '@types/lodash': 4.17.6 cli-color: 2.0.4 - glob: 10.4.2 + glob: 10.4.5 is-glob: 4.0.3 js-yaml: 4.1.0 lodash: 4.17.21 @@ -14947,12 +15161,14 @@ packages: /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true dependencies: minimist: 1.2.8 /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} + hasBin: true /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -14982,7 +15198,7 @@ packages: optionalDependencies: canvg: 3.0.10 core-js: 3.31.0 - dompurify: 2.5.5 + dompurify: 2.5.6 html2canvas: 1.4.1 dev: false @@ -15182,6 +15398,7 @@ packages: /lint-staged@13.2.3: resolution: {integrity: sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg==} engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true dependencies: chalk: 5.2.0 cli-truncate: 3.1.0 @@ -15192,7 +15409,7 @@ packages: listr2: 5.0.8 micromatch: 4.0.7 normalize-path: 3.0.0 - object-inspect: 1.13.1 + object-inspect: 1.13.2 pidtree: 0.6.0 string-argv: 0.3.2 yaml: 2.4.5 @@ -15342,9 +15559,8 @@ packages: dependencies: tslib: 2.6.3 - /lru-cache@10.2.2: - resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} - engines: {node: 14 || >=16.14} + /lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -15359,6 +15575,7 @@ packages: /lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true dev: true /magic-string@0.25.9: @@ -15369,7 +15586,7 @@ packages: /magic-string@0.30.10: resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 dev: true /make-dir@2.1.0: @@ -15428,6 +15645,7 @@ packages: /markdown-it@14.1.0: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true dependencies: argparse: 2.0.1 entities: 4.5.0 @@ -15446,8 +15664,8 @@ packages: react: 18.2.0 dev: true - /marked@13.0.1: - resolution: {integrity: sha512-7kBohS6GrZKvCsNXZyVVXSW7/hGBHe49ng99YPkDCckSUrrG7MSFLCexsRxptzOmyW2eT5dySh4Md1V6my52fA==} + /marked@13.0.2: + resolution: {integrity: sha512-J6CPjP8pS5sgrRqxVRvkCIkZ6MFdRIjDkwUwgJ9nL2fbmM6qGQeB2C16hi8Cc9BOzj6xXzy0jyi0iPIfnMHYzA==} engines: {node: '>= 18'} hasBin: true dev: false @@ -15458,6 +15676,7 @@ packages: /mathjs@11.8.2: resolution: {integrity: sha512-ZePu0oDbM0vuFExikIMY/9syjo/jbgNbX6ti+iMdaALDuxciMCsXIslGDBEn7QCpCWYBiVCYmc0lsmk5bwHBdQ==} engines: {node: '>= 14'} + hasBin: true dependencies: '@babel/runtime': 7.24.7 complex.js: 2.1.1 @@ -15804,6 +16023,7 @@ packages: /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} + hasBin: true /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -15833,7 +16053,7 @@ packages: dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -15856,8 +16076,8 @@ packages: brace-expansion: 2.0.1 dev: true - /minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 @@ -15918,6 +16138,15 @@ packages: hasBin: true dev: false + /mlly@1.7.1: + resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + dependencies: + acorn: 8.12.1 + pathe: 1.1.2 + pkg-types: 1.1.3 + ufo: 1.5.3 + dev: true + /mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -15934,6 +16163,7 @@ packages: /multicast-dns@7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true dependencies: dns-packet: 5.6.1 thunky: 1.1.0 @@ -15951,11 +16181,11 @@ packages: react: '*' react-dom: '*' dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 css-tree: 1.1.3 csstype: 3.1.3 fastest-stable-stringify: 2.0.2 - inline-style-prefixer: 7.0.0 + inline-style-prefixer: 7.0.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) rtl-css-js: 1.16.1 @@ -15977,10 +16207,12 @@ packages: /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true /nanoid@5.0.7: resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} engines: {node: ^18 || >=20} + hasBin: true dev: false /nanomatch@1.2.13: @@ -16107,6 +16339,7 @@ packages: /nopt@7.2.1: resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true dependencies: abbrev: 2.0.0 dev: true @@ -16167,14 +16400,16 @@ packages: /nwsapi@2.2.10: resolution: {integrity: sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ==} - /nypm@0.3.8: - resolution: {integrity: sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==} + /nypm@0.3.9: + resolution: {integrity: sha512-BI2SdqqTHg2d4wJh8P9A1W+bslg33vOE9IZDY6eR2QC+Pu1iNBVZUqczrd43rJb+fMzHU7ltAYKsEFY/kHMFcw==} engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true dependencies: citty: 0.1.6 consola: 3.2.3 execa: 8.0.1 pathe: 1.1.2 + pkg-types: 1.1.3 ufo: 1.5.3 dev: true @@ -16195,8 +16430,9 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} /object-is@1.1.6: resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} @@ -16296,16 +16532,16 @@ packages: resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} dev: true - /ol-ext@4.0.18(ol@9.2.4): - resolution: {integrity: sha512-zzeTAoCg9IocaM7LlXiLNnVCgVmfxxLzlDTWvYn3Y2gFxtICHSfRrIQl/8vumgBjftBksVl1Fds8P5uFReTmew==} + /ol-ext@4.0.19(ol@9.2.4): + resolution: {integrity: sha512-QMhmys/ux7eYKZFtca6CeK+l9YgZb5yL5hHFJLKkiObw/qz6xKu+gy+SSnF/QyvJbfAJDleuFHf2mqkYqC9hZQ==} peerDependencies: ol: '>= 5.3.0' dependencies: ol: 9.2.4 dev: false - /ol-mapbox-style@12.3.3(ol@9.2.4): - resolution: {integrity: sha512-Wyb1vSxTl/c09S9yC/Dcr7XWQf5u19/9BriqOiDJRgbjLTAbrWXW8l+5N9E/I0fV2gcTQDE+7iFtvVOvXcTmMA==} + /ol-mapbox-style@12.3.4(ol@9.2.4): + resolution: {integrity: sha512-TxGJZw4hmvc6n5dHSyAE8ZpgALJ6hVG5Q9yl0j2Q1KmLS9iq4wMpb383TAitWiG86SvJV4oDkWMGkyyMLfVyew==} peerDependencies: ol: '*' dependencies: @@ -16436,7 +16672,7 @@ packages: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - yocto-queue: 1.0.0 + yocto-queue: 1.1.1 dev: true /p-locate@3.0.0: @@ -16595,7 +16831,7 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} dependencies: - lru-cache: 10.2.2 + lru-cache: 10.4.3 minipass: 7.1.2 /path-to-regexp@0.1.7: @@ -16643,6 +16879,7 @@ packages: /pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} + hasBin: true dev: true /pify@2.3.0: @@ -16685,6 +16922,14 @@ packages: find-up: 6.3.0 dev: true + /pkg-types@1.1.3: + resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==} + dependencies: + confbox: 0.1.7 + mlly: 1.7.1 + pathe: 1.1.2 + dev: true + /pkg-up@3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} @@ -16741,14 +16986,14 @@ packages: postcss: 8.4.32 postcss-selector-parser: 6.1.0 - /postcss-browser-comments@4.0.0(browserslist@4.23.1)(postcss@8.4.32): + /postcss-browser-comments@4.0.0(browserslist@4.23.2)(postcss@8.4.32): resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==} engines: {node: '>=8'} peerDependencies: browserslist: '>=4' postcss: '>=8' dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 postcss: 8.4.32 /postcss-calc@8.2.4(postcss@8.4.32): @@ -16802,7 +17047,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.32 @@ -16814,7 +17059,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17018,7 +17263,7 @@ packages: klona: 2.0.6 postcss: 8.4.32 semver: 7.6.2 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /postcss-logical@5.0.4(postcss@8.4.32): resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} @@ -17052,7 +17297,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 caniuse-api: 3.0.0 cssnano-utils: 3.1.0(postcss@8.4.32) postcss: 8.4.32 @@ -17084,7 +17329,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 cssnano-utils: 3.1.0(postcss@8.4.32) postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17098,42 +17343,42 @@ packages: postcss: 8.4.32 postcss-selector-parser: 6.1.0 - /postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + /postcss-modules-extract-imports@3.1.0(postcss@8.4.39): resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.38 + postcss: 8.4.39 - /postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + /postcss-modules-local-by-default@4.0.5(postcss@8.4.39): resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 + icss-utils: 5.1.0(postcss@8.4.39) + postcss: 8.4.39 postcss-selector-parser: 6.1.0 postcss-value-parser: 4.2.0 - /postcss-modules-scope@3.2.0(postcss@8.4.38): + /postcss-modules-scope@3.2.0(postcss@8.4.39): resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - postcss: 8.4.38 + postcss: 8.4.39 postcss-selector-parser: 6.1.0 - /postcss-modules-values@4.0.0(postcss@8.4.38): + /postcss-modules-values@4.0.0(postcss@8.4.39): resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} engines: {node: ^10 || ^12 || >= 14} peerDependencies: postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 + icss-utils: 5.1.0(postcss@8.4.39) + postcss: 8.4.39 /postcss-nested@6.0.1(postcss@8.4.32): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} @@ -17213,7 +17458,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 postcss: 8.4.32 postcss-value-parser: 4.2.0 @@ -17236,7 +17481,7 @@ packages: postcss: 8.4.32 postcss-value-parser: 4.2.0 - /postcss-normalize@10.0.1(browserslist@4.23.1)(postcss@8.4.32): + /postcss-normalize@10.0.1(browserslist@4.23.2)(postcss@8.4.32): resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==} engines: {node: '>= 12'} peerDependencies: @@ -17244,9 +17489,9 @@ packages: postcss: '>= 8' dependencies: '@csstools/normalize.css': 12.1.1 - browserslist: 4.23.1 + browserslist: 4.23.2 postcss: 8.4.32 - postcss-browser-comments: 4.0.0(browserslist@4.23.1)(postcss@8.4.32) + postcss-browser-comments: 4.0.0(browserslist@4.23.2)(postcss@8.4.32) sanitize.css: 13.0.0 /postcss-opacity-percentage@1.1.3(postcss@8.4.32): @@ -17313,7 +17558,7 @@ packages: '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.32) '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.32) autoprefixer: 10.4.16(postcss@8.4.32) - browserslist: 4.23.1 + browserslist: 4.23.2 css-blank-pseudo: 3.0.3(postcss@8.4.32) css-has-pseudo: 3.0.4(postcss@8.4.32) css-prefers-color-scheme: 6.0.3(postcss@8.4.32) @@ -17364,7 +17609,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 caniuse-api: 3.0.0 postcss: 8.4.32 @@ -17430,8 +17675,8 @@ packages: picocolors: 1.0.1 source-map-js: 1.2.0 - /postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + /postcss@8.4.39: + resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 @@ -17454,6 +17699,7 @@ packages: /prettier@3.0.0: resolution: {integrity: sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==} engines: {node: '>=14'} + hasBin: true dev: true /prettier@3.3.2: @@ -17569,7 +17815,7 @@ packages: /prosemirror-commands@1.5.2: resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17586,13 +17832,13 @@ packages: resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-view: 1.33.8 dev: false - /prosemirror-history@1.4.0: - resolution: {integrity: sha512-UUiGzDVcqo1lovOPdi9YxxUps3oBFWAIYkXLu3Ot+JPv1qzVogRbcizxK3LhHmtaUxclohgiOVesRw5QSlMnbQ==} + /prosemirror-history@1.4.1: + resolution: {integrity: sha512-2JZD8z2JviJrboD9cPuX/Sv/1ChFng+xh2tChQ2X4bB2HeK+rra/bmJ3xGntCcjhOqIzSDG6Id7e8RJ9QPXLEQ==} dependencies: prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 @@ -17618,7 +17864,7 @@ packages: resolution: {integrity: sha512-UziddX3ZYSYibgx8042hfGKmukq5Aljp2qoBiJRejD/8MH70siQNz5RB1TrdTPheqLMy4aCe4GYNF10/3lQS5g==} dependencies: markdown-it: 14.1.0 - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 dev: false /prosemirror-menu@1.2.4: @@ -17626,12 +17872,12 @@ packages: dependencies: crelt: 1.0.6 prosemirror-commands: 1.5.2 - prosemirror-history: 1.4.0 + prosemirror-history: 1.4.1 prosemirror-state: 1.4.3 dev: false - /prosemirror-model@1.21.1: - resolution: {integrity: sha512-IVBAuMqOfltTr7yPypwpfdGT+6rGAteVOw2FO6GEvCGGa1ZwxLseqC1Eax/EChDvG/xGquB2d/hLdgh3THpsYg==} + /prosemirror-model@1.21.3: + resolution: {integrity: sha512-nt2Xs/RNGepD9hrrkzXvtCm1mpGJoQfFSPktGa0BF/aav6XsnmVGZ9sTXNWRLupAz5SCLa3EyKlFeK7zJWROKg==} dependencies: orderedmap: 2.1.1 dev: false @@ -17639,13 +17885,13 @@ packages: /prosemirror-schema-basic@1.2.2: resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 dev: false /prosemirror-schema-list@1.4.0: resolution: {integrity: sha512-nZOIq/AkBSzCENxUyLm5ltWE53e2PLk65ghMN8qLQptOmDVixZlPqtMeQdiNw0odL9vNpalEjl3upgRkuJ/Jyw==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17653,7 +17899,7 @@ packages: /prosemirror-state@1.4.3: resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-transform: 1.9.0 prosemirror-view: 1.33.8 dev: false @@ -17662,13 +17908,13 @@ packages: resolution: {integrity: sha512-oEwX1wrziuxMtwFvdDWSFHVUWrFJWt929kVVfHvtTi8yvw+5ppxjXZkMG/fuTdFo+3DXyIPSKfid+Be1npKXDA==} dependencies: prosemirror-keymap: 1.2.2 - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 prosemirror-view: 1.33.8 dev: false - /prosemirror-trailing-node@2.0.8(prosemirror-model@1.21.1)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8): + /prosemirror-trailing-node@2.0.8(prosemirror-model@1.21.3)(prosemirror-state@1.4.3)(prosemirror-view@1.33.8): resolution: {integrity: sha512-ujRYhSuhQb1Jsarh1IHqb2KoSnRiD7wAMDGucP35DN7j5af6X7B18PfdPIrbwsPTqIAj0fyOvxbuPsWhNvylmA==} peerDependencies: prosemirror-model: ^1.19.0 @@ -17677,7 +17923,7 @@ packages: dependencies: '@remirror/core-constants': 2.0.2 escape-string-regexp: 4.0.0 - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-view: 1.33.8 dev: false @@ -17685,13 +17931,13 @@ packages: /prosemirror-transform@1.9.0: resolution: {integrity: sha512-5UXkr1LIRx3jmpXXNKDhv8OyAOeLTGuXNwdVfg8x27uASna/wQkr9p6fD3eupGOi4PLJfbezxTyi/7fSJypXHg==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 dev: false /prosemirror-view@1.33.8: resolution: {integrity: sha512-4PhMr/ufz2cdvFgpUAnZfs+0xij3RsFysreeG9V/utpwX7AJtYCDVyuRxzWoMJIEf4C7wVihuBNMPpFLPCiLQw==} dependencies: - prosemirror-model: 1.21.1 + prosemirror-model: 1.21.3 prosemirror-state: 1.4.3 prosemirror-transform: 1.9.0 dev: false @@ -17760,6 +18006,10 @@ packages: /q@1.5.1: resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + deprecated: |- + You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. + + (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} @@ -17767,8 +18017,8 @@ packages: dependencies: side-channel: 1.0.6 - /qs@6.12.1: - resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} + /qs@6.12.3: + resolution: {integrity: sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.6 @@ -17851,7 +18101,7 @@ packages: peerDependencies: react-scripts: '>=2.1.3' dependencies: - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.13)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3) semver: 5.7.2 dev: true @@ -17919,7 +18169,7 @@ packages: dependencies: '@babel/code-frame': 7.24.7 address: 1.2.2 - browserslist: 4.23.1 + browserslist: 4.23.2 chalk: 4.1.2 cross-spawn: 7.0.3 detect-port-alt: 1.1.6 @@ -17942,7 +18192,7 @@ packages: strip-ansi: 6.0.1 text-table: 0.2.0 typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) transitivePeerDependencies: - eslint - supports-color @@ -18242,7 +18492,7 @@ packages: use-sidecar: 1.1.2(@types/react@18.2.45)(react@18.2.0) dev: true - /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.3)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3): + /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(@swc/core@1.6.13)(esbuild@0.21.3)(eslint@8.44.0)(react@18.2.0)(sass@1.71.1)(typescript@5.4.3): resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -18262,7 +18512,7 @@ packages: babel-plugin-named-asset-import: 0.3.8(@babel/core@7.22.5) babel-preset-react-app: 10.0.1 bfj: 7.1.0 - browserslist: 4.23.1 + browserslist: 4.23.2 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 css-loader: 6.10.0(webpack@5.91.0) @@ -18283,7 +18533,7 @@ packages: postcss: 8.4.32 postcss-flexbugs-fixes: 5.0.2(postcss@8.4.32) postcss-loader: 6.2.1(postcss@8.4.32)(webpack@5.91.0) - postcss-normalize: 10.0.1(browserslist@4.23.1)(postcss@8.4.32) + postcss-normalize: 10.0.1(browserslist@4.23.2)(postcss@8.4.32) postcss-preset-env: 7.8.3(postcss@8.4.32) prompts: 2.4.2 react: 18.2.0 @@ -18297,9 +18547,9 @@ packages: source-map-loader: 3.0.2(webpack@5.91.0) style-loader: 3.3.4(webpack@5.91.0) tailwindcss: 3.4.4 - terser-webpack-plugin: 5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.6.13)(esbuild@0.21.3)(webpack@5.91.0) typescript: 5.4.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) webpack-dev-server: 4.15.2(webpack@5.91.0) webpack-manifest-plugin: 4.1.1(webpack@5.91.0) workbox-webpack-plugin: 6.6.0(webpack@5.91.0) @@ -18413,8 +18663,8 @@ packages: tslib: 2.6.3 dev: false - /react-use@17.4.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-1jPtmWLD8OJJNYCdYLJEH/HM+bPDfJuyGwCYeJFgPmWY8ttwpgZnW5QnzgM55CYUByUiTjHxsGOnEpLl6yQaoQ==} + /react-use@17.5.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-PbfwSPMwp/hoL847rLnm/qkjg3sTRCvn6YhUZiHaUa3FA6/aNoFX79ul5Xt70O1rK+9GxSVqkY0eTwMdsR/bWg==} peerDependencies: react: '*' react-dom: '*' @@ -18620,6 +18870,7 @@ packages: /regjsparser@0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true dependencies: jsesc: 0.5.0 @@ -18740,6 +18991,7 @@ packages: /resolve-url@0.2.1: resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated dev: true /resolve.exports@1.1.1: @@ -18750,7 +19002,7 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.14.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -18758,7 +19010,7 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.14.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -18813,12 +19065,16 @@ packages: /rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true dependencies: glob: 7.2.3 dev: true /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true dependencies: glob: 7.2.3 @@ -18828,6 +19084,7 @@ packages: /rollup-plugin-terser@7.0.2(rollup@2.79.1): resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser peerDependencies: rollup: ^2.0.0 dependencies: @@ -18835,11 +19092,12 @@ packages: jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.31.1 + terser: 5.31.2 /rollup@2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} + hasBin: true optionalDependencies: fsevents: 2.3.3 @@ -18914,6 +19172,8 @@ packages: /sane@4.1.0: resolution: {integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==} engines: {node: 6.* || 8.* || >= 10.*} + deprecated: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added + hasBin: true dependencies: '@cnakazawa/watch': 1.0.4 anymatch: 2.0.0 @@ -18953,7 +19213,7 @@ packages: klona: 2.0.6 neo-async: 2.6.2 sass: 1.71.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /sass-loader@13.3.2(sass@1.71.1)(webpack@5.91.0): resolution: {integrity: sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==} @@ -18976,12 +19236,13 @@ packages: dependencies: neo-async: 2.6.2 sass: 1.71.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) dev: true /sass@1.71.1: resolution: {integrity: sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==} engines: {node: '>=14.0.0'} + hasBin: true dependencies: chokidar: 3.6.0 immutable: 4.3.6 @@ -19065,14 +19326,17 @@ packages: /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true dev: true /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true /semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} + hasBin: true /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -19226,7 +19490,7 @@ packages: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -19340,10 +19604,11 @@ packages: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated dependencies: atob: 2.1.2 decode-uri-component: 0.2.2 @@ -19360,6 +19625,7 @@ packages: /source-map-url@0.4.1: resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated dev: true /source-map@0.5.6: @@ -19387,6 +19653,7 @@ packages: /sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead /space-separated-tokens@1.1.5: resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} @@ -19458,6 +19725,7 @@ packages: /stable@0.1.8: resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' /stack-generator@2.0.10: resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==} @@ -19554,6 +19822,7 @@ packages: /storybook@8.1.10(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-HHlZibyc/QkcQj8aEnYnYwEl+ItNZ/uRbCdkvJzu/vIWYon5jUg30mHFIGZprgLSt27CxOs30Et8yT9z4VhwjA==} + hasBin: true dependencies: '@storybook/cli': 8.1.10(@babel/preset-env@7.22.6)(react-dom@18.2.0)(react@18.2.0) transitivePeerDependencies: @@ -19744,7 +20013,7 @@ packages: peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /style-mod@4.1.2: resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} @@ -19762,7 +20031,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 postcss: 8.4.32 postcss-selector-parser: 6.1.0 @@ -19776,6 +20045,7 @@ packages: /subscriptions-transport-ws@0.11.0(graphql@16.8.1): resolution: {integrity: sha512-8D4C6DIH5tGiAIpp5I0wD/xRlNiZAPGHygzCe7VzyzUoxHtawzjNAY9SUTXU05/EY2NMY9/9GF0ycizkXr1CWQ==} + deprecated: The `subscriptions-transport-ws` package is no longer maintained. We recommend you use `graphql-ws` instead. For help migrating Apollo software to `graphql-ws`, see https://www.apollographql.com/docs/apollo-server/data/subscriptions/#switching-from-subscriptions-transport-ws For general help using `graphql-ws`, see https://github.com/enisdenjo/graphql-ws/blob/master/README.md peerDependencies: graphql: ^15.7.2 || ^16.0.0 dependencies: @@ -19793,10 +20063,11 @@ packages: /sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} + hasBin: true dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.4.2 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -19843,6 +20114,8 @@ packages: /svgo@1.3.2: resolution: {integrity: sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==} engines: {node: '>=4.0.0'} + deprecated: This SVGO version is no longer supported. Upgrade to v2.x.x. + hasBin: true dependencies: chalk: 2.4.2 coa: 2.0.2 @@ -19861,6 +20134,7 @@ packages: /svgo@2.8.0: resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} engines: {node: '>=10.13.0'} + hasBin: true dependencies: '@trysound/sax': 0.2.0 commander: 7.2.0 @@ -19870,15 +20144,15 @@ packages: picocolors: 1.0.1 stable: 0.1.8 - /swc-loader@0.2.6(@swc/core@1.6.3)(webpack@5.91.0): + /swc-loader@0.2.6(@swc/core@1.6.13)(webpack@5.91.0): resolution: {integrity: sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==} peerDependencies: '@swc/core': ^1.2.147 webpack: '>=2' dependencies: - '@swc/core': 1.6.3 + '@swc/core': 1.6.13 '@swc/counter': 0.1.3 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) dev: true /swr@2.2.4(react@18.2.0): @@ -19911,6 +20185,7 @@ packages: /tailwindcss@3.4.4: resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==} engines: {node: '>=14.0.0'} + hasBin: true dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -20031,7 +20306,7 @@ packages: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - /terser-webpack-plugin@5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0): + /terser-webpack-plugin@5.3.10(@swc/core@1.6.13)(esbuild@0.21.3)(webpack@5.91.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -20048,20 +20323,21 @@ packages: optional: true dependencies: '@jridgewell/trace-mapping': 0.3.25 - '@swc/core': 1.6.3 + '@swc/core': 1.6.13 esbuild: 0.21.3 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.31.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + terser: 5.31.2 + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) - /terser@5.31.1: - resolution: {integrity: sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==} + /terser@5.31.2: + resolution: {integrity: sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==} engines: {node: '>=10'} + hasBin: true dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.12.0 + acorn: 8.12.1 commander: 2.20.3 source-map-support: 0.5.21 @@ -20241,7 +20517,7 @@ packages: tslib: 2.6.3 dev: false - /ts-node@10.9.2(@swc/core@1.6.3)(@types/node@17.0.45)(typescript@5.4.3): + /ts-node@10.9.2(@swc/core@1.6.13)(@types/node@17.0.45)(typescript@5.4.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -20256,13 +20532,13 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.6.3 + '@swc/core': 1.6.13 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 17.0.45 - acorn: 8.12.0 + acorn: 8.12.1 acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 @@ -20378,11 +20654,6 @@ packages: engines: {node: '>=12.20'} dev: true - /type-fest@4.20.1: - resolution: {integrity: sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==} - engines: {node: '>=16'} - dev: false - /type-fest@4.21.0: resolution: {integrity: sha512-ADn2w7hVPcK6w1I0uWnM//y1rLXZhzB9mr0a3OirzclKF1Wp6VzevUmzz/NRAWunOT6E8HrnpGY7xOfc6K57fA==} engines: {node: '>=16'} @@ -20452,6 +20723,7 @@ packages: /typescript@5.4.3: resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} engines: {node: '>=14.17'} + hasBin: true /ua-parser-js@1.0.38: resolution: {integrity: sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==} @@ -20468,6 +20740,7 @@ packages: /uglify-js@3.18.0: resolution: {integrity: sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==} engines: {node: '>=0.8.0'} + hasBin: true requiresBuild: true dev: true optional: true @@ -20613,11 +20886,11 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - /unplugin@1.10.1: - resolution: {integrity: sha512-d6Mhq8RJeGA8UfKCu54Um4lFA0eSaRa3XxdAJg8tIdxbu1ubW0hBCZUL7yI2uGyYCRndvbK8FLHzqy2XKfeMsg==} + /unplugin@1.11.0: + resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==} engines: {node: '>=14.0.0'} dependencies: - acorn: 8.12.0 + acorn: 8.12.1 chokidar: 3.6.0 webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.2 @@ -20642,13 +20915,13 @@ packages: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} - /update-browserslist-db@1.0.16(browserslist@4.23.1): - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + /update-browserslist-db@1.1.0(browserslist@4.23.2): + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.23.1 + browserslist: 4.23.2 escalade: 3.1.2 picocolors: 1.0.1 @@ -20659,6 +20932,7 @@ packages: /urix@0.1.0: resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated dev: true /url-parse@1.5.10: @@ -20671,7 +20945,7 @@ packages: resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} dependencies: punycode: 1.4.1 - qs: 6.12.1 + qs: 6.12.3 dev: true /use-callback-ref@1.3.2(@types/react@18.2.45)(react@18.2.0): @@ -20791,10 +21065,12 @@ packages: /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true /uvu@0.5.6: resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'} + hasBin: true dependencies: dequal: 2.0.3 diff: 5.2.0 @@ -20847,6 +21123,7 @@ packages: /w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} + deprecated: Use your platform's native performance.now() and performance.timeOrigin. dependencies: browser-process-hrtime: 1.0.0 @@ -20916,7 +21193,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) /webpack-dev-middleware@6.1.3(webpack@5.91.0): resolution: {integrity: sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==} @@ -20932,7 +21209,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) dev: true /webpack-dev-server@4.15.2(webpack@5.91.0): @@ -20976,9 +21253,9 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) webpack-dev-middleware: 5.3.4(webpack@5.91.0) - ws: 8.17.1 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - debug @@ -21000,7 +21277,7 @@ packages: webpack: ^4.44.2 || ^5.47.0 dependencies: tapable: 2.2.1 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) webpack-sources: 2.3.1 /webpack-merge@5.10.0: @@ -21037,7 +21314,7 @@ packages: resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} dev: true - /webpack@5.91.0(@swc/core@1.6.3)(esbuild@0.21.3): + /webpack@5.91.0(@swc/core@1.6.13)(esbuild@0.21.3): resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} engines: {node: '>=10.13.0'} hasBin: true @@ -21052,12 +21329,12 @@ packages: '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.12.0 - acorn-import-assertions: 1.9.0(acorn@8.12.0) - browserslist: 4.23.1 + acorn: 8.12.1 + acorn-import-assertions: 1.9.0(acorn@8.12.1) + browserslist: 4.23.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.17.0 - es-module-lexer: 1.5.3 + es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -21068,7 +21345,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.6.3)(esbuild@0.21.3)(webpack@5.91.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.6.13)(esbuild@0.21.3)(webpack@5.91.0) watchpack: 2.4.1 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -21167,12 +21444,14 @@ packages: /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true dependencies: isexe: 2.0.0 /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} + hasBin: true dependencies: isexe: 2.0.0 @@ -21254,6 +21533,7 @@ packages: /workbox-cacheable-response@6.6.0: resolution: {integrity: sha512-JfhJUSQDwsF1Xv3EV1vWzSsCOZn4mQ38bWEBR3LdvOxSPgB65gAM6cS2CX8rkkKHRgiLrN7Wxoyu+TuH67kHrw==} + deprecated: workbox-background-sync@6.6.0 dependencies: workbox-core: 6.6.0 @@ -21329,7 +21609,7 @@ packages: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.91.0(@swc/core@1.6.3)(esbuild@0.21.3) + webpack: 5.91.0(@swc/core@1.6.13)(esbuild@0.21.3) webpack-sources: 1.4.3 workbox-build: 6.6.0 transitivePeerDependencies: @@ -21406,8 +21686,8 @@ packages: utf-8-validate: optional: true - /ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + /ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -21461,6 +21741,7 @@ packages: /yaml@2.4.5: resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} engines: {node: '>= 14'} + hasBin: true /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} @@ -21487,8 +21768,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + /yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} dev: true @@ -21551,9 +21832,9 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/theopensystemslab/planx-core/b43b268(@types/react@18.2.45): - resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/b43b268} - id: github.com/theopensystemslab/planx-core/b43b268 + github.com/theopensystemslab/planx-core/7666a78(@types/react@18.2.45): + resolution: {tarball: https://codeload.github.com/theopensystemslab/planx-core/tar.gz/7666a78} + id: github.com/theopensystemslab/planx-core/7666a78 name: '@opensystemslab/planx-core' version: 1.0.0 prepare: true @@ -21574,7 +21855,7 @@ packages: graphql-request: 6.1.0(graphql@16.9.0) json-schema-to-typescript: 14.1.0 lodash: 4.17.21 - marked: 13.0.1 + marked: 13.0.2 prettier: 3.3.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) diff --git a/editor.planx.uk/src/@planx/components/FindProperty/Public/Map.tsx b/editor.planx.uk/src/@planx/components/FindProperty/Public/Map.tsx index 6e88d7393e..554e77e804 100644 --- a/editor.planx.uk/src/@planx/components/FindProperty/Public/Map.tsx +++ b/editor.planx.uk/src/@planx/components/FindProperty/Public/Map.tsx @@ -63,7 +63,7 @@ export default function PlotNewAddress(props: PlotNewAddressProps): FCReturn { const [environment, boundaryBBox] = useStore((state) => [ state.previewEnvironment, - state.teamSettings.boundaryBbox, + state.teamSettings.boundaryBBox, ]); useEffect(() => { diff --git a/editor.planx.uk/src/@planx/components/PlanningConstraints/List.tsx b/editor.planx.uk/src/@planx/components/PlanningConstraints/List.tsx index 4169ecb00a..60e0c59c81 100644 --- a/editor.planx.uk/src/@planx/components/PlanningConstraints/List.tsx +++ b/editor.planx.uk/src/@planx/components/PlanningConstraints/List.tsx @@ -78,7 +78,7 @@ export default function ConstraintsList({ {Object.keys(groupedConstraints).map( (category: string, index: number) => ( - <> + ))} - + ), )} @@ -147,7 +147,7 @@ function ConstraintListItem({ children, ...props }: ConstraintListItemProps) { expandIcon={} sx={{ pr: 1.5, background: `rgba(255, 255, 255, 0.8)` }} > - + {children} @@ -199,7 +199,7 @@ function ConstraintListItem({ children, ...props }: ConstraintListItemProps) { )} - + = ({ ...props }) => { const theme = useTheme(); - const [path, currentCard] = useStore((state) => [ + const [path, visibleNode] = useStore((state) => [ state.path, state.currentCard, ]); @@ -57,9 +57,7 @@ const Card: React.FC = ({ const { track } = useAnalyticsTracking(); useEffect(() => { - // The Card component is only rendered when there's content the user will - // see - const visibleNode = currentCard(); + // The Card component is only rendered when there's content the user will see if (visibleNode?.id) track(visibleNode?.id); }, []); diff --git a/editor.planx.uk/src/@planx/components/ui.tsx b/editor.planx.uk/src/@planx/components/ui.tsx index 4d7130dd99..3707d3eb05 100644 --- a/editor.planx.uk/src/@planx/components/ui.tsx +++ b/editor.planx.uk/src/@planx/components/ui.tsx @@ -127,7 +127,7 @@ export const MoreInformation = ({ onChange={changeField} /> - + { setState({ previewEnvironment: "editor", teamName: mockTeam1.name, - teamSettings: mockTeam1.teamSettings, + teamSettings: mockTeam1.settings, teamTheme: mockTeam1.theme, teamSlug: mockTeam1.slug, user: { diff --git a/editor.planx.uk/src/components/Header.tsx b/editor.planx.uk/src/components/Header.tsx index fefadf8f55..0210e2b98d 100644 --- a/editor.planx.uk/src/components/Header.tsx +++ b/editor.planx.uk/src/components/Header.tsx @@ -37,6 +37,7 @@ import { LINE_HEIGHT_BASE, } from "theme"; import { ApplicationPath } from "types"; +import Permission from "ui/editor/Permission"; import Reset from "ui/icons/Reset"; import { useStore } from "../pages/FlowEditor/lib/store"; @@ -259,20 +260,19 @@ const Breadcrumbs: React.FC = () => { }; const NavBar: React.FC = () => { - const [index, sectionCount, title, hasSections, saveToEmail, path] = useStore( - (state) => [ + const [index, sectionCount, title, hasSections, saveToEmail, path, node] = + useStore((state) => [ state.currentSectionIndex, state.sectionCount, state.currentSectionTitle, state.hasSections, state.saveToEmail, state.path, - ], - ); + state.currentCard, + ]); const isSaveAndReturnLandingPage = path !== ApplicationPath.SingleSession && !saveToEmail; const isContentPage = useCurrentRoute()?.data?.isContentPage; - const { node } = useAnalyticsTracking(); const isSectionCard = node?.type == TYPES.Section; const isVisible = hasSections && @@ -532,14 +532,14 @@ const EditorToolbar: React.FC<{ )} - {!user.isPlatformAdmin && ( + All teams - )} + {/* Only show team settings link if inside a team route */} {isTeamSettingsVisible && ( diff --git a/editor.planx.uk/src/lib/feedback.ts b/editor.planx.uk/src/lib/feedback.ts index fec8766746..f4e6464512 100644 --- a/editor.planx.uk/src/lib/feedback.ts +++ b/editor.planx.uk/src/lib/feedback.ts @@ -23,13 +23,12 @@ export type FeedbackMetadata = { export async function getInternalFeedbackMetadata(): Promise { const { breadcrumbs, - currentCard, + currentCard: node, computePassport, fetchCurrentTeam, id: flowId, } = useStore.getState(); const { id: teamId } = await fetchCurrentTeam(); - const node = currentCard(); const userData = { breadcrumbs: breadcrumbs, passport: computePassport(), diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx index 2c3185c52a..767ebd75ec 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/BoundaryForm.tsx @@ -47,7 +47,7 @@ export default function BoundaryForm({ formikConfig, onSuccess }: FormProps) { const isUpdateSuccess = await useStore.getState().updateTeamSettings({ boundaryUrl: values.boundaryUrl, - boundaryBbox: convertToBoundingBox(data), + boundaryBBox: convertToBoundingBox(data), }); if (isUpdateSuccess) { onSuccess(); diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx index b2ee94db39..b57672a2c5 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Settings/GeneralSettings/index.tsx @@ -28,7 +28,7 @@ const GeneralSettings: React.FC = () => { if (!fetchedTeam) throw Error("Unable to find team"); setFormikConfig({ - initialValues: fetchedTeam.teamSettings, + initialValues: fetchedTeam.settings, onSubmit: () => {}, validateOnBlur: false, validateOnChange: false, diff --git a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx index 1b42dd65b0..1cc8df1652 100644 --- a/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/components/Sidebar/index.tsx @@ -22,6 +22,7 @@ import { AxiosError } from "axios"; import { formatLastPublishMessage } from "pages/FlowEditor/utils"; import React, { useState } from "react"; import { useAsync } from "react-use"; +import Permission from "ui/editor/Permission"; import Input from "ui/shared/Input"; import Questions from "../../../Preview/Questions"; @@ -163,7 +164,6 @@ const Sidebar: React.FC<{ lastPublisher, validateAndDiffFlow, isFlowPublished, - isPlatformAdmin, ] = useStore((state) => [ state.id, state.flowAnalyticsLink, @@ -173,7 +173,6 @@ const Sidebar: React.FC<{ state.lastPublisher, state.validateAndDiffFlow, state.isFlowPublished, - state.user?.isPlatformAdmin, ]); const [key, setKey] = useState(false); const [lastPublishedTitle, setLastPublishedTitle] = useState( @@ -297,7 +296,7 @@ const Sidebar: React.FC<{ )} - {isPlatformAdmin && ( + - )} + { @@ -54,14 +54,14 @@ describe("Clone order in flow (backwards)", () => { // Traverse forward to final node record("question", { answers: ["leftChoice"] }); record("clone", { answers: ["finalNode"] }); - expect(currentCard()?.id).toBe("finalNode"); + expect(getCurrentCard()?.id).toBe("finalNode"); // Traverse back one-by-one to first node - let previous = previousCard(currentCard()); + let previous = previousCard(getCurrentCard()); expect(previous).toBe("clone"); record(previous!); - previous = previousCard(currentCard()); + previous = previousCard(getCurrentCard()); expect(previous).toBe("question"); record(previous!); @@ -79,18 +79,18 @@ describe("Clone order in flow (backwards)", () => { record("question", { answers: ["rightChoice"] }); record("rightNotice", { answers: ["clone"] }); record("clone", { answers: ["finalNode"] }); - expect(currentCard()?.id).toBe("finalNode"); + expect(getCurrentCard()?.id).toBe("finalNode"); // Traverse back one-by-one to first node - let previous = previousCard(currentCard()); + let previous = previousCard(getCurrentCard()); expect(previous).toBe("clone"); record(previous!); - previous = previousCard(currentCard()); + previous = previousCard(getCurrentCard()); expect(previous).toBe("rightNotice"); record(previous!); - previous = previousCard(currentCard()); + previous = previousCard(getCurrentCard()); expect(previous).toBe("question"); record(previous!); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/filters.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/filters.test.ts index dc1d3451d7..30e90ac03d 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/filters.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/filters.test.ts @@ -4,8 +4,13 @@ import flowWithBranchingFilters from "./mocks/flowWithBranchingFilters.json"; import flowWithRootFilter from "./mocks/flowWithRootFilter.json"; const { getState, setState } = vanillaStore; -const { upcomingCardIds, resetPreview, record, currentCard, collectedFlags } = - getState(); +const { + upcomingCardIds, + resetPreview, + record, + getCurrentCard, + collectedFlags, +} = getState(); // https://i.imgur.com/k0kkKox.png describe("A filter on the root of the graph", () => { @@ -74,9 +79,9 @@ describe("A filter on a branch", () => { record("fork", { answers: ["filter2"] }); // XXX: Test fails here - // The currentCard returns as "immunityFlag2" which we should not land on - + // getCurrentCard returns as "immunityFlag2" which we should not land on - // the flags on the first filter are skipped, we go direct from "immunityPath1" to "fork" - expect(currentCard()?.id).toBe("immunityPath2"); + expect(getCurrentCard()?.id).toBe("immunityPath2"); }); }); @@ -97,7 +102,7 @@ describe("Nodes on a filter path should only be auto-answered when the path matc record("TiIuAVIXsV", { answers: ["hdaeOVIXsV"], auto: false }); // land on the correct result component - expect(currentCard()?.id).toBe("seN42VIXsV"); + expect(getCurrentCard()?.id).toBe("seN42VIXsV"); expect(getState().resultData()["Planning permission"]).toHaveProperty( "flag.value", "PLANNING_PERMISSION_REQUIRED", @@ -131,7 +136,7 @@ describe("Nodes on a filter path should only be auto-answered when the path matc upcomingCardIds(); // land on the correct result component - expect(currentCard()?.id).toBe("seN42VIXsV"); + expect(getCurrentCard()?.id).toBe("seN42VIXsV"); expect(getState().resultData()["Planning permission"]).toHaveProperty( "flag.value", "PLANNING_PERMISSION_REQUIRED", diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/canGoBack.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/canGoBack.test.ts index be23cda4d3..6a12ab655d 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/canGoBack.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/canGoBack.test.ts @@ -3,6 +3,8 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { Store, vanillaStore } from "../../store"; const { getState, setState } = vanillaStore; +const { canGoBack, getCurrentCard, resetPreview, record, changeAnswer } = + getState(); // https://imgur.com/VFV64ax const flow: Store.flow = { @@ -58,7 +60,7 @@ const flow: Store.flow = { }; beforeEach(() => { - getState().resetPreview(); + resetPreview(); setState({ flow, }); @@ -66,90 +68,69 @@ beforeEach(() => { describe("can go back if", () => { test("the previous component was manually answered", () => { - setState({ - breadcrumbs: { - Question: { - auto: false, - answers: ["NoFeeAnswerPath"], - }, - }, + record("Question", { + auto: false, + answers: ["NoFeeAnswerPath"], }); - expect(getState().canGoBack(getState().currentCard())).toStrictEqual(true); + + expect(canGoBack(getCurrentCard())).toStrictEqual(true); }); test("the user skipped the payment component", () => { - setState({ - breadcrumbs: { - Question: { - auto: false, - answers: ["NoFeeAnswerPath"], - }, - Pay: { - auto: true, - }, - }, + record("Question", { + auto: false, + answers: ["NoFeeAnswerPath"], }); - expect(getState().canGoBack(getState().currentCard())).toStrictEqual(true); + record("Pay", { auto: true }); + + expect(canGoBack(getCurrentCard())).toStrictEqual(true); }); }); describe("cannot go back if", () => { test("it's the very first component", () => { - expect(getState().canGoBack(getState().currentCard())).toStrictEqual(false); + expect(canGoBack(getCurrentCard())).toStrictEqual(false); }); test("the only previous component was auto-answered", () => { - setState({ - breadcrumbs: { - Question: { - auto: true, - answers: ["NoFeeAnswerPath"], - }, - }, + record("Question", { + auto: true, + answers: ["NoFeeAnswerPath"], }); - expect(getState().canGoBack(getState().currentCard())).toStrictEqual(false); + + expect(canGoBack(getCurrentCard())).toStrictEqual(false); }); test("the applicant made a payment", () => { - setState({ - breadcrumbs: { - Question: { - auto: false, - answers: ["FeeAnswerPath"], - }, - Calculate: { - auto: true, - data: { - fee: 10, - }, - }, - Pay: { - auto: false, - }, + record("Question", { + auto: false, + answers: ["NoFeeAnswerPath"], + }); + record("Calculate", { + auto: true, + data: { + fee: 10, }, }); - expect(getState().canGoBack(getState().currentCard())).toStrictEqual(false); + record("Pay", { auto: false }); + + expect(canGoBack(getCurrentCard())).toStrictEqual(false); }); test("changing a component's answer", () => { - setState({ - breadcrumbs: { - Question: { - auto: false, - answers: ["FeeAnswerPath"], - }, - Calculate: { - auto: true, - data: { - fee: 10, - }, - }, - Pay: { - auto: false, - }, + record("Question", { + auto: false, + answers: ["FeeAnswerPath"], + }); + record("Calculate", { + auto: true, + data: { + fee: 10, }, - changedNode: "Confirmation", }); - expect(getState().canGoBack(getState().currentCard())).toStrictEqual(false); + record("Pay", { auto: false }); + changeAnswer("Confirmation"); + + expect(canGoBack(getCurrentCard())).toStrictEqual(false); }); }); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/overrideAnswer.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/overrideAnswer.test.ts index e0f53e3992..c7bcb0da1b 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/overrideAnswer.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/overrideAnswer.test.ts @@ -2,7 +2,7 @@ import { vanillaStore } from "../../store"; const { getState, setState } = vanillaStore; -const { overrideAnswer, currentCard, upcomingCardIds, record } = getState(); +const { overrideAnswer, getCurrentCard, upcomingCardIds, record } = getState(); test("it clears the correct breadcrumb and navigates back to the right node", async () => { // set up initial state, confirm our passport computes as expected @@ -38,7 +38,7 @@ test("it clears the correct breadcrumb and navigates back to the right node", as }); // confirm we've navigated back to the right node, and that PropertyInformation is queued up again in upcoming cards - expect(currentCard()?.id).toEqual("FirstPropertyTypeQuestionNodeId"); + expect(getCurrentCard()?.id).toEqual("FirstPropertyTypeQuestionNodeId"); expect(upcomingCardIds()).toContain("PropertyInformationNodeId"); // select a new answer, confirm our passport has updated diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/previousCard.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/previousCard.test.ts index 5ccedeeb2b..92ccc71a37 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/previousCard.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/previousCard.test.ts @@ -2,7 +2,7 @@ import { vanillaStore } from "../../store"; const { getState, setState } = vanillaStore; -const { resetPreview, previousCard, currentCard } = getState(); +const { resetPreview, previousCard, getCurrentCard } = getState(); beforeEach(() => { resetPreview(); @@ -24,7 +24,7 @@ const setup = (args = {}) => describe("store.previousCard is", () => { test("undefined when there are no breadcrumbs", () => { setup(); - expect(previousCard(currentCard())).toBeUndefined(); + expect(previousCard(getCurrentCard())).toBeUndefined(); }); test("undefined when cards were automatically answered", () => { @@ -34,7 +34,7 @@ describe("store.previousCard is", () => { b: { auto: true }, }, }); - expect(previousCard(currentCard())).toBeUndefined(); + expect(previousCard(getCurrentCard())).toBeUndefined(); }); test("the most recent human-answered card id", () => { @@ -45,6 +45,6 @@ describe("store.previousCard is", () => { }, }); - expect(previousCard(currentCard())).toEqual("a"); + expect(previousCard(getCurrentCard())).toEqual("a"); }); }); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/removeNodesDependentOnPassport.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/removeNodesDependentOnPassport.test.ts index 092553572a..dcf8e20d8b 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/removeNodesDependentOnPassport.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/removeNodesDependentOnPassport.test.ts @@ -15,8 +15,14 @@ let flowWithPassportComponents = cloneDeep( flowWithPassportComponentsMock, ) as Store.flow; -const { record, resetPreview, previousCard, currentCard, changeAnswer } = - getState(); +const { + record, + resetPreview, + previousCard, + getCurrentCard, + changeAnswer, + setCurrentCard, +} = getState(); beforeEach(() => { resetPreview(); @@ -61,7 +67,7 @@ describe("removeNodesDependentOnPassport", () => { }); describe("nodesDependentOnPassport with record", () => { - test("should remove Draw Boundary and Planning contraints from cachedBreadcrumbs", () => { + test("should remove Draw Boundary and Planning constraints from cachedBreadcrumbs", () => { const cachedBreadcrumbs = { ...breadcrumbsDependentOnPassport, } as Store.cachedBreadcrumbs; @@ -182,7 +188,7 @@ describe("nodesDependentOnPassport with record", () => { }, }); - expect(currentCard()?.id).toEqual("drawBoundary"); + expect(getCurrentCard()?.id).toEqual("drawBoundary"); }); test("should clear _nodesPendingEdit after edition", () => { @@ -229,8 +235,11 @@ describe("nodesDependentOnPassport with previousCard", () => { _nodesPendingEdit: [], }); - expect(currentCard()?.id).toEqual("drawBoundary"); - expect(previousCard(currentCard())).toEqual("text"); + // Manually call setCurrentCard() as we're not using record() as part of our setup + setCurrentCard(); + + expect(getCurrentCard()?.id).toEqual("drawBoundary"); + expect(previousCard(getCurrentCard())).toEqual("text"); }); test("To be last pushed to the breadcrumbs when changing answer", () => { @@ -247,7 +256,7 @@ describe("nodesDependentOnPassport with previousCard", () => { _nodesPendingEdit, }); - expect(previousCard(currentCard())).toEqual("findProperty"); + expect(previousCard(getCurrentCard())).toEqual("findProperty"); }); }); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/upcomingCardIds.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/upcomingCardIds.test.ts index a72b347792..6c3a1f5e05 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/upcomingCardIds.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/preview/upcomingCardIds.test.ts @@ -3,7 +3,7 @@ import { ComponentType as TYPES } from "@opensystemslab/planx-core/types"; import { Store, vanillaStore } from "../../store"; const { getState, setState } = vanillaStore; -const { upcomingCardIds, resetPreview, record, currentCard } = getState(); +const { upcomingCardIds, resetPreview, record, getCurrentCard } = getState(); const flow: Store.flow = { _root: { @@ -75,7 +75,7 @@ test.skip("A node is only auto-answered when it is the first upcomingCardId(), n record("SetValue", { data: { fruit: ["apple"] }, auto: true }); clickContinue(); - expect(currentCard()?.id).toBe("Content"); + expect(getCurrentCard()?.id).toBe("Content"); // "AutomatedQuestion" should still be queued up, not already answered based on SetValue expect(visitedNodes()).not.toContain("AutomatedQuestion"); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/setValue.test.ts b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/setValue.test.ts index 09052ced51..72983ec6fd 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/setValue.test.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/__tests__/setValue.test.ts @@ -4,7 +4,7 @@ import { cloneDeep, merge } from "lodash"; import { Store, vanillaStore } from "../store"; const { getState, setState } = vanillaStore; -const { resetPreview, record, computePassport, currentCard } = getState(); +const { resetPreview, record, computePassport, getCurrentCard } = getState(); const baseFlow: Store.flow = { _root: { @@ -76,7 +76,7 @@ describe("SetValue component", () => { expect(breadcrumbKeys).toContain("setValue1"); // Middle of flow reached - expect(currentCard()?.id).toEqual("middleOfService"); + expect(getCurrentCard()?.id).toEqual("middleOfService"); // Passport correctly populated expect(computePassport()?.data?.myKey).toHaveLength(1); @@ -94,7 +94,7 @@ describe("SetValue component", () => { expect(breadcrumbKeys).toContain("setValue2"); // End of flow reached - expect(currentCard()?.id).toEqual("endOfService"); + expect(getCurrentCard()?.id).toEqual("endOfService"); // Passport correctly populated expect(computePassport()?.data?.myKey).toHaveLength(1); @@ -133,7 +133,7 @@ describe("SetValue component", () => { expect(breadcrumbKeys).toContain("setValue1"); // Middle of flow reached - expect(currentCard()?.id).toEqual("middleOfService"); + expect(getCurrentCard()?.id).toEqual("middleOfService"); // Passport correctly populated expect(computePassport()?.data?.myKey).toHaveLength(1); @@ -155,7 +155,7 @@ describe("SetValue component", () => { expect(breadcrumbKeys).toContain("setValue2"); // End of flow reached - expect(currentCard()?.id).toEqual("endOfService"); + expect(getCurrentCard()?.id).toEqual("endOfService"); // Passport correctly populated expect(computePassport()?.data?.myKey).toHaveLength(2); @@ -212,7 +212,7 @@ describe("SetValue component", () => { expect(breadcrumbKeys).toContain("setValue1"); // Middle of flow reached - expect(currentCard()?.id).toEqual("middleOfService"); + expect(getCurrentCard()?.id).toEqual("middleOfService"); // Passport correctly populated - value not present expect(computePassport()?.data?.myKey).toBeUndefined(); @@ -236,7 +236,7 @@ describe("SetValue component", () => { record("setValue3", { data: { myKey: ["mySecondValue"] } }); // End of flow reached - expect(currentCard()?.id).toEqual("endOfService"); + expect(getCurrentCard()?.id).toEqual("endOfService"); // Passport correctly populated - value no longer set expect(computePassport()?.data?.myKey).toBeUndefined(); @@ -265,7 +265,7 @@ describe("SetValue component", () => { record("setValue3", { data: { myKey: ["myUnsetValue"] } }); // End of flow reached - expect(currentCard()?.id).toEqual("endOfService"); + expect(getCurrentCard()?.id).toEqual("endOfService"); // Passport correctly populated - passport variable not removed as values do not match expect(computePassport()?.data?.myKey).toEqual("mySecondValue"); @@ -320,7 +320,7 @@ describe("SetValue component", () => { expect(breadcrumbKeys).toContain("setValue1"); // Middle of flow reached - expect(currentCard()?.id).toEqual("middleOfService"); + expect(getCurrentCard()?.id).toEqual("middleOfService"); // Passport correctly populated - value not present expect(computePassport()?.data?.myKey).toBeUndefined(); @@ -344,7 +344,7 @@ describe("SetValue component", () => { record("setValue3", { data: { myKey: ["mySecondValue"] } }); // End of flow reached - expect(currentCard()?.id).toEqual("endOfService"); + expect(getCurrentCard()?.id).toEqual("endOfService"); // Passport correctly populated - key:value pair removed expect(computePassport()?.data).not.toHaveProperty("myKey"); diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/analytics/provider.tsx b/editor.planx.uk/src/pages/FlowEditor/lib/analytics/provider.tsx index 5ba9bbf4ed..b4090bef66 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/analytics/provider.tsx +++ b/editor.planx.uk/src/pages/FlowEditor/lib/analytics/provider.tsx @@ -51,7 +51,6 @@ let lastVisibleNodeAnalyticsLogId: number | undefined = undefined; const analyticsContext = createContext<{ createAnalytics: (type: AnalyticsType) => Promise; trackEvent: (eventData: EventData) => Promise; - node: Store.node | null; track: ( nodeId: string, direction?: AnalyticsLogDirection, @@ -60,7 +59,6 @@ const analyticsContext = createContext<{ }>({ createAnalytics: () => Promise.resolve(), trackEvent: () => Promise.resolve(), - node: null, track: () => Promise.resolve(), }); const { Provider } = analyticsContext; @@ -90,7 +88,6 @@ export const AnalyticsProvider: React.FC<{ children: React.ReactNode }> = ({ state.id, state.flow, ]); - const node = currentCard(); const isAnalyticsEnabled = new URL(window.location.href).searchParams.get("analytics") !== "false"; const shouldTrackAnalytics = @@ -138,7 +135,6 @@ export const AnalyticsProvider: React.FC<{ children: React.ReactNode }> = ({ = ({ }); const id = response.data.insert_analytics_one.id; setAnalyticsId(id); - const currentNodeId = currentCard()?.id; + const currentNodeId = currentCard?.id; if (currentNodeId) track(currentNodeId, type, id); } diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts b/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts index a3b24ef3e3..16a452b78a 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/store/editor.ts @@ -282,7 +282,7 @@ export const editorStore: StateCreator< client.cache.reset(); const { data } = await client.query({ query: gql` - query GetFlow($teamId: Int!) { + query GetFlows($teamId: Int!) { flows(where: { team: { id: { _eq: $teamId } } }) { id name diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/store/preview.ts b/editor.planx.uk/src/pages/FlowEditor/lib/store/preview.ts index be77eeeb9b..f17ba45b38 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/store/preview.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/store/preview.ts @@ -39,7 +39,9 @@ export interface PreviewStore extends Store.Store { upToNodeId: Store.nodeId, visited?: Array, ) => Array; - currentCard: () => Store.node | null; + currentCard: ({ id: Store.nodeId } & Store.node) | null; + setCurrentCard: () => void; + getCurrentCard: () => ({ id: Store.nodeId } & Store.node) | null; hasPaid: () => boolean; previousCard: ( node: Store.node | null, @@ -136,18 +138,15 @@ export const previewStore: StateCreator< return res; }, - currentCard() { + setCurrentCard() { const { upcomingCardIds, flow } = get(); const upcoming = upcomingCardIds(); if (upcoming.length > 0) { const id = upcoming[0]; - return { - id, - ...flow[id], - }; + set({ currentCard: { id, ...flow[id] } }); } else { - return null; + set({ currentCard: null }); } }, @@ -287,6 +286,7 @@ export const previewStore: StateCreator< _nodesPendingEdit, changedNode, updateSectionData, + setCurrentCard, } = get(); if (!flow[id]) throw new Error(`id "${id}" not found`); @@ -369,6 +369,7 @@ export const previewStore: StateCreator< }); } } + setCurrentCard(); updateSectionData(); }, @@ -379,6 +380,7 @@ export const previewStore: StateCreator< resumeSession(session: Session) { set({ ...session }); + get().setCurrentCard(); get().updateSectionData(); }, @@ -652,6 +654,10 @@ export const previewStore: StateCreator< return currentRequestedFiles || emptyFileList; }, + + currentCard: null, + + getCurrentCard: () => get().currentCard, }); const knownNots = ( diff --git a/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts b/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts index 5a2a2080a0..00a334b171 100644 --- a/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts +++ b/editor.planx.uk/src/pages/FlowEditor/lib/store/team.ts @@ -45,7 +45,7 @@ export const teamStore: StateCreator< teamId: team.id, teamIntegrations: team.integrations, teamName: team.name, - teamSettings: team.teamSettings, + teamSettings: team.settings, teamSlug: team.slug, teamTheme: team.theme, }); @@ -60,7 +60,7 @@ export const teamStore: StateCreator< id: get().teamId, integrations: get().teamIntegrations, name: get().teamName, - teamSettings: get().teamSettings, + settings: get().teamSettings, slug: get().teamSlug, theme: get().teamTheme, }), diff --git a/editor.planx.uk/src/pages/Pay/InviteToPay.tsx b/editor.planx.uk/src/pages/Pay/InviteToPay.tsx index 9b5ad7973c..ec9d1a52c5 100644 --- a/editor.planx.uk/src/pages/Pay/InviteToPay.tsx +++ b/editor.planx.uk/src/pages/Pay/InviteToPay.tsx @@ -26,7 +26,9 @@ const FormInner = styled(Box)(({ theme }) => ({ const InviteToPay: React.FC = ({ createdAt }) => { const theme = useTheme(); const expiryDate = getExpiryDateForPaymentRequest(createdAt); - const team = useStore((state) => state.getTeam()); + const { helpEmail, helpOpeningHours, helpPhone } = useStore( + (state) => state.teamSettings, + ); return ( <> @@ -70,18 +72,14 @@ const InviteToPay: React.FC = ({ createdAt }) => { - Telephone {team.notifyPersonalisation?.helpPhone} - - - {team.notifyPersonalisation?.helpOpeningHours} + Telephone {helpPhone} + {helpOpeningHours} Email{" "} - - {team.notifyPersonalisation?.helpEmail} - + {helpEmail} We aim to respond within 2 working days. diff --git a/editor.planx.uk/src/pages/Preview/Questions.tsx b/editor.planx.uk/src/pages/Preview/Questions.tsx index 194a5f7edf..ac1f400730 100644 --- a/editor.planx.uk/src/pages/Preview/Questions.tsx +++ b/editor.planx.uk/src/pages/Preview/Questions.tsx @@ -63,6 +63,8 @@ const Questions = ({ previewEnvironment }: QuestionsProps) => { canGoBack, setPreviewEnvironment, getType, + node, + setCurrentCard, ] = useStore((state) => [ state.previousCard, state.record, @@ -75,9 +77,11 @@ const Questions = ({ previewEnvironment }: QuestionsProps) => { state.canGoBack, state.setPreviewEnvironment, state.getType, + state.currentCard, + state.setCurrentCard, ]); const isStandalone = previewEnvironment === "standalone"; - const { createAnalytics, node, trackEvent } = useAnalyticsTracking(); + const { createAnalytics, trackEvent } = useAnalyticsTracking(); const [gotFlow, setGotFlow] = useState(false); const isUsingLocalStorage = useStore((state) => state.path) === ApplicationPath.SingleSession; @@ -89,6 +93,8 @@ const Questions = ({ previewEnvironment }: QuestionsProps) => { // Initial setup useEffect(() => { + setCurrentCard(); + if (!isStandalone) return; if (isUsingLocalStorage) { diff --git a/editor.planx.uk/src/pages/Preview/ReconciliationPage.tsx b/editor.planx.uk/src/pages/Preview/ReconciliationPage.tsx index 75d13added..2e52f43042 100644 --- a/editor.planx.uk/src/pages/Preview/ReconciliationPage.tsx +++ b/editor.planx.uk/src/pages/Preview/ReconciliationPage.tsx @@ -38,7 +38,7 @@ const ReconciliationPage: React.FC = ({ state.flow, state.hasSections, state.sectionNodes, - state.currentCard(), + state.currentCard, state.changeAnswer, state.record, state.computePassport(), diff --git a/editor.planx.uk/src/routes/flow.tsx b/editor.planx.uk/src/routes/flow.tsx index f921ac065b..f6d60051b1 100644 --- a/editor.planx.uk/src/routes/flow.tsx +++ b/editor.planx.uk/src/routes/flow.tsx @@ -224,7 +224,7 @@ const routes = compose( withView(SettingsContainer), route(async (req) => ({ - getData: getFlowSettings, + getData: await getFlowSettings(req), title: makeTitle( [req.params.team, req.params.flow, "service"].join("/"), ), @@ -236,7 +236,7 @@ const routes = compose( withView(SettingsContainer), route(async (req) => ({ - getData: getFlowSettings, + getData: await getFlowSettings(req), title: makeTitle( [req.params.team, req.params.flow, "service-flags"].join("/"), ), diff --git a/editor.planx.uk/src/routes/flowSettings.tsx b/editor.planx.uk/src/routes/flowSettings.tsx index b06ce1406e..7201cf2ff7 100644 --- a/editor.planx.uk/src/routes/flowSettings.tsx +++ b/editor.planx.uk/src/routes/flowSettings.tsx @@ -95,13 +95,13 @@ const flowSettingsRoutes = compose( `User does not have access to ${req.originalUrl}`, ); - return route({ - getData: getFlowSettings, + return route(async (req) => ({ + getData: await getFlowSettings(req), title: makeTitle( [req.params.team, req.params.flow, "Flow Settings"].join("/"), ), view: , - }); + })); }), }), ); diff --git a/editor.planx.uk/src/routes/teamSettings.tsx b/editor.planx.uk/src/routes/teamSettings.tsx index 75f14a89b7..8427b37501 100644 --- a/editor.planx.uk/src/routes/teamSettings.tsx +++ b/editor.planx.uk/src/routes/teamSettings.tsx @@ -22,7 +22,7 @@ const teamSettingsRoutes = compose( })), mount({ - "/": redirect("./team"), + "/": redirect("./general"), "/:tab": map(async (req) => { const isAuthorised = useStore.getState().canUserEditTeam(req.params.team); diff --git a/editor.planx.uk/src/routes/utils.ts b/editor.planx.uk/src/routes/utils.ts index e293bee05c..a61b6463a1 100644 --- a/editor.planx.uk/src/routes/utils.ts +++ b/editor.planx.uk/src/routes/utils.ts @@ -49,6 +49,7 @@ export const setPath = (flowData: Store.flow, req: NaviRequest) => { // So I've hard-coded these domain names until a better solution comes along. // const PREVIEW_ONLY_DOMAINS = [ + "planningservices.epsom-ewell.gov.uk", "planningservices.barnet.gov.uk", "planningservices.buckinghamshire.gov.uk", "planningservices.camden.gov.uk", diff --git a/editor.planx.uk/src/routes/views/draft.tsx b/editor.planx.uk/src/routes/views/draft.tsx index e21bb6d3ac..881988884f 100644 --- a/editor.planx.uk/src/routes/views/draft.tsx +++ b/editor.planx.uk/src/routes/views/draft.tsx @@ -77,13 +77,13 @@ const fetchSettingsForDraftView = async ( helpPhone: help_phone helpOpeningHours: help_opening_hours emailReplyToId: email_reply_to_id + boundaryBBox: boundary_bbox } integrations { hasPlanningData: has_planning_data } slug } - settings slug name } diff --git a/editor.planx.uk/src/routes/views/flowEditor.tsx b/editor.planx.uk/src/routes/views/flowEditor.tsx index 8eb95f9677..d80823711b 100644 --- a/editor.planx.uk/src/routes/views/flowEditor.tsx +++ b/editor.planx.uk/src/routes/views/flowEditor.tsx @@ -6,17 +6,14 @@ import { View } from "react-navi"; import { client } from "../../lib/graphql"; import { useStore } from "../../pages/FlowEditor/lib/store"; -import type { FlowSettings } from "../../types"; interface FlowMetadata { - flowSettings: FlowSettings; flowAnalyticsLink: string; isFlowPublished: boolean; } interface GetFlowMetadata { flows: { - flowSettings: FlowSettings; flowAnalyticsLink: string; publishedFlowsAggregate: { aggregate: { @@ -34,13 +31,12 @@ const getFlowMetadata = async ( data: { flows }, } = await client.query({ query: gql` - query GetFlow($slug: String!, $team_slug: String!) { + query GetFlowMetadata($slug: String!, $team_slug: String!) { flows( limit: 1 where: { slug: { _eq: $slug }, team: { slug: { _eq: $team_slug } } } ) { id - flowSettings: settings flowAnalyticsLink: analytics_link publishedFlowsAggregate: published_flows_aggregate { aggregate { @@ -60,7 +56,6 @@ const getFlowMetadata = async ( if (!flows) throw new NotFoundError(`Flow ${flowSlug} not found for ${team}`); const metadata = { - flowSettings: flow.flowSettings, flowAnalyticsLink: flow.flowAnalyticsLink, isFlowPublished: flow.publishedFlowsAggregate?.aggregate.count > 0, }; @@ -72,9 +67,9 @@ const getFlowMetadata = async ( */ export const flowEditorView = async (req: NaviRequest) => { const [flow] = req.params.flow.split(","); - const { flowSettings, flowAnalyticsLink, isFlowPublished } = + const { flowAnalyticsLink, isFlowPublished } = await getFlowMetadata(flow, req.params.team); - useStore.setState({ flowSettings, flowAnalyticsLink, isFlowPublished }); + useStore.setState({ flowAnalyticsLink, isFlowPublished }); return ( diff --git a/editor.planx.uk/src/routes/views/published.tsx b/editor.planx.uk/src/routes/views/published.tsx index da8eb891bd..a97a426a52 100644 --- a/editor.planx.uk/src/routes/views/published.tsx +++ b/editor.planx.uk/src/routes/views/published.tsx @@ -103,13 +103,13 @@ export const fetchSettingsForPublishedView = async ( helpPhone: help_phone helpOpeningHours: help_opening_hours emailReplyToId: email_reply_to_id + boundaryBBox: boundary_bbox } integrations { hasPlanningData: has_planning_data } slug } - settings status publishedFlows: published_flows( limit: 1 diff --git a/editor.planx.uk/src/routes/views/standalone.tsx b/editor.planx.uk/src/routes/views/standalone.tsx index 027bfd7ccf..8de2a37b67 100644 --- a/editor.planx.uk/src/routes/views/standalone.tsx +++ b/editor.planx.uk/src/routes/views/standalone.tsx @@ -77,13 +77,13 @@ const fetchDataForStandaloneView = async ( helpPhone: help_phone helpOpeningHours: help_opening_hours emailReplyToId: email_reply_to_id + boundaryBBox: boundary_bbox } integrations { hasPlanningData: has_planning_data } slug } - settings } globalSettings: global_settings { diff --git a/editor.planx.uk/src/ui/editor/Permission.tsx b/editor.planx.uk/src/ui/editor/Permission.tsx new file mode 100644 index 0000000000..cb4bb2f844 --- /dev/null +++ b/editor.planx.uk/src/ui/editor/Permission.tsx @@ -0,0 +1,26 @@ +import { useStore } from "pages/FlowEditor/lib/store"; +import React, { PropsWithChildren } from "react"; + +type PermissionComponent = React.FC & { + IsPlatformAdmin: React.FC; +} & { IsNotPlatformAdmin: React.FC }; + +const Permission: PermissionComponent = ({ children }) => { + return children; +}; + +const IsPlatformAdmin: React.FC = ({ children }) => { + const isPlatformAdmin = useStore((state) => state.user?.isPlatformAdmin); + return isPlatformAdmin ? children : null; +}; + +const IsNotPlatformAdmin: React.FC = ({ children }) => { + const isPlatformAdmin = useStore((state) => state.user?.isPlatformAdmin); + return !isPlatformAdmin ? children : null; +}; + +// Attach permission specific components as static properties +Permission.IsPlatformAdmin = IsPlatformAdmin; +Permission.IsNotPlatformAdmin = IsNotPlatformAdmin; + +export default Permission; diff --git a/hasura.planx.uk/metadata/tables.yaml b/hasura.planx.uk/metadata/tables.yaml index 49a7278c64..3118099b7b 100644 --- a/hasura.planx.uk/metadata/tables.yaml +++ b/hasura.planx.uk/metadata/tables.yaml @@ -1414,6 +1414,46 @@ - role: api permission: filter: {} +- table: + name: s3_applications + schema: public + insert_permissions: + - role: api + permission: + check: {} + columns: + - id + - webhook_request + - webhook_response + - session_id + - team_slug + - created_at + comment: "" + select_permissions: + - role: api + permission: + columns: + - id + - webhook_request + - webhook_response + - session_id + - team_slug + - created_at + filter: {} + comment: "" + update_permissions: + - role: api + permission: + columns: + - id + - webhook_request + - webhook_response + - session_id + - team_slug + - created_at + filter: {} + check: null + comment: "" - table: name: sessions schema: public @@ -1517,6 +1557,7 @@ - number_times_resumed - sent_to_bops - sent_to_email + - sent_to_s3_power_automate - sent_to_uniform - user_clicked_save - user_invited_to_pay @@ -1525,7 +1566,16 @@ - email_applications - payment_requests - payment_status + - s3_applications - uniform_applications + - allow_list_answers + - application_declaration_connection + - draw_boundary_action + - find_property_action + - property_constraints_planning + - property_type + - proposal_project_type + - user_role - service_slug - session_id - team_slug @@ -1539,6 +1589,7 @@ - number_times_resumed - sent_to_bops - sent_to_email + - sent_to_s3_power_automate - sent_to_uniform - user_clicked_save - user_invited_to_pay @@ -1547,7 +1598,16 @@ - email_applications - payment_requests - payment_status + - s3_applications - uniform_applications + - allow_list_answers + - application_declaration_connection + - draw_boundary_action + - find_property_action + - property_constraints_planning + - property_type + - proposal_project_type + - user_role - service_slug - session_id - team_slug diff --git a/hasura.planx.uk/migrations/1720511391883_run_sql_migration/down.sql b/hasura.planx.uk/migrations/1720511391883_run_sql_migration/down.sql new file mode 100644 index 0000000000..f8befa0df9 --- /dev/null +++ b/hasura.planx.uk/migrations/1720511391883_run_sql_migration/down.sql @@ -0,0 +1,28 @@ +-- Previous version of teams_summary view from 1713084872473_create_view_teams_summary/up.sql + +CREATE OR REPLACE VIEW "public"."teams_summary" AS SELECT + t.id, + t.name, + t.slug, + t.reference_code, + t.settings->>'homepage' as homepage, + t.domain as subdomain, + ti.has_planning_data as planning_data_enabled, + '@todo' as article_4s_enabled, + t.notify_personalisation as govnotify_personalisation, + CASE + WHEN coalesce(ti.production_govpay_secret, ti.staging_govpay_secret) is not null + THEN true + ELSE false + END as govpay_enabled, + t.submission_email as send_to_email_address, + coalesce(ti.production_bops_submission_url, ti.staging_bops_submission_url) as bops_submission_url, + tt.logo, + tt.favicon, + tt.primary_colour, + tt.link_colour, + tt.action_colour +FROM teams t + JOIN team_integrations ti on ti.team_id = t.id + JOIN team_themes tt on tt.team_id = t.id +ORDER BY t.name ASC; diff --git a/hasura.planx.uk/migrations/1720511391883_run_sql_migration/up.sql b/hasura.planx.uk/migrations/1720511391883_run_sql_migration/up.sql new file mode 100644 index 0000000000..32ffa2afde --- /dev/null +++ b/hasura.planx.uk/migrations/1720511391883_run_sql_migration/up.sql @@ -0,0 +1,32 @@ +CREATE OR REPLACE VIEW "public"."teams_summary" AS SELECT + t.id, + t.name, + t.slug, + t.reference_code, + t.settings->>'homepage' as homepage, + t.domain as subdomain, + ti.has_planning_data as planning_data_enabled, + '@todo' as article_4s_enabled, + jsonb_build_object( + 'helpEmail', ts.help_email, + 'helpPhone', ts.help_phone, + 'emailReplyToId', ts.email_reply_to_id, + 'helpOpeningHours', ts.help_opening_hours + ) as govnotify_personalisation, + CASE + WHEN coalesce(ti.production_govpay_secret, ti.staging_govpay_secret) is not null + THEN true + ELSE false + END as govpay_enabled, + t.submission_email as send_to_email_address, + coalesce(ti.production_bops_submission_url, ti.staging_bops_submission_url) as bops_submission_url, + tt.logo, + tt.favicon, + tt.primary_colour, + tt.link_colour, + tt.action_colour +FROM teams t + JOIN team_integrations ti on ti.team_id = t.id + JOIN team_themes tt on tt.team_id = t.id + JOIN team_settings ts on ts.team_id = t.id +ORDER BY t.name ASC; diff --git a/hasura.planx.uk/migrations/1720597665798_create_table_s3_applications/down.sql b/hasura.planx.uk/migrations/1720597665798_create_table_s3_applications/down.sql new file mode 100644 index 0000000000..d2db0a6dcf --- /dev/null +++ b/hasura.planx.uk/migrations/1720597665798_create_table_s3_applications/down.sql @@ -0,0 +1 @@ +DROP TABLE "public.s3_applications" CASCADE; diff --git a/hasura.planx.uk/migrations/1720597665798_create_table_s3_applications/up.sql b/hasura.planx.uk/migrations/1720597665798_create_table_s3_applications/up.sql new file mode 100644 index 0000000000..b5995aeb1c --- /dev/null +++ b/hasura.planx.uk/migrations/1720597665798_create_table_s3_applications/up.sql @@ -0,0 +1,11 @@ +CREATE TABLE "public"."s3_applications" ( + "id" serial NOT NULL, + "session_id" text NOT NULL, + "team_slug" text NOT NULL, + "webhook_request" JSONB NOT NULL, + "webhook_response" JSONB NOT NULL, + "created_at" timestamptz NOT NULL DEFAULT now(), + PRIMARY KEY ("id") +); + +COMMENT ON TABLE "public"."s3_applications" IS 'Stores a receipt of applications submitted using the Upload to AWS S3 method with notifications via Power Automate webhook'; diff --git a/hasura.planx.uk/migrations/1720635370662_add_s3_applications_to_submissions_summary_view/down.sql b/hasura.planx.uk/migrations/1720635370662_add_s3_applications_to_submissions_summary_view/down.sql new file mode 100644 index 0000000000..462fb42a34 --- /dev/null +++ b/hasura.planx.uk/migrations/1720635370662_add_s3_applications_to_submissions_summary_view/down.sql @@ -0,0 +1,79 @@ +CREATE OR REPLACE VIEW "public"."submission_services_summary" AS + WITH resumes_per_session AS ( + SELECT reconciliation_requests.session_id, + count(reconciliation_requests.id) AS number_times_resumed + FROM reconciliation_requests + GROUP BY reconciliation_requests.session_id + ), bops_agg AS ( + SELECT bops_applications.session_id, + json_agg(json_build_object('id', bops_applications.bops_id, 'submittedAt', bops_applications.created_at, 'destinationUrl', bops_applications.destination_url) ORDER BY bops_applications.created_at DESC) AS bops_applications + FROM bops_applications + GROUP BY bops_applications.session_id + ), email_agg AS ( + SELECT email_applications.session_id, + json_agg(json_build_object('id', email_applications.id, 'recipient', email_applications.recipient, 'submittedAt', email_applications.created_at) ORDER BY email_applications.created_at DESC) AS email_applications + FROM email_applications + GROUP BY email_applications.session_id + ), uniform_agg AS ( + SELECT uniform_applications.submission_reference, + json_agg(json_build_object('id', uniform_applications.idox_submission_id, 'submittedAt', uniform_applications.created_at) ORDER BY uniform_applications.created_at DESC) AS uniform_applications + FROM uniform_applications + GROUP BY uniform_applications.submission_reference + ), payment_requests_agg AS ( + SELECT payment_requests.session_id, + json_agg(json_build_object('id', payment_requests.id, 'createdAt', payment_requests.created_at, 'paidAt', payment_requests.paid_at, 'govpayPaymentId', payment_requests.govpay_payment_id) ORDER BY payment_requests.created_at DESC) AS payment_requests + FROM payment_requests + GROUP BY payment_requests.session_id + ), payment_status_agg AS ( + SELECT payment_status.session_id, + json_agg(json_build_object('govpayPaymentId', payment_status.payment_id, 'createdAt', payment_status.created_at, 'status', payment_status.status) ORDER BY payment_status.created_at DESC) AS payment_status + FROM payment_status + GROUP BY payment_status.session_id + ) + SELECT (ls.id)::text AS session_id, + t.slug AS team_slug, + f.slug AS service_slug, + ls.created_at, + ls.submitted_at, + ((ls.submitted_at)::date - (ls.created_at)::date) AS session_length_days, + ls.has_user_saved AS user_clicked_save, + rps.number_times_resumed, + ls.allow_list_answers, + (ls.allow_list_answers -> 'proposal.projectType'::text) AS proposal_project_type, + (ls.allow_list_answers -> 'application.declaration.connection'::text) AS application_declaration_connection, + (ls.allow_list_answers -> 'property.type'::text) AS property_type, + (ls.allow_list_answers -> 'drawBoundary.action'::text) AS draw_boundary_action, + (ls.allow_list_answers -> 'user.role'::text) AS user_role, + (ls.allow_list_answers -> 'property.constraints.planning'::text) AS property_constraints_planning, + CASE + WHEN (((pr.payment_requests)::jsonb IS NOT NULL) AND (jsonb_array_length((pr.payment_requests)::jsonb) > 0)) THEN true + ELSE false + END AS user_invited_to_pay, + pr.payment_requests, + ps.payment_status, + CASE + WHEN (((ba.bops_applications)::jsonb IS NOT NULL) AND (jsonb_array_length((ba.bops_applications)::jsonb) > 0)) THEN true + ELSE false + END AS sent_to_bops, + ba.bops_applications, + CASE + WHEN (((ua.uniform_applications)::jsonb IS NOT NULL) AND (jsonb_array_length((ua.uniform_applications)::jsonb) > 0)) THEN true + ELSE false + END AS sent_to_uniform, + ua.uniform_applications, + CASE + WHEN (((ea.email_applications)::jsonb IS NOT NULL) AND (jsonb_array_length((ea.email_applications)::jsonb) > 0)) THEN true + ELSE false + END AS sent_to_email, + ea.email_applications, + (ls.allow_list_answers -> 'findProperty.action'::text) AS find_property_action + FROM ((((((((lowcal_sessions ls + LEFT JOIN flows f ON ((f.id = ls.flow_id))) + LEFT JOIN teams t ON ((t.id = f.team_id))) + LEFT JOIN resumes_per_session rps ON ((rps.session_id = (ls.id)::text))) + LEFT JOIN payment_requests_agg pr ON ((pr.session_id = ls.id))) + LEFT JOIN payment_status_agg ps ON ((ps.session_id = ls.id))) + LEFT JOIN bops_agg ba ON ((ba.session_id = (ls.id)::text))) + LEFT JOIN uniform_agg ua ON ((ua.submission_reference = (ls.id)::text))) + LEFT JOIN email_agg ea ON ((ea.session_id = ls.id))) + WHERE ((f.slug IS NOT NULL) AND (t.slug IS NOT NULL)); diff --git a/hasura.planx.uk/migrations/1720635370662_add_s3_applications_to_submissions_summary_view/up.sql b/hasura.planx.uk/migrations/1720635370662_add_s3_applications_to_submissions_summary_view/up.sql new file mode 100644 index 0000000000..734c07fea5 --- /dev/null +++ b/hasura.planx.uk/migrations/1720635370662_add_s3_applications_to_submissions_summary_view/up.sql @@ -0,0 +1,90 @@ +CREATE OR REPLACE VIEW "public"."submission_services_summary" AS + WITH resumes_per_session AS ( + SELECT reconciliation_requests.session_id, + count(reconciliation_requests.id) AS number_times_resumed + FROM reconciliation_requests + GROUP BY reconciliation_requests.session_id + ), bops_agg AS ( + SELECT bops_applications.session_id, + json_agg(json_build_object('id', bops_applications.bops_id, 'submittedAt', bops_applications.created_at, 'destinationUrl', bops_applications.destination_url) ORDER BY bops_applications.created_at DESC) AS bops_applications + FROM bops_applications + GROUP BY bops_applications.session_id + ), email_agg AS ( + SELECT email_applications.session_id, + json_agg(json_build_object('id', email_applications.id, 'recipient', email_applications.recipient, 'submittedAt', email_applications.created_at) ORDER BY email_applications.created_at DESC) AS email_applications + FROM email_applications + GROUP BY email_applications.session_id + ), uniform_agg AS ( + SELECT uniform_applications.submission_reference, + json_agg(json_build_object('id', uniform_applications.idox_submission_id, 'submittedAt', uniform_applications.created_at) ORDER BY uniform_applications.created_at DESC) AS uniform_applications + FROM uniform_applications + GROUP BY uniform_applications.submission_reference + ), payment_requests_agg AS ( + SELECT payment_requests.session_id, + json_agg(json_build_object('id', payment_requests.id, 'createdAt', payment_requests.created_at, 'paidAt', payment_requests.paid_at, 'govpayPaymentId', payment_requests.govpay_payment_id) ORDER BY payment_requests.created_at DESC) AS payment_requests + FROM payment_requests + GROUP BY payment_requests.session_id + ), payment_status_agg AS ( + SELECT payment_status.session_id, + json_agg(json_build_object('govpayPaymentId', payment_status.payment_id, 'createdAt', payment_status.created_at, 'status', payment_status.status) ORDER BY payment_status.created_at DESC) AS payment_status + FROM payment_status + GROUP BY payment_status.session_id + ), s3_agg AS ( + SELECT s3_applications.session_id, + json_agg(json_build_object('id', s3_applications.id, 'submittedAt', s3_applications.created_at) ORDER BY s3_applications.created_at DESC) AS s3_applications + FROM s3_applications + GROUP BY s3_applications.session_id + ) + SELECT (ls.id)::text AS session_id, + t.slug AS team_slug, + f.slug AS service_slug, + ls.created_at, + ls.submitted_at, + ((ls.submitted_at)::date - (ls.created_at)::date) AS session_length_days, + ls.has_user_saved AS user_clicked_save, + rps.number_times_resumed, + ls.allow_list_answers, + (ls.allow_list_answers -> 'proposal.projectType'::text) AS proposal_project_type, + (ls.allow_list_answers -> 'application.declaration.connection'::text) AS application_declaration_connection, + (ls.allow_list_answers -> 'property.type'::text) AS property_type, + (ls.allow_list_answers -> 'drawBoundary.action'::text) AS draw_boundary_action, + (ls.allow_list_answers -> 'user.role'::text) AS user_role, + (ls.allow_list_answers -> 'property.constraints.planning'::text) AS property_constraints_planning, + CASE + WHEN (((pr.payment_requests)::jsonb IS NOT NULL) AND (jsonb_array_length((pr.payment_requests)::jsonb) > 0)) THEN true + ELSE false + END AS user_invited_to_pay, + pr.payment_requests, + ps.payment_status, + CASE + WHEN (((ba.bops_applications)::jsonb IS NOT NULL) AND (jsonb_array_length((ba.bops_applications)::jsonb) > 0)) THEN true + ELSE false + END AS sent_to_bops, + ba.bops_applications, + CASE + WHEN (((ua.uniform_applications)::jsonb IS NOT NULL) AND (jsonb_array_length((ua.uniform_applications)::jsonb) > 0)) THEN true + ELSE false + END AS sent_to_uniform, + ua.uniform_applications, + CASE + WHEN (((ea.email_applications)::jsonb IS NOT NULL) AND (jsonb_array_length((ea.email_applications)::jsonb) > 0)) THEN true + ELSE false + END AS sent_to_email, + ea.email_applications, + (ls.allow_list_answers -> 'findProperty.action'::text) AS find_property_action, + CASE + WHEN (((sa.s3_applications)::jsonb IS NOT NULL) AND (jsonb_array_length((sa.s3_applications)::jsonb) > 0)) THEN true + ELSE false + END AS sent_to_s3_power_automate, + sa.s3_applications + FROM ((((((((lowcal_sessions ls + LEFT JOIN flows f ON ((f.id = ls.flow_id))) + LEFT JOIN teams t ON ((t.id = f.team_id))) + LEFT JOIN resumes_per_session rps ON ((rps.session_id = (ls.id)::text))) + LEFT JOIN payment_requests_agg pr ON ((pr.session_id = ls.id))) + LEFT JOIN payment_status_agg ps ON ((ps.session_id = ls.id))) + LEFT JOIN bops_agg ba ON ((ba.session_id = (ls.id)::text))) + LEFT JOIN uniform_agg ua ON ((ua.submission_reference = (ls.id)::text))) + LEFT JOIN email_agg ea ON ((ea.session_id = ls.id)) + LEFT JOIN s3_agg sa ON ((sa.session_id = (ls.id)::text))) + WHERE ((f.slug IS NOT NULL) AND (t.slug IS NOT NULL)); diff --git a/hasura.planx.uk/tests/s3_applications.test.js b/hasura.planx.uk/tests/s3_applications.test.js new file mode 100644 index 0000000000..913e95cb8c --- /dev/null +++ b/hasura.planx.uk/tests/s3_applications.test.js @@ -0,0 +1,79 @@ +const { introspectAs } = require("./utils"); + +describe("s3_applications", () => { + describe("public", () => { + let i; + beforeAll(async () => { + i = await introspectAs("public"); + }); + + test("cannot query s3 applications", () => { + expect(i.queries).not.toContain("s3_applications"); + }); + + test("cannot create, update, or delete s3 applications", () => { + expect(i).toHaveNoMutationsFor("s3_applications"); + }); + }); + + describe("admin", () => { + let i; + beforeAll(async () => { + i = await introspectAs("admin"); + }); + + test("has full access to query and mutate s3 applications", () => { + expect(i.queries).toContain("s3_applications"); + expect(i.mutations).toContain("insert_s3_applications"); + expect(i.mutations).toContain("update_s3_applications_by_pk"); + expect(i.mutations).toContain("delete_s3_applications"); + }); + }); + + describe("platformAdmin", () => { + let i; + beforeAll(async () => { + i = await introspectAs("platformAdmin"); + }); + + test("cannot query s3_applications", () => { + expect(i.queries).not.toContain("s3_applications"); + }); + + test("cannot create, update, or delete s3_applications", () => { + expect(i).toHaveNoMutationsFor("s3_applications"); + }); + }); + + describe("teamEditor", () => { + let i; + beforeAll(async () => { + i = await introspectAs("teamEditor"); + }); + + test("cannot query s3_applications", () => { + expect(i.queries).not.toContain("s3_applications"); + }); + + test("cannot create, update, or delete s3_applications", () => { + expect(i).toHaveNoMutationsFor("s3_applications"); + }); + }); + + describe("api", () => { + let i; + beforeAll(async () => { + i = await introspectAs("api"); + }); + + test("can query and mutate s3 applications", () => { + expect(i.queries).toContain("s3_applications"); + expect(i.mutations).toContain("insert_s3_applications"); + expect(i.mutations).toContain("update_s3_applications_by_pk"); + }); + + test("cannot delete s3 applications", () => { + expect(i.mutations).not.toContain("delete_s3_applications"); + }); + }); +});